計算機基礎 TCP和UDP詳解

2021-10-03 10:01:37 字數 2178 閱讀 7358

前幾天面試別問到tcp和udp,所以今天對這個知識點做乙個總結

udp 是⼀個⾯向報⽂(報⽂可以理解為⼀段段的資料)的協議。意思就是udp 只是報⽂的搬運⼯,不會對報⽂進⾏任何拆分和拼接操作

具體來說

頭部

tcp 頭部⽐ udp 頭部複雜的多

對於 tcp 頭部來說,以下⼏個字段是很重要的

識別符號
http 是⽆連線的,所以作為下層的 tcp 協議也是⽆連線的,雖然看似tcp 將兩端連線了起來,但是其實只是兩端共同維護了⼀個狀態

建立三次握手

第⼀次握⼿

客戶端向服務端傳送連線請求報文段。該報文段中包含自身的資料通訊初始序號。請求傳送後,客戶端便進入syn-sent狀態,x表示客戶端的資料通訊初始序號。

第二次握手
服務端收到連線請求報文段後,如果同意連線,則會傳送乙個應答, 該應答中也會包含自身的資料通訊初始序號,傳送完成後便進入syn-received 狀態。

第三次握手
當客戶端收到連線同意的應答後,還要向服務端傳送乙個確認報文。 客戶端發完這個報文段後便進入established 狀態,服務端收到這個應答後也進入established狀態,此時連線建立成功。

ps:第三次握⼿可以包含資料,通過 tcp 快速開啟( tfo )技術。其實只要涉及到握⼿的協議,都可以使⽤類似 tfo 的⽅式,客戶端和服務端儲存相同 cookie ,下次握⼿時發出 cookie 達到減少 rtt 的⽬的

你是否有疑惑明明兩次握⼿就可以建⽴起連線,為什麼還需要第三次應答?

因為這是為了防止失效的連線請求報⽂段被服務端接收,從而產⽣錯誤。

可以想象如下場景。客戶端傳送了乙個連線請求a,但是因為網路原因造成了超時,這時tcp會啟動超時重傳的機制再次傳送乙個連線請求 b。此時請求順利到達服務端,服務端應答完就建立了請求。如果連線請求a在兩端關閉後終於抵達了服務端,那麼這時服務端會認為客戶端又需要建立tcp連線,從而應答了該請求並進入established 狀態。此時客戶端其實是closed狀態,那麼就會導致服務端一直等待, 造成資源的浪費

ps:在建立連線中,任意一端掉線,tcp 都會重發syn包,-般會重試五次,在建立連線中可能會遇到syn flood攻擊。遇到這種情況你可以選擇調低重試次數或者乾脆在不能處理的情況下拒絕請求

斷開連線四次握手
tcp 是全雙⼯的,在斷開連線時兩端都需要傳送 fin 和 ack 。

第⼀次握⼿
若客戶端 a 認為資料傳送完成,則它需要向服務端 b 傳送連線釋放請求。

第⼆次握⼿
b 收到連線釋放請求後,會告訴應⽤層要釋放 tcp 鏈結。然後會傳送 ack包,並進⼊ close_wait 狀態,表示 a 到 b 的連線已經釋放,不接收 a 發的資料了。但是因為 tcp 連線時雙向的,所以 b 仍舊可以傳送資料給 a。

第三次握手
b 如果此時還有沒發完的資料會繼續傳送,完畢後會向 a 傳送連線釋放請求,然後 b 便進⼊ last-ack 狀態。

ps:通過延遲確認的技術(通常有時間限制,否則對⽅會誤認為需要重傳),可以將第⼆次和第三次握⼿合併,延遲 ack 包的傳送。

第四次握⼿
a 收到釋放請求後,向 b 傳送確認應答,此時 a 進⼊ time-wait 狀態。該狀態會持續2msl(最⼤段⽣存期,指報⽂段在⽹絡中⽣存的時間,超時會被拋棄) 時間,若該時間段內沒有 b 的重發請求的話,就進⼊ closed 狀態。當 b 收到確認應答後,也便進⼊closed 狀態。

計算機網路 TCP和UDP

我們說了tcp是可靠連線,那麼是不是tcp一定就優於udp呢?tcp和udp之間的額優點和缺點,不能簡單絕對的進行比較 udp 在傳送資料之前不需要先建立連線。對方的傳輸層在收到 udp 報文後,不需要給出任何確認。雖然 udp 不提供可靠交付,但在某些情況下 udp 是一種最有效的工作方式。tcp...

計算機網路 TCP與UDP協議詳解

根據應用程式的不同需求,運輸層需要兩種不同的運輸協議,即面向連線的tcp和無連線的udp。tcp特點 1 tcp是面向連線的運輸層協議。所以,應用程式在使用tcp協議之前,必須先建立tcp連線。在傳送資料完畢後,必須釋放已經建立的tcp連線。2 每一條tcp連線只能有兩個端點,每一條tcp連線只能是...

計算機網路 TCP和UDP區別

1 tcp是有連線的在編寫 時需要監聽,需要accept把鏈結拿進來,udp是無連線的在寫 的時候不需要監聽也不需要accept,直接使用sendto傳送和使用recvfrom接收就可以了。2 tcp是面向位元組流的,傳輸的過程中傳輸的也就是二進位制,udp是面向資料報的,應用層給傳輸層多少位元組,...