TCP四次握手連線釋放

2021-08-20 10:26:01 字數 1026 閱讀 1046

tcp連線釋放

四次握手正常釋放鏈結如圖

第一次握手:a方傳送連線釋放請求dr給b,在發出dr的同時它也啟動乙個定時器

第二次握手:當這個dr到達b的時候,b會回發乙個確認ack,這個ack到達a後a的連線就釋放了

第三次握手:與此同時收到dr的那一方b,它也會發出乙個連線釋放的請求dr並同樣啟動定時器

第四次握手:最後這個dr到達a的時候,a會再回發乙個ack,當這個ack到達b的時候b的連線就也釋放了

其中雙方在傳送dr的同時都啟動了乙個定時器,當定時器超時後,這根連線會被強制釋放

定時器的作用

如果一方傳送了fin置位了的dr資料段出去,但是卻在定時器超期之時都沒有收到應答,這個時候它會因為超時而釋放連線,然後另一方最終也會注意到連線的對方已經不在了,超時之後連線釋放,不然連線可能永遠都斷不掉

除此之外,如果初始dr的和重傳都丟了,協議失敗,傳送者將放棄傳送且釋放連線,但另外一端卻不知道這些情況,仍然處於活躍的狀態,這種情形就會導致半開放連線(half-open)

解決方法:如果在一定的時間內沒有tpdu到達的時候,連線自動釋放,這樣傳輸實體在傳送乙個tpdu的時候,必須要啟動乙個定時器,定時器超期將發動乙個啞的tpdu以免被斷掉

為什麼tcp建立連線只需要三次握手,而關閉連線需要四次握手?

因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn(ack起應答作用,而syn起同步作用)放在乙個報文裡來傳送,但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉socket,也即你可能還需要傳送一些資料給對方之後,再傳送fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack報文和fin報文多數情況下都是分開傳送的

TCP連線釋放 四次握手

1 資料傳輸結束後,通訊的雙方都可釋放連線。現在 a 的應用程序先向其 tcp 發出連線釋放報文段,並停止再傳送資料,主動關閉 tcp 連線。a 把連線釋放報文段首部的 fin 1 其序號seq u,等待 b 的確認。2 b 發出確認,確認號 ack u 1 而這個報文段自己的序號 seq v tc...

TCP建立連線三次握手和釋放連線四次握手

尊重 在談及tcp建立連線和釋放連線過程,先來簡單認識一下 tcp報文段首部格式 的的幾個名詞 這裡只是簡單說明,具體請檢視相關教程 序列號seq 佔4個位元組,用來標記資料段的 順序,tcp把連線中傳送的所有資料位元組都編上乙個序號,第乙個位元組的編號由本地隨機產生 給位元組編上序號後,就給每乙個...

TCP建立連線三次握手和釋放連線四次握手

尊重 在談及tcp建立連線和釋放連線過程,先來簡單認識一下tcp報文段首部格式 的的幾個名詞 這裡只是簡單說明,具體請檢視相關教程 序列號seq 佔4個位元組,用來標記資料段的順序,tcp把連線中傳送的所有資料位元組都編上乙個序號,第乙個位元組的編號由本地隨機產生 給位元組編上序號後,就給每乙個報文...