首頁>技術>

傳輸層兩大協議TCP UDP

一、TCP協議

1. TCP協議

TCP協議是一種面向連線的協議,可提供可靠的傳輸服務

2. TCP的埠號

作用:用來區分不同的網路服務

埠的分類:知名埠和動態埠

知名埠:0-1023,常見應用程式會使用的埠

動態埠:1024-65535,一般作為源埠使用

埠號對應的協議

3. TCP頭部

整個TCP頭部一共20個位元組

Source Port:源端

Destination Port:目的埠

Sequence Number:順序號碼

Acknowledge Number:確認號碼

Header Length;報頭長度

Resv:保留欄位

SYN:表示建立連線

ACK:表示響應

Window:視窗,用於流量控制

Checksum:校驗欄位

位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)

4. TCP三次握手

第一次握手:主機A傳送位碼為syn=1(表示要求建立連線),隨機產生seq number的資料包到主機B

第二次握手:主機B收到請求後要確認聯機資訊,向A傳送ack number=(主機A的seq+1),同時syn=1,ack=1,隨機產生一個seq number的資料包傳送給A

第三次握手:主機A收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連線建立成功

5. TCP的傳輸過程

上圖給出了主機A分2次(分2個數據包)向主機B傳遞200位元組的過程。首先,主機A透過1個數據包傳送100個位元組的資料,資料包的 Seq 號設定為 1200。主機B為了確認這一點,向主機A傳送 ACK 包,並將 Ack 號設定為 1301

為了保證資料準確到達,目標機器在收到資料包(包括SYN包、FIN包、普通資料包等)包後必須立即回傳ACK包,這樣傳送方才能確認資料傳輸成功。

此時 Ack 號為 1301 而不是 1201,原因在於 Ack 號增加了傳輸資料的位元組數。假設每次 Ack 號不加傳輸的位元組數,這樣雖然可以確認資料包的傳輸,但無法明確100位元組全部正確傳遞還是丟失了一部分,比如只傳遞了80位元組。

因此按如下的公式確認 Ack 號:seq+傳遞的位元組數+1

6. TCP的流量控制

接收端將自己可以接收的緩衝區大小放入 TCP 首部中的 “視窗大小” 欄位, 透過ACK端通知傳送端;視窗大小欄位越大, 說明網路的吞吐量越高接收端一旦發現自己的緩衝區快滿了, 就會將視窗大小設定成一個更小的值通知給傳送端;傳送端接受到這個視窗之後, 就會減慢自己的傳送速度

如果接收端緩衝區滿了, 就會將視窗置為0; 這時傳送方不再發送資料, 但是需要定期傳送一個視窗探測資料段, 來檢視接收端是否有視窗有容量來接收資料

7. TCP的關閉連線

TCP的連線的拆除需要傳送四個包,因此稱為四次揮手

由於TCP連線是全雙工的,因此每個方向都必須單獨進行關閉

TCP的四次揮手

(1)客戶端A傳送一個FIN,用來關閉客戶A到伺服器B的資料傳送。(2)伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。

(3)伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A。(4)客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1。

二、 UCP的協議

1. UDP協議

DUP協議是一種面向無連線的協議,傳輸可靠性沒有保障

2. UDP頭部

UDP頭部共8個位元組,傳輸資料時沒有確認機制

Source Port:源埠

Destination Port:目的埠

Header;報頭長度

Checksum:校驗欄位

10
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Linux對稱NAT的UDP穿越