第三章第二節 無鏈接運輸:UDP
UDP(用戶數據報協議,User Datagram Protocol),它只是作了運輸層協議可以作的最少工做,除了多路複用和多路分解及一些差錯檢測外,它幾乎沒有作任何東西。參考前文:計算機網絡2.1html
Outline
Notes
## UDP的優點
- 應用層能更好發控制要發送的數據和發送時間:當網絡應用進程有數據傳遞給UDP時,UDP立刻就會將此數據打包成UDP報文段,並把它交付給網絡層,從而把數據發送出去。而TCP的擁塞機制會讓視頻會議等功能的體驗變得不好。
- UDP無需握手:在使用UDP時,在發送報文段以前,發送方和接收方的運輸層實體之間沒有進行握手,所謂的握手,就是發送方和接收方經過發送一些特定的報文段來互相確認,從而爲發送作準備。無需握手就不會引入創建鏈接的時延,因此DNS運行在UDP之上而不是TCP之上。
- UDP無鏈接狀態:TCP須要在端系統中維護鏈接狀態。此鏈接狀態包括接收和發送緩存、擁塞控制參數、序號與確認序號等參數。而UDP不維護鏈接狀態,也不跟蹤這些參數。所以,使用UDP的服務器能支持更多的活動客戶機。
- 分組首部開銷小:因爲UDP提供的服務少,只提供多路分解和多路複用和校驗功能,因此其首部字段少,只有8個字節,而TCP的首部有20個字節。
## UDP報文段格式
![](http://static.javashuo.com/static/loading.gif)
UDP報文段結構由RFC 768定義,如上圖所示,UDP首部只有4個字段,每一個字段由兩個字節組成。緩存
- 源端口號: 本機(客戶端)的應用程序的套接字所對應的端口號,服務器端可利用此端口號向客戶端發送數據。
- 目的端口號: 服務端上的應用進程的套接字所對應的端口號,例如HTTP服務器的80端口。
- 長度:指明瞭首部和數據部分的UDP報文段的總長度,單位爲字節,即首部+數據。
- 檢驗和: 提供了差錯檢測功能,即檢驗和用於肯定當UDP報文段從源到達目的時,其中的比特是否發生了改變。
【UDP檢驗和】服務器
- 發送方
- 將段的內容視爲16-bit整數
- 校驗和計算:計算全部整數的和,進位加在和的後面,將獲得的值按位求反,獲得校驗和
- 發送方將校驗和放入校驗和字段
- 接收方
- 計算所獲得段的檢驗和,並將其他檢驗和字段進行比較
- 若是不相等,則檢驗出錯誤,但若想等也可能有錯誤。