輕量使用者資料報協定

UDP-LiteLightweight User Datagram Protocol[1]輕量使用者資料報協定),或者簡稱:UDP Lite),是一種無連接通訊傳輸層協定,允許將有潛在損壞的資料負載傳送給接收方,而不會被接收方直接丟棄,因為它允許一些應用層協定(例如一些影片編碼傳輸的協定)在了解自己應用資料的損壞影響的情況,對資料完整度的控制決定。它定義於RFC 3828[1]

協定介紹

編輯

UDP-Lite是基於使用者資料報協定(UDP),但又不同於UDP,它允許對資料報的任意長度計算相應的校驗和進行驗證保護,通過UDP封包頭的「報文長度」欄位來控制需要計算校驗和的封包長度,從而容許沒被校驗和覆蓋的資料部分可能有損地傳輸。它被用於設計多媒體資料傳輸協定,例如VoIP或流影片協定,這些協定會認為接收有一定程度損壞的資料比沒接收到資料要好,對於其他傳輸層協定,例如傳輸控制協定(TCP)、使用者資料報協定,校驗和會覆蓋整個封包的負載,一旦封包即使有一個位元組的損壞,接收方都會因為校驗和驗證失敗而丟棄整個封包,單個位元組的錯誤會影響整個封包的接收,但對於這些應用層協定來說,這些損壞是微不足道的。

對於大部分現在多媒體編解碼處理程式,其處理的應用資料本身就內建了對資料錯誤的檢測和回放時的錯誤糾正的機制。UDP-Lite很適合配合這些應用程式使用,因為這些應用本身能接受有損壞的應用資料,能容許少量的資料損壞被接收而非因為校驗和錯誤導致整個資料被丟棄。應用層了解自己應用資料各部分的重要性,從而允許負載資料前部分受校驗和保護,而非整個封包強制受校驗和保護。在Hammer等人的研究中,UDP-Lite與AMR編解碼器結合使用,可在有損網路條件下提高語音品質。[2]

由於資料鏈路層也存在校驗和機制用於丟棄資料有損壞的資料訊框,所以UDP-Lite也需要了解其資料鏈路層,從而需要相應的驅動程式調整。

UDP-Lite的IP協定號為136,可以使用網際網路號碼分配局(IANA)分配給UDP的相同功能埠。為了和UDP保持相容,UDP-Lite使用和UDP、TCP相同的校驗和演算法。[3]

實現支援

編輯

以下作業系統有相應的實現支援:

使用

編輯

Berkeley通訊端中,使用UDP-Lite的話,需要在呼叫socket建立方法socket時增加第三個參數值IPPROTO_UDPLITE[8]

int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);

然後在設定socket參數方法setsockopt添加控制校驗和需要覆蓋長度的控制參數(計算長度值是從封包頭開始):

int val = 20; /* 8字节长的包头 + 12字节的负载长度 */
(void)setsockopt(fd, SOL_UDPLITE, UDPLITE_SEND_CSCOV, &val, sizeof val);
/* 如果实际负载长度小于12字节,则等同整个数据包都被校验和覆盖 */

預設情況下,接收方將丟棄所有校驗和未完全覆蓋的封包,如同UDP那樣,所以接收方也需要類似的接收設定:

int val = 20; /* 8字节长的包头 + 12字节的负载长度 */
(void)setsockopt(fd, SOL_UDPLITE, UDPLITE_RECV_CSCOV, &val, sizeof val);

這樣至少保證負載長度為12位元組長的部分資料被校驗和保護,任何少於12位元組長負載的封包會被協定視為壞包而丟棄,而如果封包的覆蓋長度值至少為20位元組長(包括封包頭),並且其校驗和正確,則將其交付給應用層的應用程式。如果校驗和不正確,封包同樣被丟棄。校驗和覆蓋值可以等於0或大於等於8位元組時,也就是校驗和的校驗部分至少包括封包頭,以防止一些對所有流量都感興趣的嗅探器。

參考文獻

編輯
  1. ^ 1.0 1.1 Fairhurst, Godred. The Lightweight User Datagram Protocol (UDP-Lite). tools.ietf.org. [2020-03-08]. (原始內容存檔於2021-04-23) (英語). 
  2. ^ Corrupted Speech Data Considered Useful, 2003. [2012-01-12]. (原始內容存檔於2015-12-22). 
  3. ^ Computing the Internet Checksum, RFC 1071. [2012-01-12]. (原始內容存檔於2021-05-02). 
  4. ^ 存档副本. [2020-03-08]. (原始內容存檔於2020-12-22). 
  5. ^ Commit message for introduction into CURRENT. [2014-07-26]. (原始內容存檔於2017-07-06). 
  6. ^ udplite(7) - Linux manual page. man7.org. [2020-03-08]. (原始內容存檔於2021-01-22). 
  7. ^ Laurent Guillo, Cécile Marc. WULL: A Windows UDP-Lite library (PDF). IRISA. 10 January 2005 [2015-12-15]. (原始內容存檔 (PDF)於2014-08-10). 
  8. ^ UDP-Lite Howto (kernel and userland applications). [2015-10-11]. (原始內容存檔於2021-03-23). 

外部連結

編輯
  • RFC 3828 — The Lightweight User Datagram Protocol (UDP-Lite)
  • RFC 5097 — MIB for the UDP-Lite protocol
  • RFC 4019 — RObust Header Compression (ROHC): Profiles for User Datagram Protocol (UDP) Lite
  • RFC 5405 — Unicast UDP Usage Guidelines for Application Designers