TCP协议的三次握手和四次握手

TCP协议的三次握手和四次握手讲解

位码即tcp标志位
有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

三次握手

首先上图
在这里插入图片描述
第一次握手
同步位为1,确认标志位为0,seq 为发送数据包的序列号 为x。
** 第二次握手**
同步位依旧为1,确认标志位置为1,代表这个服务器B对第一次消息的确认,ack 位(acknowledge number)返回x+1。为什么呢?第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,如果第一次握手携带的数据不为空,应该返回的ack位是x+length,如果是空数据的话也应该是X,那么为什么会进行+1呢,因为SYN和FIN标志位的存在,使得x+1了.指示在数据包中接收到客户端的SYN标志#1。,同时服务器B产生一个序列号为Y的数据包进行发送 即为SYN = 1,ACK = 1,seq = y,ack = x +1.
注意点
请注意,尽管客户端尚未发送任何有效载荷数据,但确认号已增加1。这是因为在接收到的数据包中SYN或FIN标志的存在会触发序列增加1。(这不会影响有效载荷数据的记帐,因为设置了SYN或FIN标志的数据包不携带有效载荷。)
第三次握手
ack = y+1,同上面第二次握手。
像在数据包2中一样客户端包括其自己的序列号为y +1(由于SYN而从零开始递增)。
在这里插入图片描述
链接:上述图片的讲述,是真的讲的不错

为什么建立连接需要三次握手呢?

首先,双方建立连接,都需要对对方的seq 进行确认。我们可以以此进行三次握手进行拆分
第一次握手:A 发送SYN = 1, seq = x 到B
第二次握手:B 发送SYN = 1,ack number = x +1 发送到A
第三次握手 :B 发送seq = y 到A
第四次握手:A 发送 SYN = 1,ack number = y +1,seq = x +1;
很明显,第二次握手 和 第三次握手 是可以合并的,所以只需要三次握手 就可以建立握手。

四次握手

在这里插入图片描述

为什么关闭的时候需要四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么在TIM_WAIT必须等待2MSL时间?
1)保证A发送的最后一个ACK报文段能够到达B。
最后一个ACK报文段有可能丢失,客户端就会认为连接已经关闭了,而服务器没有收到确认应答,会认为连接还未关闭。所以就会触发超时重传机制,服务器超时重传一个FIN,接着客户端重传一次确认,重新启动2MSL计时器,最后A和B都进入到CLOSED状态,若客户端在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到服务器重传的FIN报文段,所以不会再发送一次确认报文段,则服务器就无法正常进入到CLOSED状态。

2)防止“已失效的连接请求报文段”出现在本连接中。
客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。
————————————————
版权声明:本文为CSDN博主「mxrrr_sunshine」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mxrrr_sunshine/article/details/80362360

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值