三次握手和四次揮手

2021-10-05 15:46:17 字數 2105 閱讀 9937

tcp三次握手和四次揮手幾乎是面試的必問的問題。

tcp是面向連線的協議,面向位元組流的,有三個階段:建立連線資料傳輸釋放連線

tcp 報文段首部的前 20 個位元組是固定的,後面有 4n 位元組是根據需要而增加的選項 (n 是整數)。因此 tcp 首部的最小長度是 20 位元組。

源埠和目的埠字段——各佔 2 位元組。

序號字段——佔 4 位元組。tcp 連線中傳送的資料流中的每乙個位元組都編上乙個序號。序號欄位的值則指的是本報文段所傳送的資料的第乙個位元組的序號。

確認號字段——佔 4 位元組,是期望收到對方的下乙個報文段的資料的第乙個位元組的序號。

資料偏移(即首部長度)——佔 4 位,它指出 tcp 報文段的資料起始處距離 tcp 報文段的起始處有多遠。「資料偏移」的單位是 32 位字(以 4 位元組為計算單位)。

緊急 urg —— 當 urg 置1 時,表明緊急指標字段有效。它告訴系統此報文段中有緊急資料,應盡快傳送(相當於高優先順序的資料)。而不要按照原來的排隊順序來傳送。

確認 ack —— 只有當 ack =1 時確認號字段才有效。當 ack =0 時,確認號無效。

推送 psh (push) —— 接收 tcp 收到 psh = 1 的報文段,就盡快地交付接收應用程序,而不再等到整個快取都填滿了後再向上交付。

復位 rst (reset) —— 當 rst=1 時,表明 tcp 連線**現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立運輸連線。

同步 syn —— 同步 syn = 1 表示這是乙個連線請求或連線接受報文。

終止 fin (finish) —— 用來釋放乙個連線。fin=1 表明此報文段的傳送端的資料已傳送完畢,並要求釋放運輸連線。

b的 tcp 伺服器程序先建立傳輸控制塊tcb,準備接受客戶程序的連線請求。

第一次握手:

a 的 tcp 向 b 發出連線請求報文段,其首部中的同步位 syn = 1,並選擇序號 seq = x,表明傳送資料時的第乙個資料位元組的序號是 x。

第二次握手:

b 的 tcp 收到連線請求報文段後,如同意,則發回確認。

b 在確認報文段中應使 syn = 1,使 ack = 1,其確認號 ack = x + 1,自己選擇的序號 seq = y。

第三次握手:

a 收到此報文段後向 b 給出確認,其 ack = 1,確認號 ack = y + 1。

a 的 tcp 通知上層應用程序,連線已經建立。

b 的 tcp 收到主機 a 的確認後,也通知其上層應用程序:tcp 連線已經建立。

資料傳輸結束後,通訊的雙方都可釋放連線。

現在 a 的應用程序先向其 tcp 發出連線釋放報文段,並停止再傳送資料,主動關閉 tcp 連線。

a 把連線釋放報文段首部的fin = 1,其序號seq = u,等待 b 的確認。

b 發出確認,確認號 ack = u+1,而這個報文段自己的序號 seq = v。

tcp 伺服器程序通知高層應用程序。

從 a 到 b 這個方向的連線就釋放了,tcp 連線處於半關閉狀態。b 若傳送資料,a 仍要接收。

b 發出確認,確認號 ack = u+1,而這個報文段自己的序號 seq = v。

tcp 伺服器程序通知高層應用程序。

從 a 到 b 這個方向的連線就釋放了,tcp 連線處於半關閉狀態。b 若傳送資料,a 仍要接收。

在確認報文段中ack = 1,確認號 ack = w + 1,自己的序號 seq = u + 1。

等待2msl的時間

第一,為了保證 a 傳送的最後乙個 ack 報文段能夠到達 b。

第二,防止 「已失效的連線請求報文段」出現在本連線中。

三次握手和四次揮手

三次握手和四次揮手如圖所示 為什麼是三次握手而不是兩次 因為當客戶端第傳送syn到服務端的時候,如果有幾次請求是因為網路等原因延時等情況的時候,如果沒有第三次握手的確定。服務端就會認為客戶端重寫傳送請求了,就會去開啟連線相應。為什麼關閉連線的時候是四次握手而不是三次?當客戶端傳送請求關閉連線的時候,...

三次握手和四次揮手

tcp三次握手和四次揮手的全過程 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種表示 syn synchronous建立連線 ack acknowledgement 表示響應 確認 psh push表示有data資料傳輸 fin fi...

三次握手和四次揮手

1.在學習tcp協議的時候,總是在強調三次握手,那麼為什麼是三次?而不是兩次或者四次?強迫症表示黑人問號?今天我們就來分析一下為什麼是三次,下圖是一次tcp通訊的時序 在這個例子中,首先客戶端主動發起連線 傳送請求,然後伺服器端響應請求,然後客戶端主動關閉連線。兩條豎線表示通訊的兩端,從上到下表 示...