TIME_WAIT详解
TIME_WAIT 作用
TIME-WAIT是TCP链接的一种状态 , 四次挥手中TIME_WAIT只在主动关闭的过程中出现,实际上TIME_WAIT是TCP为了解决复杂的网络问题提出的一种解决方案 。
四次挥手中,A 发 FIN, B 响应 ACK,B 再发 FIN,A 响应 ACK 实现连接的关闭。而如果 A 响应的 ACK 包丢失,B 会以为 A 没有收到自己的关闭请求,然后会重试向 A 再发 FIN 包。
如果没有 TIME_WAIT 状态,A 不再保存这个连接的信息,收到一个不存在的连接的包,A 会响应 RST 包,导致 B 端异常响应。
此时, TIME_WAIT 是为了保证全双工的 TCP 连接正常终止。
我们还知道,TCP 下的 IP 层协议是无法保证包传输的先后顺序的。如果双方挥手之后,一个网络四元组(src/dst ip/port)被回收,而此时网络中还有一个迟到的数据包没有被 B 接收,A 应用程序又立刻使用了同样的四元组再创建了一个新的连接后,这个迟到的数据包才到达 B,那么这个数据包就会让 B 以为是 A 刚发过来的。
此时, TIME_WAIT 的存在是为了保证网络中迷失的数据包正常过期。
第一种场景:TIME_WAIT是为了确保被动关闭方收到ACK,连接正常关闭,且不因被动关闭方重传FIN影响下一个连接。
第二种场景:TIME_WAIT保留2个MSL,以确保数据不会丢失。
由于以上的两种场景,TCP引入了TIME_WAIT状态来解决,由此可见TIME_WAIT并不是完全不存在才是合理的或以消除TIME_WAIT为优化的一个目标 。
参考链接
- 这些 TIME_WAIT 的性能优化,运维必须要了解的~ - 文章详情 (itpub.net)
- net.ipv4.tcp_max_tw_buckets 配置说明 - 简书 (jianshu.com)
- 解决TIME_WAIT过多造成的问题 - 芹溪 - 博客园 (cnblogs.com)
- (70条消息) TCP的TIME_WAIT作用与优化_anjingla的博客-CSDN博客_time_wait时间优化
优化
以下优化只需在有大量TIME_WAIT时优化,即nginx或web服务器,正常的tcp服务器不需要优化
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!