天天看點

UDP 協定解析

推薦:​​Java網絡程式設計彙總​​

UDP 協定解析

原文位址

​​UDP 協定解析 - 1​​

1. 概述

使用者資料報協定(UDP,User Datagram Protocol)為應用程式提供了一種無需建立連接配接就可以發送封裝的 IP 資料報的方法。UDP是一種保留消息邊界的簡單的面向資料報的協定。​

​UDP不提供差錯糾正、隊列管理、重複消除、流量控制和擁塞控制​

​​,但​

​提供差錯檢測​

​(包含我們在傳輸層中碰到的第一個真實的端到端(end-to-end)校驗和)。這種協定自身提供最小功能,是以使用它的應用程式要做許多關于資料報如何發送和處理的控制工作。想要保證資料被可靠傳遞或正确排序,應用程式必須自己實作這些保護功能。一般來說,每個被應用程式請求的UDP輸出操作,隻産生一個UDP資料報,進而發送一個IP資料報。而對于面向資料流的傳輸層協定(例如TCP),應用程式寫入的全部資料與真正在單個IP資料報裡傳送的或接收方接收的内容可能沒有聯系。

2. UDP 的主要特點

1)UDP 是​​

​無連接配接的​

​​,即發送資料之前不需要建立連接配接,是以減少了開銷和發送資料之前的時延。

2)UDP 使用​​

​盡最大努力傳遞​

​​,即​

​不保證可靠傳遞​

​​,是以主機不需要維持複雜的連接配接狀态表。

3)UDP 是​​

​面向封包​

​​的。發送方的UDP對應用程式交下來的封包,在添加首部後就向下傳遞IP層。UDP對應用層交下來的封包,既不合并,也不拆分,而是保留這些封包的邊界。是以,應用程式必須選擇合适大小的封包。

4)UDP ​​

​沒有擁塞控制​

​​,是以網絡出現的擁塞不會使源主機的發送速率降低。很多的實時應用(如IP電話、實時視訊會議等)要求源主機以恒定的速率發送資料,并且允許在網絡發生擁塞時丢失一些資料,但卻不允許資料有太多的時延。UDP正好符合這種要求。

5)UDP ​​

​支援一對一、一對多、多對一和多對多的互動通信​

​​。

6)UDP 的​​

​首部開銷小​

​,隻有8個位元組,比TCP的20個位元組的首部要短。

雖然某些實時應用需要使用沒有擁塞控制的UDP,但當很多的源主機同時都向網絡發送高速率的實時視訊流時,網絡就有可能發生擁塞,結果大家都無法正常接收。是以,不使用擁塞控制功能的UDP有可能會引起網絡産生嚴重的擁塞問題。

還有一些使用UDP的實時應用,需要對UDP的不可靠的傳輸進行适當的改進,以減少資料的丢失。在這種情況下,應用程序本身可以在不影響應用的實時性的前提下,增加些提高可靠性的措施,如采用前向糾錯或重傳已丢失的封包。

3. UDP 的首部格式

UDP 協定解析
  • ​源端口​

    ​:源端口号。在需要對方回信時選用。不需要時可用全0。
  • ​目的端口​

    ​:目的端口号。這在終點傳遞封包時必須要使用到。
  • ​長度​

    ​:UDP使用者資料報的長度,其最小值是8(僅有首部),發送一個帶0位元組資料的UDP資料報是允許的。值得注意的是,UDP長度字段是備援的;IPV4頭部包含了資料報的總長度,同時IPV6頭部包含了負載長度。是以,一個UDP/IPV4資料報的長度等于IPV4資料報的總長度減去IPV4頭部的長度。一個UDP/IPV6資料報的長度等于包含在IPV6頭部中的負載長度(payload length)字段的值減去所有擴充頭部(除非使用了超長資料報)的長度。這兩種情況下,UDP長度字段應該與從IP層提供的資訊計算得到的長度是一緻的。
  • ​校驗和​

    ​​:檢測UDP使用者資料報在傳輸中是否有錯。有錯就丢棄。

    如果接收方 UDP發現封包中的目的端口号不正确(即不存在對應于該端口号的應用程序),就丢棄該封包,并由網際控制封包協定 ICMP 發送“端口不可達”差錯封包給發送方。

    請注意,雖然在 UDP 之間的通信要用到其端口号,但由于 UDP 的通信是無連接配接的,是以不需要使用套接字(TCP 之間的通信必須要在兩個套接字之間建立連接配接)。