http://blog.csdn.net/chenhanzhun/article/details/415523592014 概述
UDP 是無連接,、不可靠的數(shù)據(jù)報傳輸層協(xié)議,,為應用程序發(fā)送和接收數(shù)據(jù)報,只是將數(shù)據(jù)報的分組從一臺主機發(fā)送到另一臺主機,,但并不保證數(shù)據(jù)報能夠到達另一端,,任何必須的可靠性都由應用程序提供。在 UDP 情況下,,雖然可以確保發(fā)送消息的大小,,卻不能保證消息一定會達到目的端。沒有超時和重傳功能,,當 UDP 數(shù)據(jù)封裝到 IP 數(shù)據(jù)報傳輸時,,如果丟失,,會發(fā)送一個 ICMP 差錯報文給源主機。 即使出現(xiàn)網(wǎng)絡阻塞情況,,UDP 也無法進行流量控制,。此外,傳輸途中即使出現(xiàn)丟包,,UDP 也不負責重發(fā),,甚至當出現(xiàn)包的到達順序雜亂也沒有糾正的功能。若需要這些細節(jié)控制,,則必須交給 UDP 的應用程序去處理,。
UDP 首部
UDP 首部由源端口號、目標端口號,、UDP 包長度以及檢驗和組成,。UDP 首部只有 8 字節(jié),每個部分 占 16 位,。其結構如下圖所示:
--源端口號:表示發(fā)送端的端口號,,字段長度為 16 位。該字段是可選的,,有時可能不會設置源端口號,,沒有源端口號時該字段的值設為 0。此時,,可用于不需要返回的通信中,; --目標端口號:表示接收端的端口號,字段長度為 16 位,; --UDP 包長度:該字段保存了 UDP 首部的長度與 UDP 數(shù)據(jù)的字節(jié)長度之和,,該字段的最小值為 8 字節(jié),IP 數(shù)據(jù)報是指數(shù)據(jù)報總的長度,,因此,,UDP 數(shù)據(jù)報長度是總的長度減去 IP 首部的長度; --檢驗和:檢驗和是為了提供可靠的 UDP 首部和數(shù)據(jù)而設計,;
檢驗和
首先先說明計算 UDP 檢驗和引入 UDP 偽首部的原因,。在前面介紹《TCP 與 UDP 協(xié)議基本概述》中說到,為了防止相同端口號之間通信混亂,,TCP/IP 或 UDP/IP 通信中通常采用 5 個信息來識別一個通信,。它們分別是“源 IP 地址”、“目的 IP 地址”,、“協(xié)議號”,、“源端口號”、“目標端口號”。只要其中某一項不同,,則被認為是其他通信,。然而在 UDP 首部中只有源端口號和目的端口號,余下的 3 項都包含在 IP 首部中,。假如其他 3 項信息(協(xié)議號、源 IP 地址,、目的 IP 地址)被破壞,,可能會導致無法正確接收到所需要的包(即可能收不到需要的包,而收到不該收的包),。為了避免這類問題的出現(xiàn),,有必要驗證一個通信中必要的 5 項識別碼是否正確。因此,,在檢驗和的計算中引入了偽首部信息,,UDP 偽首部為 12 字節(jié),它包含 IP 首部的一些字段,,其目的是讓 UDP 兩次檢查數(shù)據(jù)是否已正確到達目的地,。 在 IP 首部的檢驗和中,只需對 IP 首部進行檢驗,,而 UDP 和 TCP 的檢驗和,,對 UDP 首部和 UDP 數(shù)據(jù)或者 TCP 首部和 TCP 數(shù)據(jù)都進行檢驗。UDP 的檢驗和是可選的,,而 TCP 的檢驗和是必須的,。 UDP 檢驗和是一個端到端的檢驗和,它由發(fā)送端計算,,然后由接收端驗證,。其目的是為了發(fā)現(xiàn) UDP 首部和數(shù)據(jù)在發(fā)送端到接收端之間發(fā)生變化。如果 UDP 數(shù)據(jù)報的發(fā)送端沒打開 UDP 校驗和,,而接收端計算校驗和有差錯,,那么 UDP 數(shù)據(jù)報將會被丟掉,不產(chǎn)生任何差錯報文,。
最大 UDP 數(shù)據(jù)報長度
理論上 IP 數(shù)據(jù)報的最大長度為 65535 字節(jié),,去除 20 字節(jié)的 IP 首部和 8 個字節(jié)的 UDP 首部,因此 UDP 數(shù)據(jù)報的最大長度為 65507 字節(jié),。但是,,大多數(shù)實現(xiàn)所提供的長度比這個最大值小。由于 UDP 最大數(shù)據(jù)報的限制,,大于這個限制的數(shù)據(jù)報會被截斷,,從而發(fā)生數(shù)據(jù)丟失,且不會有任何數(shù)據(jù)丟失的通知。一般有兩個因素的限制:
UDP 優(yōu)點:在少量數(shù)據(jù)的傳輸時,,使用 UDP 協(xié)議傳輸信息流,可以減少 TCP 連接的過程,,提高工作效率,; UDP 缺點:當使用 UDP 協(xié)議傳輸信息流時,用戶應用程序必須負責解決數(shù)據(jù)報排序,,差錯確認等問題,;
參考資料: 《TCP/IP 詳解》 |
|