# 用戶數據報協議UDP
## UDP的主要特點
1. UDP是**無鏈接**的,即發送數據之前不需要建立鏈接(結束后也不需要釋放鏈接),減少了開銷和發送數據之間的時延。
2. UDP使用的是**盡最大努力交付**,即不保證可靠交付,主機不需要維護復雜的鏈接狀態表。
3. UDP是**面向報文的**,發送方的UDP對應用層交下來的報文,在添加首部后就向下IP(網絡)層交付。UDP對應用層交下來的報文,既不合并也不拆分,而是保留這些報文的邊界。
:-: 
4. UDP**沒有擁塞控制**,網絡發生擁塞時不會使源主機的發送速率降低。這點在某些實時應用中很有用。
5. UDP支持一對一、一對多、多對一、多對多鏈接。
6. UDP的**首部開銷小**,只有8個字節,比TCP的首部20字節要短很多。
## UDP首部格式
用戶數據報UDP由2部分組成:**數據字段**和**首部字段**。首部字段很簡單,只有8個字節,分為4個字段,每個字段都占2個字節。
### 首部字段
* 源端口: 源端口號,在需要對方回信時必傳,如不需要,可傳0。
* 目標端口: 目的端口號,在終點交付時,必須要傳。
* 長度: UDP用戶數據報的長度,最小時為8(僅有首部)。
* 校驗和:檢測UDP用戶數據報在傳輸中是否有錯,有錯就丟棄。
:-: 
### 端口分用
當數據接收端的傳輸層從IP層接收到UDP數據報文時,就會根據UDP首部中的目的端口把數據報文上交給相應的應用程序。
如果接收方UDP發現接收到的報文中目的端口不正確(不存在對應于該端口號的應用程序),就會丟棄報文,并由網際控制報文協議ICMP發送`端口不可達`差錯給發送方。
### 偽首部
UDP用戶數據報首部中的校驗和字段計算方法有些特殊。在計算校驗和時,要在用戶數據報之前加12個字節的`偽首部`。所謂偽首部是因為這部分并不是UDP用戶數據報真正的首部,只是在計算校驗和的時候,臨時加在UDP用戶數據報首部前面的,偽首部既不向下傳遞也不向上提交,僅僅是用來計算校驗和。