TCP重传与超时导致Git Clone私有GitLab实例不稳定,求助排查思路
TCP重传与超时导致Git Clone私有GitLab实例不稳定,求助排查思路
这种随机抽风的网络问题真的太磨人了!先帮你理清楚你已经排查过的关键信息,避免重复踩坑,再给你几个针对性的排查方向:
你已经完成的有效排查(帮你锁定范围)
- 排除本地硬件问题:家里网络和同运营商的4G手机都出现同样问题,且外部服务器访问你的GitLab完全正常
- 排除GitLab服务器端问题:外部访问无异常,你的服务器防火墙也没收到超时请求的数据包,说明包根本没到服务器
- 排除基础连通性:ICMP ping正常,GitLab网页访问完全没问题,只有git、curl、python这类工具会触发超时,浏览器完全不受影响
- 抓包定位到现象:70%的HTTPS请求正常,剩下30%会触发
[TCP Retransmission] [TCP Port numbers reused]后超时
针对性排查方向(重点围绕你的DS-Lite双栈隧道)
1. 强制单协议栈测试,锁定IPv4/IPv6问题
你的网络用了DS-Lite(IPv6隧道承载IPv4流量),这种架构很容易在隧道转发环节出现端口复用的bug。你可以分别强制git只用IPv4或IPv6试试:
- 强制IPv4克隆:
git clone -c http.version=HTTP/1.1 -c core.gitproxy="git-proxy --inet4" <你的私有GitLab仓库地址> - 如果你的GitLab支持IPv6,也可以强制用IPv6测试,看看是不是某一个协议栈单独出问题,这样能快速缩小范围。
2. 对比浏览器和git的请求差异,抓包找不同
你提到浏览器完全正常,但git/curl会出问题,这是非常关键的线索!建议你分别抓浏览器和git的HTTPS请求包,重点对比这几点:
- TLS版本和加密套件:浏览器默认可能用TLS1.3,而git有些版本默认用TLS1.2,部分运营商的设备对旧TLS版本的转发有bug
- 连接复用策略:浏览器会大量复用TCP连接,而git默认可能每次新建连接。可以试试给git开启连接复用:
git config --global http.keepalive true git config --global http.pipelining true - User-Agent差异:有些运营商的流量识别规则会对git这类工具的UA做特殊处理,你可以临时把git的UA改成浏览器的试试:
git config --global http.useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
3. 调整HTTPS客户端参数,规避可能的转发bug
用curl测试时,调整参数模拟git的行为,同时尝试规避问题:
- 关闭TCP快速打开:
curl --no-tcp-nodelay <你的GitLab仓库地址> - 强制用HTTP/1.1:git有些版本默认用HTTP/2,而DS-Lite隧道对HTTP/2的多路复用支持可能有问题,试试
curl --http1.1 <你的GitLab仓库地址> - 调整超时和重试:
curl --connect-timeout 10 --retry 5 <你的GitLab仓库地址>,看看是否能降低超时概率
4. 尝试SSH协议克隆,对比HTTPS的表现
如果你的GitLab开启了SSH访问,试试用SSH克隆:
git clone git@<你的GitLab地址>:<仓库路径>.git
如果SSH完全正常,那问题就更聚焦在HTTPS/TCP的转发环节,进一步佐证是运营商设备的问题。
5. 联系运营商技术支持,提供关键证据
既然你已经排除了本地和服务器端的问题,且同运营商的不同接入方式都出现问题,外部网络正常,那大概率是运营商的DS-Lite网关或中间设备有端口复用的bug。你可以把Wireshark抓的TCP重传包(尤其是标注TCP Port numbers reused的部分)导出,重点告诉运营商:
- 仅git、curl这类工具出现随机超时,浏览器完全正常
- 同运营商的有线和4G网络都出现同样问题
- 外部网络访问你的GitLab没有任何异常
备注:内容来源于stack exchange,提问作者Thomas B.
相关产品推荐
相关产品推荐

