1. 程式人生 > >NAT網路部分客戶端無法連線Server的解決方法

NAT網路部分客戶端無法連線Server的解決方法

客戶端通過NAT連線上網,有的客戶端可以訪問server端,有的不可以,通過訪問固定請求的URL抓包排查和解決問題。

解決方法:

# sysctl -a |egrep "timest|recycle"
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_recycle = 1  

在/etc/sysctl.conf檔案中新增
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 0

原因分析
1、http contains “/frontend” 過濾出來客戶端請求的這個URL。
在這裡插入圖片描述

2、跟蹤一下流(follow stream),看請求是否正常。
在這裡插入圖片描述




在這裡插入圖片描述

3、開啟客戶端的包,發現請求失敗的是重傳包,過濾一下 tcp.analysis.retransmission
在這裡插入圖片描述

可以看到有四次請求重傳
思考:
A、不是雲盾問題,因為雲盾是基於ip的;
B、檢查系統內沒有云鎖之類的軟體,iptables也沒開;
C、檢查系統引數 sysctl –p (-a列印所有)看到有timestamp;

4、對比timestamp
失敗的截圖
在這裡插入圖片描述

成功的截圖
在這裡插入圖片描述

成功的timestamp都很大,修改/etc/sysctl.conf檔案裡面得net.ipv4.tcp_timestamps=0即可

timestamp擴充套件:
同時開啟timestamp(時間戳)和tw_recycle(快速回收),會導致在一個MSL(多層資料交換)時間內只響應timestamp遞增的請求,對於時間戳較小的請求都拋棄了(不響應ack)。

MSL擴充套件: RFC793中規定MSL為2分鐘,也就是說2分鐘內同一個ip的請求的時間戳要求遞增,不是遞增的話伺服器不予響應。

原文轉自:https://yq.aliyun.com/articles/103188