前言
運輸層兩個協議TCP和UDP,真正做到主機進程到主機進程的傳輸,它的上層應用層定義的是和端到端無關的規定,它的下層網絡層定義的是數據在網絡間的轉發。
學習首部格式的意義:
運輸層就兩個協議:TCP和UDP。UDP功能較少,用的也較少(幸運的是要學的也少)。TCP用的多,主要原因是他功能強大,如建立連接、保證可靠、實現流量控制和擁塞控制,所以要學的也多。TCP和UDP的這些功能能夠實現是基於他們的首部數據,所以我們這節將先學習首部格式。
TCP和UDP的定義和區別
傳輸控制協議TCP是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。僅支持單播傳輸。提供擁塞控制、流量控制等功能。首部最小20字節,最大60字節。大多數場景下使用
用戶數據報協議UDP是一個簡單的面向數據報的傳輸層協議,提供的是非面向連接的、不可靠,盡最大努力交付的數據傳輸。支持一對一、一對多和多對多的交互通信。沒有擁塞控制,適合實時性強的應用 。首部開銷小,僅8字節。適合實時視頻回憶、DNS、TCP等協議的控制查詢報文。
區別:
TCP | UDP | |
---|---|---|
是否連接 | 面向連接的 | 無連接的 |
是否可靠 | 可靠的 | 不可靠,盡最大努力交付 |
連接對象個數 | 點對點的全雙工通信 | 支持一對一、一對多和多對多的交互通信 |
傳輸方式 | 基於字節流的 | 面向報文的,即對應用層的報文不拆分也不合並 |
擁塞控制和流量控制 | 有 | 沒有擁塞控制,適合實時性強的應用 |
首部開銷 | 首部最小20字節,最大60字節 | 首部開銷小,僅8字節 |
適用場景 | 除UDP的場景 | 功能少、要求低。適合實時視頻回憶、DNS、TCP等協議的控制查詢報文 |
UDP的用戶數據報首部格式
UDP長度:最小爲8,即只有首部
UDP檢驗和:計算時會臨時增加一個僞首部(包括源IP、目標IP、UDP長度等)計算後刪除
僞首部, 又稱爲僞包頭(Pseudo Header):是指在 TCP 的分段或 UDP 的數據報格式中,在數據報首部前面增加源 IP 地址、目的 IP 地址、IP 分組的協議字段、TCP 或 UDP 數據報的總長度等共12字節,所構成的擴展首部結構。此僞首部是一個臨時的結構,它既不向上也不向下傳遞,僅僅只是爲了保證可以校驗套接字的正確性。
計算方法 發送方 1.檢驗和置0 2.把僞首部、首部和數據部分拆分爲16位的字串 3.按二進制反碼計算出這些16位字的和 4.將和求反填入校驗和字段 接收方 1.按發送方2、3步計算出結果 2.無差錯時結果爲1,否則出錯
TCP的報文段首部格式
序號:TCP對字節流的每個字節都按順序編號,序號指的是本報文段所發送的數據的第一個字節的序號
確認號ack:期望收到對方下一個報文段的第一個數據字節的序號,同時表明前面的所有數據都已經收到了
數據偏移:數據起始處距離報文段的起始處多遠,實際指出的是TCP報文段的首部長度
保留:佔6位,目前爲0,沒被使用
控制位:
-
緊急URG:URG=1代表開啓緊急指針
-
確認ACK:ACK=1代表首部帶確認好ack
-
推送PSH(PuSH):URG=1立即把報文段發送出去,不再等到緩存都填滿後再向上交付
-
復位RST(ReSeT):RST=1釋放連接,重新建立運輸連接
-
同步SYN:SYN=1說明在建立連接同步序號
-
終止FIN:數據已發送完畢,釋放連接
窗口(重點):發送本報文段的一方的接收窗口大小,讓接收本報文段的接收方設置其發送窗口大小值。用於流量控制
檢驗和:和UDP一樣,僞首部第四個字段爲6
緊急指針:指出緊急數據的大小,即緊急數據的末尾(從0到末尾)
選項:最大報文段長度MSS、時間戳等等