TCP連線三次握手對端無響應處理

2021-09-26 10:21:37 字數 647 閱讀 8930

最近遇到問題,裝置作為客戶端向服務端發起tcp連線三次握手,結果服務端埠不通,導致客戶端傳送的syn報文無響應,此時會發生什麼事情呢?

首先根據上面這個圖來看,客戶端傳送syn報文無響應,會停在syn-sent狀態,使用netstat -an命令就可以看到。

接下來就是重傳syn報文,等待三次握手超時釋放了。何時超時,超時機制是怎樣的呢?

超時時間由重傳超時時間(預設1秒鐘(1*hz))和重傳次數tcp_synack_retries(預設5次)決定。現象如下:

syn無響應,隔1s,重傳第1次,再隔2s,重傳第2次,再隔4s,重傳第3次,再隔8s,重傳第4次,再隔16s,重傳第5次,再隔32s,超時重傳次數到了,斷開鏈結。

重傳次數可用如下命令檢視:

/proc/sys/net/ipv4/tcp_synack_retries
知道了這些,那麼如何手動控制三次握手超時時間呢?

可以起個執行緒,建立fd去進行無阻塞的tcp連線,然後poll一下,自行設定超時時間。這樣,如果超時時間內poll無反應,則說明三次握手在超時時間內無法建立連線,這樣就可以判定服務端的ip埠無法建立連線。

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

三次握手 TCP建立連線

在tcp ip 中,tcp協議提供可靠的連線服務 採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端 傳送syn 包 syn j 到伺服器 並進入syn send狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 第二次握手 伺服器 收到syn...

挖坑 TCP連線 三次握手

在 tcp ip 協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖 1所示。1 第一次握手 建立連線時,客戶端a傳送 syn包 syn j 到伺服器 b,並進入 syn send 狀態,等待伺服器 b確認。2 第二次握手 伺服器b收到 syn包,必須確認客戶a的 syn ack ...