网络复习二(TCP【3】)

一、为什么TIME_WAIT等待的时间是2MSL?

MSL:报文最大生存时间

我们要知道TCP报文是基于IP协议生存的,而在IP头中有一个TTL(经过路由跳数),当TTL为0使,数据报被丢失,同时发送ICMP报文通知主机

因此MSL的时间应该大于等于TTL消耗为0的时间(Linux设置MSL=30秒)

我们再来说一说为什么TIME_WAIT为什么是2MSL?

2MSL是从客户端收到FIN发送ACK开始计时的

举个例子:当客户端主动关闭连接,而服务端没有收到ACK报文,这时我们进行超时重传,服务端再次发送一个FIN,而客户端收到FIN后,会再次发送ACK报文,而这个时间刚好是2MSL。(因此2MSL相当于为至少可以丢失一次报文)

定义在Linux内核代码里的名称为TCP_TIMEWAIT_LEN:

cpp 复制代码
#define TCP_TIMEWAIT_LEN (60*HZ)

若要修改TIME_WAIT的时间长度,只能修改Linux内核代码里TCP_TIMEWAIT_LEN的值,并重新编译Linux内核

二、为什么需要TIME_WAIT状态

  • 防止历史连接中的数据,被后面相同四元组的连接错误的接收
  • 保证【被动关闭连接】的一方,能被正确的关闭

三、TIME_WAIT过多有什么危害?

  • 第一是占用系统资源,比如文件描述符、内存资源、CPU资源,线程资源等
  • 第二是占用端口资源,端口资源也是有限的

四、服务器出现大量TIME_WAIT状态的原因有哪些?

  • HTTP没有使用长连接

当服务器出现大量的TIME_WAIT状态连接的时候,可以排查下是否客户端和服务端都开启了HTTP Keep-Alive,因为任意一方没有开启HTTP Keep-Alive,都会导致服务端在处理完一个HTTP请求后,主动关闭连接,此时服务端上就会出现大量的TIME_WAIT状态的连接

  • HTTP长连接超时

如果客户端在完成一个HTTP请求后,在长连接超时时间内没有再发起新的请求,定时器的时间一到,nginx就会触发回调函数来关闭该连接,那么此时服务端上就会出现TIME_WAIT状态的连接

  • HTTP长连接的请求数量达到上限

如果长连接的请求数量达到上限,则nginx会主动关闭这个长连接,那么此时服务端上就会出现TIME_WAIT状态的连接

相关推荐
nxb5567 小时前
haproxy算法,ip透传,自定义haproxy错误页面
运维·服务器
黑桃小柒79 小时前
小,最终显示为TCP WINDOW FULL,TCP ZeroWindow。 仔细分析了下LWIP源码,还以为是内存管理出了问题,跟 ...
网络·网络协议·tcp/ip
网络研究院11 小时前
LastPass 发布紧急安全预警:针对主密码的活跃网络钓鱼攻击正在进行中
网络·安全·黑客·攻击·漏洞·风险·钓鱼
便利店102411 小时前
TCP 为什么有时故意跑不快?拥塞控制与滑动窗口一次讲清
服务器·网络协议·tcp·拥塞控制
向夏威夷 梦断明暄12 小时前
【高效管理token成本】OpenClaw精细化分库管理memory以减少token成本的方案的可行性研究
网络
杨某不才13 小时前
如何能让Linux服务器对shell 终端 + sftp 文件传输长期保活
linux·运维·服务器
vance0413 小时前
免费Cloudflare隧道隐藏公网IP
linux·tcp/ip·github
三言老师14 小时前
文本工具组合统计服务器日志数据
linux·运维·服务器
m0_7436975914 小时前
DNS服务器
运维·服务器
酷可达拉斯15 小时前
Linux操作系统-免密登录远程操作系统
linux·运维·服务器·网络·云计算