傳輸層兩大協議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:校驗欄位