设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 592|回复: 0

windows server 2022服务器运行比特彗星软件一段时间后tcp端口异常丢失,该问题难以复现,排除临时端口解决

[复制链接]
 成长值: 777

签到天数: 5245 天

[LV.Master]伴坛终老

发表于 2025/12/28 21:35 | 显示全部楼层 |阅读模式 |Google Chrome 143.0.0.0|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
windows server 2022服务器运行比特彗星软件一段时间后tcp端口异常丢失,该问题难以复现,排除临时端口解决

tcp端口突然丢失找到复现原因了,用户列表peer发起tcp请求的时候,如果软件用到的本地端口和软件监听端口一致,就会导致线程死锁出现tcp端口丢失
1.png

2.png

3.png

windows server系统默认的端口范围是1024-64511,现有版本解决方案,把端口改成3位数(或者65000及之后的端口),避免用到临时端口,后续新版本可以从软件代码上解决
C:\Users\Administrator>netsh int ipv4 show dynamicport tcp

协议 tcp 动态端口范围
---------------------------------
启动端口        : 1024
端口数          : 64511


C:\Users\Administrator>


Windows10 11家用系统不受此问题影响,家用电脑不会丢失tcp端口,默认的临时端口是49152-64511

Windows server不换tcp监听端口的解决办法
  1. netsh int ipv4 add excludedportrange protocol=tcp startport=1235 numberofports=1 store=persistent
  2. netsh int ipv4 add excludedportrange protocol=tcp startport=22223 numberofports=1 store=persistent
  3. netsh int ipv4 add excludedportrange protocol=tcp startport=22224 numberofports=1 store=persistent
复制代码


确认排除临时端口成功
  1. netsh int ipv4 show excludedportrange protocol=tcp
复制代码


后续如果要删除添加的排除端口
  1. netsh int ipv4 delete excludedportrange protocol=tcp startport=1235 numberofports=1 store=persistent
  2. netsh int ipv4 delete excludedportrange protocol=tcp startport=22223 numberofports=1 store=persistent
  3. netsh int ipv4 delete excludedportrange protocol=tcp startport=22224 numberofports=1 store=persistent
复制代码


以上依旧是猜测的结果,因为Windows本身会自动跳过22223当前软件监听端口,上方图中的22223其实是远程访问本地,任务管理器没显示来源方向而已,本地发起请求的时候使用的临时端口会跳过已监听
111.png

至少能比较轻松的复现了,软件全选任务停止,批量替换tracker清空等待发起,开启任务就能概率复现
出现丢tcp端口能观察到的就是会卡住几个ESTABLISHED,然后过几分钟会变成CLOSE_WAIT状态一直不消失
  1. netstat -ano | find "22223"
复制代码

111111.png

并且,上面添加添加排除端口的方法实际上测试后并不起作用,添加排除后依旧会出现比特彗星丢端口的情况,比较Windows系统内核已经自动化的排除了
等于说又陷入了不知道这是什么原因导致的丢端口,今天得到的结果就是能复现这个问题了,只要重复那个操作开启几次任务就能复现

2026年5月4日帖子补充
tcp丢端口除了cpu多线程静态竞争条件,应该是没用原子计数导致意外出现<0引起负数的值导致互斥锁
而且和这个设置有关 network.max_connecting_connections > 600的时候就很容易tcp丢包,或者整个tcp端口永久丢失,比如设置大于600的时候,例如800、1000的时候产生tcp丢包

截图现象为tcp丢包,如果是丢tcp端口那么是永远持续性的tcp超时,除非进设置里面换个随机监听端口在换回原来的监听端口才能恢复tcp访问

已经确定不是系统的问题,系统是server2022,也解锁了MaxUserPort为65534,其它程序尝试发tcp请求没有这种tcp丢包和永久丢端口的现象

network.max_connecting_connections 设置 600 的时候就没出现tcp丢包,按照之前的复现方式去测试,也没永久丢失tcp端口的现象了,副作用就是随着运行时间积累越来越多几十万等待发起
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2026/5/15 10:08 , Processed in 0.135307 second(s), 22 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表