论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
你所不知道的端口耗尽(一)
你所不知道的端口耗尽(一)
科技颠覆者
金牌会员
|
2024-5-11 19:42:51
|
显示全部楼层
|
阅读模式
楼主
主题
900
|
帖子
900
|
积分
2700
问题背景
有同事联系我说,在生产环境上,访问不了我负责的common服务,然后我去检查common服务的health endpoint, 没问题,然后我问了下异常,timeout导致的System.OperationCanceledException。那大概率是客户端的问题,会不会是端口耗尽,用netstat看下是不是有大量的端口占用,果然如此,大概如图:
什么是端口耗尽
端口耗尽(Port Exhaustion)是指当系统中可用的TCP/IP端口号被全部占用,而无法建立新的网络连接时产生的一种情况。例如,在进行大量的网络连接,如客户端与服务器之间频繁地建立和断开连接时,可能会发生端口耗尽。如果客户端在短时间内打开了大量的短暂连接,并且由于TCP协议的TIME_WAIT状态,这些端口不能立即被重用,就可能出现端口耗尽的现象。此时,新的出站连接可能会失败,因为找不到可用的源端口号。
端口是有限的
每个TCP或UDP连接由一个四元组唯一标识:源IP地址、源端口号、目的IP地址以及目的端口号。在一个给定的源IP地址中,端口号是有限的,通常是从1024到65535(0到1023保留给系统和知名端口)。
拓展阅读,如何查看Linux中的可用端口范围
cat /proc/sys/net/ipv4/ip_local_port_range
复制代码
什么是TIME_WAIT状态
在TCP/IP网络中,TIME_WAIT状态是TCP连接结束过程的一部分。这是一个正常的状态,发生在一个连接关闭的准备阶段,此时通常是客户端已经发送了一个FIN(结束)数据包来表示它没有更多数据要发送,并且也已经收到了另一侧(通常是服务器)的确认。
下面是TIME_WAIT状态在TCP连接终止过程中的作用:
主动关闭:客户端向服务器发送一个FIN数据包,表示它已经完成数据发送。
服务器接收到FIN,发送一个ACK(确认),并进入CLOSE_WAIT状态,表示它已经确认了客户端结束连接的请求。
服务器在发送完所有剩余的数据后,发送自己的FIN数据包。
客户端接收到服务器的FIN,发送回一个ACK,并进入TIME_WAIT状态。
TIME_WAIT状态会持续一个时间段,这个时间是最大报文生命周期(MSL)的两倍,这是一个确保连接相关的所有数据包不再存在于网络中的定义期间。这个时间通常被设置为2分钟,
因此TIME_WAIT状态的持续时间通常是4分钟
。
TIME_WAIT状态的主要原因有:
确保网络上延迟的数据包被丢弃,避免可能干扰后续新的连接。
允许TCP连接可靠地结束,确保FIN-ACK握手过程正确结束。
确保如果客户端到服务器的最后一个ACK丢失,客户端仍处于TIME_WAIT状态,这样如果服务器因为没有收到ACK而重新发送FIN,客户端可以重新发送ACK。
在高流量的服务器中,TCP连接经常地开启和关闭,TIME_WAIT状态以及它的持续时间可能导致大量的套接字处于这个状态,从而可能耗尽可用的端口。
如何解决
改变TIME_WAIT时间,即减少端口被占用的时间;不推荐,尽量使用默认设置
启用端口重用,例如TCP端口复用(SO_REUSEADDR)选项;
增加可用的端口范围。
保证端口尽早尽快的释放
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
科技颠覆者
金牌会员
这个人很懒什么都没写!
楼主热帖
XAML 设计器已意外退出。(退出代码: e0 ...
OpenCV提取十字标中心点的几种思路 ...
我分析30w条数据后发现,西安新房公摊 ...
Python itertools 库的使用记录
Windows | RDPWrap 远程桌面登录加强工 ...
计算机网络学习—计算机网络概述 ...
码上加速,低代码解锁高效交付案例 ...
SQLI-LABS(Less-7)
WPF 使用 MAUI 的自绘制逻辑
Cesium 案例(二)Web MapTile Service ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表