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

HTTP:TIME_WAIT累积与端口耗尽

背景:当某个 TCP 端点关闭 TCP 连接时,会在内存中维护一个小的控制块,用来记录最 近所关闭连接的 IP 地址和端口号。这类信息只会维持一小段时间,通常是所估计的 最大分段使用期的两倍(称为 2MSL,通常为 2 分钟 8)左右,以确保在这段时间内 不会创建具有相同地址和端口号的新连接。实际上,这个算法可以防止在两分钟内 创建、关闭并重新创建两个具有相同 IP 地址和端口号的连接。

现在高速路由器的使用,使得重复分组几乎不可能在连接关闭的几分钟之后,出现 在服务器上。有些操作系统会将 2MSL 设置为一个较小的值,但超过此值时要特别小心。分组确实会被复制,如果来自之前连接的复制分组插入了具有相同连接值的 新 TCP 流,会破坏 TCP 数据。

2MSL 的连接关闭延迟通常不是什么问题,但在性能基准环境下就可能会成为一个 问题。进行性能基准测试时,通常只有一台或几台用来产生流量的计算机连接到某 系统中去,这样就限制了连接到服务器的客户端 IP 地址数。而且,服务器通常会在 HTTP 的默认 TCP 端口 80 上进行监听。用 TIME_WAIT 防止端口号重用时,这些 情况也限制了可用的连接值组合。

在只有一个客户端和一台 Web 服务器的异常情况下,构建一条 TCP 连接的 4 个值: <source-IP-address, source-port, destination-IP-address, destination-port>

其中的 3 个都是固定的——只有源端口号可以随意改变: <client-IP, source-port, server-IP, 80>

解决方案:客户端每次连接到服务器上去时,都会获得一个新的源端口,以实现连接的唯一性。 但由于可用源端口的数量有限(比如,60 000 个),而且在 2MSL 秒(比如,120 秒)内连接是无法重用的,连接率就被限制在了 60 000/120=500 次 / 秒。如果再不 断进行优化,并且服务器的连接率不高于 500 次 / 秒,就可确保不会遇到 TIME_ WAIT 端口耗尽问题。要修正这个问题,可以增加客户端负载生成机器的数量,或 者确保客户端和服务器在循环使用几个虚拟 IP 地址以增加更多的连接组合。

即使没有遇到端口耗尽问题,也要特别小心有大量连接处于打开状态的情况,或为 处于等待状态的连接分配了大量控制块的情况。在有大量打开连接或控制块的情况 下,有些操作系统的速度会严重减缓。


http://www.kler.cn/a/506113.html

相关文章:

  • c#-Halcon入门教程——标定
  • 我要成为算法高手-DFS篇
  • AWS云计算概览(自用留存)
  • 《HTML在网络安全中的多面应用:从防范攻击到安全审查》
  • JAVA:在IDEA引入本地jar包的方法(不读取maven目录jar包)
  • STM32-笔记40-BKP(备份寄存器)
  • delphi 调用 c++Dll 函数获取纯真ip地址
  • 浅谈云计算15 | 存储可靠性技术(RAID)
  • 如何在谷歌浏览器中设置自定义安全警告
  • k8s 集群组件
  • android 主题都表示什么意思
  • 怎么防止SQL注入攻击
  • Uniapp-运行到手机安卓基座报错
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>优美的排列
  • 【力扣Hot 100】普通数组1
  • Oracle FLOOR函数的用法
  • week07_nlp文本分类任务
  • React封装倒计时按钮
  • msck批量
  • 案例|富唯智能复合机器人CNC柔性上下料
  • Python|【Pytorch】基于小波时频图与SwinTransformer的轴承故障诊断研究
  • 【网络编程】基础知识
  • 仿infobip模板功能-可通过占位符配置模板内容
  • 关于在vue3中使用v-for动态ref并控制el-tooltips当文字溢出时才展示的问题
  • WPS计算机二级•常用图表制作
  • NLP DAY1: 文本数据读取