大話電腦網路一 聊聊UDP
引言
UDP是一個簡單的面向數據報的運輸層協議
UDP不提供可靠性,它把應用程式傳給IP層得數據發送出去,不保證它們能達到目的地
UDP首部
埠號表示發送進程和接受進程。
UDP長度欄位指的是UDP首部和UDP數據的位元組長度,該欄位最小值為8位元組,
UDP長度是全長減去IP首部的長度
UDP檢驗和是一個端到端的檢驗和。它由發送端計算,然後由接收端驗證。其目的是為了發現UDP首部和數據在發送端到接收端之間發生的任何改動。
最大UDP數據報長度
理論上,IP數據報的最大長度是65535位元組,這是由IP首部(圖3-1)16比特總長度欄位所限制的。去除20位元組的IP首部和8個位元組的UDP首部,UDP數據報中用戶數據的最長長度為65507位元組。但是,大多數實現所提供的長度比這個最大值小。
UDP校驗和
UDP和TCP在首部中都有覆蓋它們首部和數據的檢驗和。UDP的檢驗和是可選的,而TCP的檢驗和是必需的。
儘管UDP檢驗和的基本計算方法與我們在3.2節中描述的IP首部檢驗和計算方法相類似(16 bit字的二進位反碼和),但是它們之間存在不同的地方。首先,UDP數據報的長度可以為奇數位元組,但是檢驗和演算法是把若干個16 bit字相加。解決方法是必要時在最後增加填充位元組0,這只是為了檢驗和的計算(也就是說,可能增加的填充位元組不被傳送)。
其次,UDP數據報和TCP段都包含一個12位元組長的偽首部,它是為了計算檢驗和而設置的。偽首部包含IP首部一些欄位。其目的是讓UDP兩次檢查數據是否已經正確到達目的地(例如,IP沒有接受地址不是本主機的數據報,以及IP沒有把應傳給另一高層的數據報傳給UDP)。UDP數據報中的偽首部格式如圖11-3所示。
在該圖中,我們特地舉了一個奇數長度的數據報例子,因而在計算檢驗和時需要加上填充位元組。注意,UDP數據報的長度在檢驗和計算過程中出現兩次。
如果檢驗和的計算結果為0,則存入的值為全1(65535),這在二進位反碼計算中是等效的。如果傳送的檢驗和為0,說明發送端沒有計算檢驗和。
如果發送端沒有計算檢驗和而接收端檢測到檢驗和有差錯,那麼UDP數據報就要被悄悄地丟棄。不產生任何差錯報文(當IP層檢測到IP首部檢驗和有差錯時也這樣做)。
UDP檢驗和是一個端到端的檢驗和。它由發送端計算,然後由接收端驗證。其目的是為了發現UDP首部和數據在發送端到接收端之間發生的任何改動。
這個系列主要是對自己讀TCP/IP詳解 卷一 協議的筆記,推薦看完以後去閱讀一下這本又臭又厚的書
電子書的鏈接地址//www.52im.net/topic-tcpipvol1.html
感謝這位站長的開源