1. 程式人生 > >TCP/IP協議模型:傳輸層(TCP/UDP)

TCP/IP協議模型:傳輸層(TCP/UDP)

TCP協議主要資訊:
(1)TCP頭部資訊。TCP頭部資訊出現在每個TCP報文段中,用於指定通訊的源端埠號,目的端埠號,管理TCP連線,控制兩個方向的資料流。
(2)TCP狀態轉移過程。TCP連線的任意一端都是一個狀態機。在TCP連線從建立到斷開整個過程中,連線兩端的狀態機將經歷不同的狀態變遷。
(3)TCP資料流。通過分析TCP資料流,可從網路應用程式來了解應用層協議和通訊雙方交換的應用程式資料。兩種型別:交換資料流和成塊資料流。特殊資料,緊急資料。
(4)TCP資料流的控制。為保證可靠傳輸和提高網路通訊質量。

一、TCP服務的特點
傳輸層協議主要有TCP協議和UDP協議;

TCP UDP
面向連線 無連線
位元組流 資料報
可靠傳輸 不可靠傳輸

1.TCP
使用TCP協議通訊雙方必須先建立連線,然後才能開始資料的讀寫。且雙方都必須為該連線分配必要的核心資源,以管理連線狀態和連線上資料的傳輸。TCP連線方式是全雙工,即雙方資料讀寫可通過一個連線進行,完成資料交換後,通訊雙方都必須斷開連線以釋放系統資源。TCP協議的連線是一對一的,因此廣播和多播應使用UDP無連線協議。
在這裡插入圖片描述
在這裡插入圖片描述
TCP模組傳送的TCP報文段的個數和應用程式執行寫的操作次數之間沒有固定的數量關係。(TCP協議採用位元組流服務
應用程式執行讀的操作次數和TCP模組接收到的TCP報文段個數之間沒有固定的數量關係(讀取次數取決於使用者指定的應用程式讀緩衝區的大小


所以傳送端執行的寫的操作次數和接收端執行的讀操作次數之間沒有任何數量關係。(位元組流概念:應用程式對於資料的傳送和接收沒有邊界限制)
2.UDP:
傳送端每執行一次寫操作,UDP模組將其封裝成一個UDP資料報傳送,接收端必須及時針對每一個UDP資料報執行讀操作(通過recvfrom系統呼叫),否則丟包,而且如果使用者沒有指定足夠的應用程式緩衝區來讀取UDP資料,則資料就會被截斷。
3.TCP傳輸是可靠的:
(1)TCP協議採用傳送應答機制(即傳送端傳送的每個TCP報文段都必須得到接收方的應答,才認為TCP報文段傳輸成功)
(2)TCP協議採用超時重傳機制(傳送端傳送出一個TCP報文段之後啟動定時器,如果在定時時間內未收到應答,它將重發報文段)
(3)TCP協議會對接收到的報文段重排、整理再交付給應用層。
二、TCP頭部結構

TCP頭部資訊:出現在每個TCP報文段中,用於指定通訊的源端埠號,目的端埠號,管理TCP連線,控制兩個方向的資料流。
1.TCP固定頭部結構
在這裡插入圖片描述
(1)16位埠號(port number):告知主機該報文段的源埠和目的埠。
進行TCP通訊時,客戶端使用系統自動選擇的臨時埠號,伺服器使用知名服務埠號。
(2)32位序號(sequence number):一次TCP通訊(建立連線到斷開)過程中某一個傳輸方向上的位元組流的每個位元組的編號。第一個TCP報文段的序號值被系統初始化為某個隨機值ISN(Initial Sequence Number,初始序號值),後續報文段序號值被系統設定WieISN加上該報文段所攜帶資料的第一個位元組在整個位元組流中的偏移。
(3)32位確認號(acknowledgement number):用作對另一方傳送的TCP報文段的響應。其值是收到的TCP報文段序號值加1。
(4)4位頭部長度(header length):標識該TCP頭部的32bit字(4位元組)的數量。因為4位最大能表示15,所以TCP頭部最長為60位元組。
(5)6位標誌位

URG標誌 表示緊急指標(urgent pointer)是否有效
ACK標誌 表示確認號是否有效。稱攜帶ACK標誌的TCP報文段為確認報文段
PSH標誌 提示接收端應用程式該立即從TCP接收緩衝區讀走資料,為接收後續資料騰出空間
RST標誌 表示要求對方重新建立連線。稱攜帶RST標誌的TCP報文段為復位報文段
SYN標誌 表示請求建立一個連線。稱攜帶SYN標誌的TCP報文段為同步報文段
FIN標誌 表示通知對方本端要關閉連線了。稱攜帶FIN標誌的TCP報文段為結束報文段

2.TCP頭部選項
TCP頭部的最後一個選項欄位(options)是可變長的可選資訊,最多包含40位元組。
在這裡插入圖片描述
kind:說明選項的型別。
length:指定該選項的總長度(不一定有),包括kind欄位和length欄位佔據的2位元組。
info:選項的具體資訊(不一定有)。

kind=0 選項表結束選項
kind=1 空操作選項,無特殊含義,一般用於將TCP選項的總長度填充為4位元組的整數倍
kind=2 最大報文長度選項
kind=3 視窗擴大因子選項
kind=4 選擇性確認(SACK)選項
kind=5 SACK實際工作的選項
kind=8 時間戳選項