分組與數據報
分組是TCP/IP模型中第三層傳輸層的傳輸單位。分組與數據報的意義近似,但有微小差別。
* 分組(packet),分成兩部分,包括控制信息(數據表頭)和數據,可以用來指代任何格式的數據塊。
* 數據報(datagram),通常用來描述那些通過不可靠服務傳輸的分組,既不保證送達,也不發送失敗通知。
TCP與UDP的區別
- TCP因其面向連接且具有順序控制、重發控制等機制,適用於需要可靠傳輸的應用;
- TCP是面向字節流的協議,能夠以多個分組形式發送應用程序的消息,對分組中的消息範圍沒有任何明確的限制。所有的分組都有序號,丟失重發,且按序交付。
- UDP主要用於針對高速傳輸和實時性有較高要求的通信或廣播通信(RIP、DHCP等基於廣播的協議依賴於UDP)。
- UDP數據報必須封裝在IP分組中,不能分片。
UDP
UDP(User Datagram Protocol,用戶數據報協議),面向無連接,隨時發送數據。
UDP的無服務在以下4個方面表現:
- 不保證消息交付
不確認,不重傳,無超時 - 不保證交付順序
不設置包序號,不重排,不會發生隊首阻塞 - 不跟蹤連接狀態
不必建立連接或重啓狀態機 - 不需要擁塞控制
不內置客戶端或網絡反饋機制
在UDP數據報中的源端口和校驗和字段都是可選的。
UDP處理簡單高效,被用於:
- 包總量較少的通信(DNS、SNMP等)
- 視頻、音頻等多媒體通信(即時通信)
- 限定於LAN等特定網絡中的應用通信
- 廣播通信(廣播、多播)
NAT與NAT穿透
TODO
UDP的優化
- 應用程序必須容忍各種因特網路徑條件
- 應用程序應該控制傳輸速度
- 應用程序應該對所有流量進行擁塞控制
- 應用程序應該適用於TCP相近的帶寬
- 應用程序應該準備基於丟包的重發計數器
- 應用程序應該不發送大於路徑MTU的數據報
- 應用程序應該處理數據報丟失、重複和重排
- 應用程序應該足夠穩定支持2分鐘以上的交付延遲
- 應用程序應該支持IPV4 UDP校驗和,必須支持IPV6校驗和
- 應用程序可以在需要時使用
keep-alive
(最小間隔15s)
來源
- 《Web性能權威指南》
- 《圖解TCP/IP》