TCP三次握手和四次挥手以及拓展(帮助理解)

TCP建立和断开连接

图片来源:https://blog.csdn.net/qq_36520235/article/details/82894126#commentBox

TCP三次握手(可以不太关注前面的图,后面有解释)

TCP三次握手和四次挥手以及拓展(帮助理解)_第1张图片

TCP四次挥手

TCP三次握手和四次挥手以及拓展(帮助理解)_第2张图片

MSL:报文段最大生存时间,通常MSL的常用值为30秒,1分钟,2分钟
握手与挥手在下面描述,请不要走开

为什么要等待2MSL的时间?

自己YY的:因为服务端发送FIN信号之后,开始等待客户端发来的确认信息,客户端在接收到之后,开始发送报文段给服务端,而最大报文寿命(生存时间)是也就是MSL内之后,如果服务器没收到,说明这个包肯定丢失了,所以就可以给客户端重发请求,此时客户端正好处于1MSL~2MSL等待时间之间,正好可以重发一次,我真是个天才

为什么建立连接是三次握手,断开连接却要四次挥手(包含建立连接和断开连接的过程)

TCP三次握手和四次挥手以及拓展(帮助理解)_第3张图片
刚开始客户端已经准备好了之后给服务端发送一个seq序号)=u,SYN=1说明自己来意:我想建立连接!
服务端收到后,已经知道客户端准备好了接收数据了,就将确认信号ACK设置为1,确认收到客户端数据的信号ack=u+1(我收到了你的数据,下一次请从u+1开始发),自己要发的信号seq=w(我要发数据的起始位置)给客户端,说明自己接收到了数据,并要建立连接给客户端发数据~
客户端再确认一遍(ACK=1,seq=u+1,ack=w+1),连接就建立起来了

而断开连接时,客户端发送FIN=1,seq=u(最后的数据)信号来说明来意,表示自己不会再发信号给服务端,服务端发送确认信号,说你的数据我收到了ack=u+1,确认关闭连接ACK=1,然后把自己的数据附带上seq=w,客户端接收到之后,知道服务器已经收到,便关闭了写连接,因为自己没什么发的了,但是还是可以收数据的,等服务器把数据发完之后,向客户端发送FIN=1,seq=y表示这是最后的数据了,客户端收到之后,确认,但是又不放心服务端是不是能收到,于是说:我的信息发给你要一分钟,那我就等个两分钟看看你有没有真的收到,如果没收到肯定是要再给我发的,服务器也心中有数了:你的确认我最多一分钟就收到了,我要是等一分钟没收到,发的东西肯定丢失了,我就再给你发一次FIN,就这样,客户端等了2MSL之后才会关闭连接,如果服务器没收到,客户端也仁至义尽了,莫得办法

咳咳,回到正题,多出来的这一次就是握手时 服务端将ACK和seq(相当于建立连接的意思吧)一起给了客户端,因为它知道客户端已经准备好了接收信息了,而断开时 将ACK和FIN分开了,因为服务端如果有东西还可以继续发。

握手:客户端请求建立 -> 服务器确认建立+请求建立 -> 客户端确认建立

挥手:客户端请求关闭 -> 服务器确认关闭 -> 服务器确认关闭-> 客户端确认关闭

简化版握手+挥手

TCP三次握手和四次挥手以及拓展(帮助理解)_第4张图片

你可能感兴趣的:(计算机网络)