tcp連線的建立(三次握手)和釋放(四次握手)

2021-07-15 20:48:58 字數 1797 閱讀 6368

tcp報文段首部格式:

序號:本報文段所傳送的資料的第乙個位元組的序號。

確認號ack期待收到對方下乙個報文段的第乙個資料位元組的序號

確認ack:佔1位,僅當ack=1時,確認號字段才有效。ack=0時,確認號無效

同步syn:連線建立時用於同步序號。當syn=1,ack=0時表示:這是乙個連線請求報文段。

若同意連線,則在響應報文段中使得syn=1,ack=1。因此,syn=1表示這是乙個連線請求,或連線接受報文。

終止fin:用來釋放乙個連線。fin=1表示:此報文段的傳送方的資料已經傳送完畢,並要求釋放運輸連線。

三次握手(三次聯絡)

還要再傳送一次確認是為了,防止已失效的連線請求報文段突然又傳到了b,因而產生錯誤。

已失效的報文段:正常情況下:a發出連線請求,但因為丟失了,故而不能收到b的確認。於是a重新發出請求,然後收到確認,建立連線,資料傳輸完畢後,釋放連線,a發了2個,乙個丟掉,乙個到達,沒有「已失效的報文段」

但是,某種情況下,a的第乙個在某個節點滯留了,延誤到達,本來這是乙個早已失效的報文段,但是在a傳送第二個,並且得到b的回應,建立了連線以後,這個報文段竟然到達了,於是b就認為,a又傳送了乙個新的請求,於是傳送確認報文段,同意建立連線,假若沒有三次的握手,那麼這個連線就建立起來了(有乙個請求和乙個回應),此時,a收到b的確認,但a知道自己並沒有傳送建立連線的請求,因為不會理睬b的這個確認,於是呢,a也不會傳送任何資料,而b呢卻以為新的連線建立了起來,一直等待a傳送資料給自己,此時b的資源就被白白浪費了。但是採用三次握手的話,a就不傳送確認,那麼b由於收不到確認,也就知道並沒有要求建立連線。

四次握手(兩個二次握手)

b收到連線釋放報文段後就立即傳送確認,然後就進入close-wait狀態,此時tcp伺服器程序就通知高層應用程序,因而從a到b的連線就釋放了。此時是「半關閉」狀態。即a不可以傳送給b,但是b可以傳送給a。

此時,若b沒有資料報要傳送給a了,其應用程序就通知tcp釋放連線,然後傳送給a連線釋放報文段,並等待確認。

a傳送確認後,進入time-wait,注意,此時tcp連線還沒有釋放掉,然後經過時間等待計時器設定的2msl後,a才進入到close狀態。

為什麼要等待呢?

①、為了保證a傳送的最後乙個ack報文段能夠到達b。即最後這個確認報文段很有可能丟失,那麼b會超時重傳,然後a再一次確認,同時啟動2msl計時器,如此下去。如果沒有等待時間,傳送完確認報文段就立即釋放連線的話,b就無法重傳了(連線已被釋放,任何資料都不能出傳了),因而也就收不到確認,就無法按照步驟進入close狀態,即必須收到確認才能close。

②、防止「已失效的連線請求報文段」出現在連線中。經過2msl,那些在這個連線持續的時間內,產生的所有報文段就可以都從網路中消失。即在這個連線釋放的過程中會有一些無效的報文段滯留在樓閣結點,但是呢,經過2msl這些無效報文段就肯定可以傳送到目的地,不會滯留在網路中。這樣的話,在下乙個連線中就不會出現上乙個連線遺留下來的請求報文段了。

可以看出:b結束tcp連線的時間比a早一點,因為b收到確認就斷開連線了,而a還得等待2msl.

原文見:

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

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

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

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

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

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