在我們的OSI七層模型或者是四層模型中,我們的傳輸層始終保持不變,傳輸層負責定義兩臺主機程序之間的通訊,提供資料傳輸服務,提供端到端的可靠傳輸,所以我們需要用到的兩個主要的協議是:
TCP協議:傳輸控制協議,提供面向連線、可靠的資料傳輸服務,主要提供完整性服務
UDP協議:使用者資料協議,提供無連線、盡最大努力互動的服務,不保證資料的可靠性,主要提供及時性服務
TCP協議
TCP協議首部組成:
源埠和目的埠(4個位元組)
源埠是傳送端,目的埠是接收方,各自佔2個位元組
序號(4個位元組)
傳送的資料的資料流中每一個位元組都擁有自己的序號,序號表示本報文段所傳送的資料的第一個位元組的序號,代表每次資料傳送的位置,每傳送一次就累加一次該資料位元組數的大小,序號是計算機生成的隨機數。
確認號(4個位元組)
期望收到對方的下一個報文段資料的第一個位元組的序號
資料偏移(4位)
表示資料部分距離報文首部的偏移量,“資料偏移”的計算單位是4個位元組,資料偏移量是佔四位,那麼最大表示為1111,最大1111表示15 x 4= 60個位元組,即表示TCP首部最大長度為60個位元組,因此“選項”部分最多40個位元組。
保留欄位(4位)
一般設定為0
標誌位(8位)
- 緊急(URG):URG=1表示緊急指標有效,需要儘快傳送,不需要排隊直接優先傳輸
- 確認(ACK):對已接受資料的確認,預設為0,建立連線後,所以傳送的報文都必須將ACK置為1,當ACK=1表示確認號欄位有效
- 同步(SYN):在連結建立時使用,SYN=1,ACK=0表示是一個連結請求,若對方同意建立連線,則響應報文段為SYN=1,ACK=1
- 推送(PSH):接收 TCP 收到 PSH = 1 的報文段,就儘快地交付接收應用程序,而不再等到整個快取都填滿了後再向上交付。
- 復位(RST):當 RST = 1 時,表明 TCP 連線中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立運輸連線。
- 終止(FIN):FIN = 1 表明此報文段的傳送端的資料已傳送完畢,並要求釋放運輸連線。
視窗
視窗值作為接受方讓傳送方設定其傳送視窗的依據,單位為位元組(限制是因為接受方的資料快取空間是有限的)
檢驗和(佔 2 位元組)
檢驗和欄位檢驗的範圍包括首部和資料這兩部分。在計算檢驗和時,要在 TCP 報文段的前面加上 12 位元組的偽首部。
緊急指標(佔 16 位)
指出在本報文段中緊急資料共有多少個位元組(緊急資料放在本報文段資料的最前面)。
TCP三次握手和四次揮手
三次握手
第一次握手(SYN=1, seq=x)
第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1)
服務端收到了使用者端的請求,同意建立連線,然後伺服器發回確認包(ACK)應答。即 SYN 標誌位和 ACK 標誌位均為1。伺服器端選擇自己 ISN 序列號,放到 Seq 域裡,同時將確認序號(Acknowledgement Number)設定為客戶的 ISN 加1,即X+1。 傳送完畢後,伺服器端進入 SYN_RCVD 狀態。
第三次握手(ACK=1,ACKnum=y+1)
客戶端收到了服務端同意連線的確認後,再次傳送確認包(ACK),SYN 標誌位為0,ACK 標誌位為1,並且把伺服器發來 ACK 的序號欄位+1,放在確定欄位中傳送給對方,並且在資料段放寫ISN的+1
四次揮手
第一次揮手(FIN=1,seq=x)
客戶端向服務端傳送一個 FIN 標誌位置為1的包,表示自己已經沒有資料可以傳送了,客戶端主動釋放客戶端到服務端的TCP連線。
第二次揮手(ACK=1,ACKnum=x+1)
服務端收到了客戶端的請求釋放報文,給客戶端傳送確認報文。從客戶端到服務端這個方向上的連線就釋放了,TCP連線處於半關閉狀態。此時客戶端無法傳送資料給服務端,但是服務端還可以傳送資料給客戶端,客戶端仍可以接收。
第三次揮手(FIN=1,seq=y)
服務端沒有資料再發給客戶端資料,其應用程序就通知TCP釋放連線,並向客戶端傳送確認報文。伺服器釋放伺服器到客戶端的TCP連線,伺服器端進入 LAST_ACK 狀態,等待來自客戶端的最後一個ACK。
第四次揮手(ACK=1,ACKnum=y+1)
UDP協議
UDP特點
- 使用者資料包協議UDP(User Datagram Protocol) 是傳輸層的協議,無連線(即傳送資料之前不需要建立連線)。
- UDP 面向報文傳輸,不保證可靠交付,同時也不使用擁塞控制,適合多媒體通訊的要求。
- UDP 支援一對一、一對多、多對一和多對多的互動通訊。
- UDP 的首部開銷小,只有 8 個位元組
首部格式
- UDP的首部沒有“序號”欄位,因為UDP協議只需要傳輸一個資料包,所以不需要序號。
- 使用者資料包 UDP 有兩個欄位:資料欄位和首部欄位。首部欄位有 8 個位元組,由 4 個欄位組成,每個欄位都是兩個位元組。
TCP和UDP的區別
面向連線:TCP協議需要建立連線,僅支援一對一通訊;UDP協議無需建立連線,支援一對一、一對多、多對一和多對多的互動通訊。
可靠傳輸:TCP協議透過確認應答、連線管理、流量控制、擁塞控制來確保可靠性傳輸;UDP不保證可靠性傳輸。
效能效率:TCP協議傳輸效率慢,需要較多的資源開銷。UDP協議傳輸效率快,需要較少的資源開銷。
首部格式:TCP協議的首部需要20-60個位元組,UDP協議需要8個位元組。
應用場景:TCP要求通訊資料可靠(比如檔案傳輸、郵件傳輸等),UDP適用於喲求通訊速度快(如音訊、影片等)