计算机网络————“三次握手”

TCP在传输之前会进行三次沟通,一般称为“三次握手”

首先,认识两个序号和三个标志位

  (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
  (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下

  (A)URG:紧急指针(urgent pointer)有效。
  (B)ACK:确认序号有效。
  (C)PSH:接收方应该尽快将这个报文交给应用层。
  (D)RST:重置连接。
  (E)SYN:发起一个新连接。
  (F)FIN:释放一个连接。

 需要注意的是:
  (A)不要将确认序号ack与标志位中的ACK搞混了。
  (B)确认方ack=发起方req+1,两端配对。

 

 

第一次消息发送中,A随机选取一个序列号作为自己的初始序号(seq)发送给B;

第二次消息B使用ack对A的数据包进行确认。

        因为B已经收到序列号为x的数据包,B准备接受序列号为x+1的包,

        所以ack=x+1。同时B告诉A自己的初始序列号:seq = y;

第三次消息A告诉B收到B的确认消息并准备建立连接。A自己这条消息的序列号是x+1,所以seq=x+1, 而ack=y+1是表示A正准备接受B序列号为y+1的数据包。

网站:www.baidu.com

测试软件:Wireshark

由上之下,一次展开(从左到右)

“三次握手”的必要性:

       现假定出现一种异常情况,即A发出的第一个连接请求报文到并没有丢失,而是因为某些网络节点长时间滞留了,以致延误到连接释放后的某个时间才到达B(这时A与B连接已经成功)

      本以为这是个已失效的报文段。但是B收到此“已失效的报文段”后,就误以为A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。

由于现在A并没有再次向B发出建立请求的连接,因此就不会理会B,也不会向B发送数据。但是B却一直等待A发来数据。这样就会浪费B的资源利用。

采用“三次握手”的方法可以防止上述现象的发生。如上述的假定情况,A不会向B发送确认信息。B由于收不到确认,就知道A并没有要求建立连接

猜你喜欢

转载自blog.csdn.net/weixin_40030258/article/details/84258455