如何快速理解tcp的三次握手与四次挥手?

发布网友 发布时间:2天前

我来回答

1个回答

热心网友 时间:1分钟前

面试官你好,今天来聊聊TCP吧,TCP的三次握手与四次挥手流程。在说流程之前,先简单回顾下TCP头部格式。对于TCP三次握手与四次挥手,我们主要关注的字段有:序列号、确认号以及SYN、ACK、FIN、RST等标记位。序列号:初次建立连接时,客户端与服务端会为「本次连接」随机初始化一个序列号。该序列号在整个TCP流程中用于解决网络包乱序问题。确认号:接收端用于告诉发送端对上一个数据包已成功接收,以解决网络包丢失问题。标记位中,SYN为1时,表示希望创建连接;ACK为1时,确认号字段有效;FIN为1时,表示希望断开连接;RST为1时,表示TCP连接出现异常,需要断开。

TCP三次握手的过程其实就是在确认通信双方的序列号。整个过程分为以下步骤:在最开始的时候,客户端和服务端都处于CLOSE状态。服务器主动监听某个端口,处于LISTEN状态。客户端随机生成序列号(通常称为client_isn),并设置SYN标记位,将报文发送给服务端。客户端发送SYN报文后,自己进入SYN_SEND状态。服务端接收客户端请求,初始化序列号(通常称为server_isn),在确认号字段里填上client_isn + 1,并点亮SYN和ACK标记位,将报文发送给客户端,服务端状态变为SYN-REVD。客户端收到服务端报文后,知道服务端已经接收了自己的序列号,并接收到了服务端的序列号(server_isn)。此时,客户端在「确认号」字段上填上server_isn+1,并标记ACK位,发送报文。客户端进入ESTABLISHED状态,服务端接收到报文后,也进入ESTABLISHED状态。这就是三次握手的过程以及涉及到的TCP状态。总结来说,双方都把自己序列号发给对方,看对方是否能接收。如果「确认可以」,双方就可以正常通信。

四次挥手流程在建立连接后,由客户端或服务端主动断开连接。假设客户端主动断开,会发送FIN报文给服务端,将FIN标记位点亮。客户端发送完FIN报文后,进入FIN_WAIT_1状态。服务端收到FIN报文,回复ACK报文,发送完后,进入CLOSE_WAIT状态。客户端接收到服务端的ACK后,进入FIN_WAIT_2状态。此时,服务端可能还有数据要发送给客户端,当服务端确认自己已无数据返回后,发送FIN报文给客户端,自己进入LAST_ACK状态。客户端收到FIN报文后,回应ACK报文,自己进入TIME_WAIT状态。服务端收到客户端的ACK后,进入CLOSE状态。客户端在TIME_WAIT等待2MSL后,也进入CLOSE状态。四次挥手流程至此结束。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com