首页 > 编程知识 正文

tcp为什么需要四次挥手,tcp协议的四层体系结构

时间:2023-05-03 15:35:48 阅读:32766 作者:120

挥手4次也要做什么?

由于TCP的连接是全双工的,因此断开连接需要分别断开两个通道,但四次摆动是断开两个通道和释放资源。

TCP提供所谓的半关闭,即连接的一端完成他的发送后,可以接收来自另一端的数据的能力。

TCP/IP详细信息卷I

在本例中,客户端为主动启动器,服务器为被动关闭侧。

首先,客户端主动向服务器发出Req。 此服务器包含FIN标识符位=1,其中客户机的Seq序列号n表示当前客户机连接的当前序列号。

在第2步中,服务器端接收到包含此FIN的Req消息后,如果检查无误,将立即向客户端返回ACK消息。 消息内部的ACK标志位为1,Seq编号为FIN请求消息的Seq编号1。 此时的Sever会积极地向Server上的APP应用层程序发送结束标识符。 然后,APP应用层程序可以确定是立即关闭,还是在服务器上该连接的数据处理后,向客户端发送一条FIN消息以关闭另一半的连接。

在第3步中,服务器端处理连接上Pending居住的数据,然后APP应用程序进行名为close的连接。 客户端积极地向客户端发送FIN的Req消息。 消息内部带有FIN=1的结束符识别符位和服务器端的Seq序列号。

在第4步中,客户端在收到相应的FIN消息后,会主动通知APP应用层程序,告知您必须关闭此连接。 然后,客户端将包含ACK=1的标识位和FIN的REQ带来的Seq 1的ACK消息返回给服务器,以断开其他方向的信道。

为什么需要挥手4次?

因为TCP是全双工协议,所以必须单独移除每个通道。 4挥手的目的是停止数据传输,回收资源。 这时,两个端点两个方向的序列号没有任何关系,两个方向都没有数据传输的情况下,必须等待拆除虚拟链路,不像初始化时那么简单。 找到SYN标志后初始化序列号,确认SYN的序列号。 因此,必须单独单向结束这个方向的数据传输。

挥手三次会怎么样? 在三次情况下,被动关闭端在收到FIN消息后,必须同时回复ACK和服务器端的FIN消息。 如果服务器端不需要在该连接上处理Pending消息,则可以。 如果服务器端关闭其他方向的连接需要时间的话,这样的3次挥手也不能满足条件。

4挥手状态的转换?

客户端:

established---server---FIN _ wait _1--- -与服务器端发送来的fin相对应的ack----fin_wait_2----server

服务器端:

established----客户端的fin-closed _ wait--关闭服务器端的APP应用程序以接收客户端对fin----last_ACK----fin的ack响应

Tcp/ip详细信息卷I

其中4次挥手与Scoket函数的对应关系如下。

照片来自网络。 如果有侵害的话请通知我。 立即删除

4挥手失败会怎么样?

在4次挥手中,最典型的场景是Client成为TIME_WAIT后的2MSL的时间处理。 (备注) MSL是TCP消息中最大的生存时间,它是任何消息段被丢弃之前在网络中的最大时间。 )

设置2MSL的目的是处理服务器端重新发送最后一个FIN时客户端可以发送最后一个ACK的时间。

在此时间段内,无论是客户端还是服务器端,都最好不要重用此TCP上的端口。 否则,基于此端口新建立的连接可能会被错误地清除。 详细情况如下。

step 1:服务器向客户端发送的最后一个FIN由客户端接收,也向服务器发送了ACK,但服务器没有接收到此ACK。 step2:于是客户端复用了这个端口号码,创建了新的连接。 这里设为newConnection。 step3:Server在此过程中向客户端发送了重新发送的FIN。 刚刚在客户端上创建的新连接将再次关闭。

参考资料:

3359 blog.csdn.net/QQ _ 34501940/article/details/5119726

3359 blog.csdn.net/vary all/article/details/80348850

TCP/IP详细信息卷1

欢迎使用公众号:灰子学技术

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。