当前位置: 首页 > news >正文

网络复习二(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:

#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状态的连接

相关文章:

  • 从源码看无界 1.0.28:为何说它是 qiankun 的 “轻量化替代方案”(二)
  • Restful风格接口开发
  • 制造业项目管理如何做才能更高效?制造企业如何选择适配的数字化项目管理系统工具?
  • 【软件测试】bug 篇
  • 足迹在后 脚步向前
  • 过拟合、归一化、正则化、鞍点
  • java中的List集合去重
  • springBoot接入文心一言
  • 计算机视觉与深度学习 | 基于Matlab的钢筋计数
  • spark的堆外内存,是在jvm内还是操作系统内存内?
  • 什么是ISO20000认证,认证ISO20000有什么好处?重要意义
  • Pytest 自动化测试框架详解
  • 【物联网-RS-485】
  • MySQL InnoDB存储引擎中的日志系统解析:binlog、redo log、undo log
  • 笔记:代码随想录算法训练营day67:Floyd 算法精讲、A * 算法精讲 (A star算法) 严重超时完结,不过,撒花
  • HTML5+CSS前端开发【保姆级教学】+超链接标签
  • 如何保证本地缓存和redis的一致性
  • GEO全域优化白皮书:盈达科技如何打造AI生态中的认知护城河
  • 林纳斯·托瓦兹:Linux系统之父 Git创始人
  • Python 类方法
  • 国内首家破产的5A景区游客爆满,洛阳龙潭大峡谷:破产并非因景观不好
  • 中东睿评|特朗普中东三国行:喧嚣的形式与空洞的实质
  • 上海首发经济“卷”到会展业,浦东签约三个年度“首展”
  • 筑牢安全防线、提升应急避难能力水平,5项国家标准发布
  • 多地警务新媒体整合:关停交警等系统账号,统一信息发布渠道
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵