十二、介绍一下tcp的四次挥手
💐
👨💻面试官:那么三次握手聊过了,再来个挥手吧。什么是四次挥手?
🙋♂️小宝:还是通过下图来对 四次挥手进行分析。
流程:
1、客户端主动调用close时,向服务端发送结束报文段FIN报,同时进入FIN_WAIT1状态;
2、服务器会收到结束报文段FIN报,服务器返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;
3、服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN报,此时服务器进入LAST_ACK状态,等待最后一个ACK的带来;
4、客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态
💐
👨💻面试官:那为什么要等待2MSL的时间呢?
🙋♂️小宝:MSL指的是报文在网络中最大生存时间。在客户端发送对服务端的FIN确认包ACK后,这个ACK包有可能到达不了,服务器端如果接收不到ACK包就会重新发送FIN包。
所以客户端发送ACK后需要留出2MSL时间(ACK到达服务器器+服务器发送FIN重传包,一来一回)等待确认服务器端缺失收到了ACK包。也就是说客户端如果等待2MSL时间也没收到服务器端重传的FIN包,则就可以确认服务器已经收到客户端发送的ACK包
💐
👨💻面试官:四次挥手的原因是什么呢?
🙋♂️小宝: TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当客户端发出FIN报文段时,只是表示客户端已经没有数据要发送了,客户端告诉服务器,它的数据已经全部发送完毕了;但是,这个时候客户端还是可以接受来自服务端的数据;当服务端返回ACK报文段时,表示它已经知道客户端没有数据发送了,但是服务端还是可以发送数据到客户端的;当服务端也发送了FIN报文段时,这个时候就表示服务端也没有数据要发送了,就会告诉客户端,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
简单地说,前 2 次挥手用于关闭一个方向的数据通道,后两次挥手用于关闭另外一个方向的数据通道。
后续
💐
👨💻面试官:好了今天的计网面试就到这里了,表现非常不错哦,期待你下场更好的表现!
🙋♂️小宝:谢谢面试官。面试官再见!
小宝在经历了非人的面试后长叹一口气,心想这简直就是地狱呀。辛亏我面试前看了 铁甲小宝同学总结的计网面试题才让我有惊无险,我得里面给他 三连 去。
哈哈哈,希望本篇文章能够帮助那些还在面试的小伙伴们哦。同时也很感谢 牛客、csdn、小林coding等大佬们分享的一些计网知识点哦。
面试的路上还有很长。你我同行,共进步,共成长!我们下期见。
文章知识点与官方知识档案匹配,可进一步学习相关知识
网络技能树支撑应用程序的协议HTTP协议1110 人正在系统学习中