03 TCP三次握手 四次揮手

2021-10-08 19:29:05 字數 1270 閱讀 4872

1. tcp 三次握手過程

2. tcp 四次揮手過程

3. tcp協議為什麼要三次握手 ?兩次不行嗎?

「三次握手」的目的是「為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤」。 比如:a 發出的第乙個連線請求報文段在網路結點長時間滯留了, 以致於延誤 到a和b的連線釋放以後的某個時間段才到達 b。 本來這是乙個早已失效的報文段。 但是 b 會誤認為這是 a 發出的一次新的連線請求。 於是就向 a 發出確認報文段, 同意建立連線。

對於上面這種情況, 如果不進行第三次握手, b 發出確認後就認為新的連線已經建立 了, 並一直等待 a 發來資料。 這樣b 的許多資源就這樣白白浪費了。

如果採用三次握手, b 發出確認報文段後會等待 a 的確認。 b 如果一定時間內收不到確認, 不會再等待這樣就不會浪費伺服器的資源。

4. 為什麼不需要四次握手?

有人可能會說 a 發出第三次握手的資訊後就已經進入了連線狀 態, 那如果 a 的這個確認包丟失或者滯留了怎麼辦?

完全可靠的通訊協議是不存在的。在經過三次握手之後, 客戶端和服 務端已經可以確認之前的通訊狀況, 都收到了確認資訊。沒有必要再增加握手次數。

5. 第三次握手的ack沒收到怎麼辦

6. tcp協議為什麼要四次揮手?

因為tcp有個半關閉狀態,假設a.b要釋放連線,那麼a傳送乙個釋放連線報文給b,b收到後傳送確認,這個時候a不再發資料,但是b如果發資料a還是要接受,這叫半關閉。當b的資料傳輸完畢後,b再給a傳送釋放連線報文,a收到後傳送確認,所以一共是4次揮手。

7. 四次揮手為什麼第二次跟第三次不能合併, 第二次和第三次之間的等待是什麼?

當伺服器執行第二次揮手之後, 此時客戶端不會再向服務端傳送資料, 但是服務端可能還正在給客戶端傳送資料(可能是客戶端上一次請求的資源還沒有傳送完畢), 所以服務端會等把資料傳輸完畢之後再傳送釋放連線報文(也就是第三次揮手)。

8. tcp什麼時候進入time_wait狀態?

9. tcp為什麼要有 time_wait 狀態?為什麼 time_wait 狀態必須等待 2msl?

10. time-wait 過多的原因?影響?解決辦法?

原因: 高併發可以讓伺服器在短時間內占用大量埠,埠範圍是0~65535,客戶端每斷開乙個連線,該連線都會進入timewait狀態,預設60s超時**。在這種高併發場景下容易造成time-wait過多。

影響: 導致沒有埠可用,連線失敗。

解決辦法

TCP三次握手 四次揮手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手 四次揮手

服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...

TCP三次握手四次揮手

tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...