面试笔记(二):TCP/IP协议(tcp三次握手四次挥手,time_wait)

1.三次握手

https://blog.****.net/xingerr/article/details/72834303


2.四次挥手

https://blog.****.net/xingerr/article/details/72845941


3.time_wait(转自:http://blog.51cto.com/benpaozhe/1767612)

面试笔记(二):TCP/IP协议(tcp三次握手四次挥手,time_wait)

time_wait产生条件:主动关闭方在发送四次挥手的最后一个ACK会变为TIME_WAIT状态,保留次状态的时间为两个MSL(Max Segment Lifetime数据包在网络中最大生存时间;linux里一个MSL30s,是不可配置的)。

time_wait产生原因:为实现TCP全双工连接的可靠释放。如果没有time_wait,主动方发送的最后一个ACK若在传输途中丢失,被动方会对FIN开启TCP重传,如果有后续tcp连接,fin会对后续连接产生干扰。如果有time_wait,被动方对FIN开启TCP重传时,会发送多个FIN包,在这时尚未关闭的TIME_WAIT就会把这些尾巴问题处理掉,不至于对新连接及其它服务产生影响。

time_wait占用资源:少量内存(查资料大概4K)和一个fd。

time_wait危害:time_wait表示socket可以进入和留存相当长一段时间。如果系统中很多socket处于time_wait状态,创建新的socket会受到影响。

如何避免:增加本地端口的范围;缩短2MSL的时间。