背景:
有兩臺終端要接入通訊程式(裝置當作客戶端,通訊程式作為服務端),當一臺終端接入時是正常的,另一個終端接入時就會產生互相踢掉的現象,兩個終端單獨去連線通訊程式也是正常的。
分析:
1.首先通過監聽服務端的監聽埠,檢視是不是存在被踢掉的現象。
netstat -apn | grep 18003
如上圖,可以看到相同的IP,埠卻在變化,這就說明是有產生了“互相踢”(一個變化,從而導致另一個也變化)。
2.通過抓包工具分析,抓取當前主機與指定主機之間指定協議、指定埠的資料包
因為不知道是客戶端先斷開的連線,還是服務端先斷開的連線,所以要通過抓包分析,到底是從哪裡斷開的連線。
在部署的通訊程式的Linux伺服器上,執行下面的命令,抓取IP為X.X.X.X(為其中一個終端),埠為 18003的網路包,並以更詳細的方式輸出到184.cap
tcpdump -i ens224 host X.X.X.X and port 18003 -vvvv -w 184.cap
命令參考部落格:https://www.cnblogs.com/golinux/p/11012781.html
3.通過TCP模擬工具,模擬兩個終端傳送報文,檢視是否存在互相踢的現象。
總結:1.一般互相踢的現象,要麼是IP埠衝突,或者唯一標識衝突。(我這個原因,主要是唯一標識的衝突,雖然12位數字,前10位相同,後2位不一樣,但是程式裡只處理了8位數字是作為唯一標識的,我的程式把這兩個終端當作是一個終端了,從而造成了這個現象。)