tcp协议三次握手
大家在学习网络这一块的时候,三次握手是必不可少的,那么具体的三次握手是怎么一回事呢
我这边也是给大家说一下。相信大家都玩过回合制游戏吧,比如说仙剑奇侠传四,在战斗的时候都是你来我往的,你打一下我打一下,那么三次握手也是类似的,具体看图
下面说一下具体的三次握手的过程:
第一次:
首先是客户端,也就是浏览器端发出连接请求,比如说输入网址按回车,此时syn=1,与此同时将会产生一个随机的序列号seq=x,这里的序列号不是确定的,随机产生的,syn=1是此时处于发送请求连接的状态,白话就是我要请求连接,对方请回应
第二次:
接下来就是服务器端,服务器端接收到客户端来的请求连接,会回应一个ack,表示我接收到了你的请求,此时ack=x 1,也就是说回应的值为客户端发来的序列加上1。与此同时,自己服务器端也要给客户端那边发送一个请求,表示我也要和你连接,你也回应一下,此时syn=1,并且也会生成自己的一个随机序列seq=y。
第三次:
然后回到了客户端这边,客户端收到了服务端的回应以及请求,也会回一个ack=y 1(服务器端的序列号加1),并且将发来的自己的序列号加1的基础上再加上1,此时连接完成
疑问点
为什么是三次握手,而不是两次,或者是更多次呢?
咱们都熟悉的些希仁写的《计算机网络》第四版讲的三次握手的目的是为了防止已失效的连接请求报文突然又传到了服务器端因而产生错误。
为什么不是是两次呢?
具体解释为,因为网络的环境是不确定的,当第一个连接请求报文在网络里因为某些原因滞留了,没有发送到服务器端,客户端以为丢失需要重发。但第一个请求只是延后了,也发送到了服务端那里,服务端以为发出了新的请求,就会等待,其实客户端什么都没有做,白白的浪费了服务端的资源,所以需要三次握手进行相互确认
为什么不是更多次呢?
这话说的,你一万次握手都行,但有必要吗,就好像谈恋爱,追求者说我爱你,在一起吧,被追求者说,我知道了,我也爱你,也要和你在一起,然后追求者回一下太好了,再表示一下就可以,不会再说我真的好爱你,被追求者说,我还是好爱你,烦不烦呢?