上一章節我們介紹了TCP(詳見學習筆記-TCP簡單理解),這一章節我們來學習一下UDP。
UDP是什麼UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是(Open System Interconnection,OSI) 參考模型中一種無連接的協議,它是一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。IETF RFC 768 是UDP的正式規範。UDP在IP報文的協議号是17。
用戶數據報 UDP 有兩個字段:數據字段和首部字段。首部字段很簡單,隻有8個字節,由四個字段組成,每個字段都是兩個字節
源端口: 源端口号。因為UDP不需要應答,所以來源端口是可選的,如果來源端口不用,那麼置為零。
目的端口 :目的端口号。這在終點交付報文時必須使用
長度: UDP 用戶數據報的長度,其最小值是8(僅有首部)
檢驗和: 檢測 UDP 用戶數據報在傳輸中是否有錯。有錯就丢棄。UDP和TCP的校驗和都覆蓋到了它們的首部和數據。
僞首部
僞首部的源IP地址字段和目的IP地址字段記錄了發送UDP報文時使用的源IP地址和目的IP地址。協議字段指明了所使用的協議類型代碼(UDP是17),而長度字段是UDP數據報的長度。接收方進行正确性驗證的時候,必須要把這些字段的信息從IP報文的首部中抽取出來,以僞首部的格式進行裝配,然後再重新計算校驗和。
UDP 用戶數據報首部中檢驗和的計算方法有些特殊。在計算檢驗和時,要在 UDP 用戶數據報之前增加 12 個字節的僞首部。所謂"僞首部"是因為這種僞首部并不是 UDP 用戶數據報真正的首部。隻是在計算檢驗和時,臨時添加在 UDP 用戶數據報前面,得到一個臨時的 UDP 用戶數據報。檢驗和就是按照這個臨時用戶數據報來計算的。僞首部既不向下傳也不向上遞交,而僅僅是為了計算檢驗和
主要特點UDP是一個無連接協議。即發送數據之前不需要建立連接(發送數據結束時也沒有連接可釋放),減少了開銷和發送數據之前的時延。傳輸數據時就簡單地去抓取來自應用程序的數據,并盡可能快地把它扔到網絡上。
盡最大努力交付。即不保證可靠交付,主機不需要維持複雜的連接狀态表。
UDP是面向報文的。發送方的 UDP 對應用程序交下來的報文,在添加首部後就向下交付 IP 層。UDP 對應用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界,因此,應用程序需要選擇合适的報文大小。
UDP 的首部開銷小。隻有8個字節,比 TCP 的20個字節的首部要短
UDP 沒有擁塞控制。吞吐量不受擁擠控制算法的調節,隻受生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。網絡出現的擁塞不會使源主機的發送速率降低。
UDP 支持一對一、一對多、多對一和多對多的交互通信。
UDP的優缺點優點①開銷更小。TCP為了保證其可靠性,首部包含20字節,以及40字節的可選項,UDP首部隻有8字節
②速度更快。UDP發送數據之前沒有TCP的連接建立過程。TCP提供了過多的保護,在及時性上做了很多的妥協,比如:控制微包(Nagle算法),延時ACK,流量控制,超時重傳等,這些設計嚴重影響了Tcp的速度和及時性
缺點①丢失和亂序。因為UDP不提供ACK、序列号等機制,所以是沒有辦法知道是否有報文丢失以及接收方到達等報文順序是否和發送方發送的報文數據一樣;
②差錯。對于差錯問題則是可以通過校驗和等檢測到,但是不提供差錯糾正。
③數據完整性。UDP協議頭部雖然有16位的校驗和,但是IPv4并不強制執行,也就是說UDP無法保證數據的完整性
UDP的封裝
在交給IP層之前,UDP給用戶要發送的數據加上一個首部。IP層又給從UDP接收到的數據報加上一個首部。最後,網絡接口層把數據報封裝到一個幀裡,再進行機器之間的傳送。如圖所示。幀的結構根據底層的網絡技術來确定。通常網絡幀結構包括一個附加的首部。
UDP的多路複用、多路分解和端口
協議各層的軟件都要對相鄰層的多個對象進行多路複用和多路分解操作。UDP軟件接收多個應用程序送來的數據報,把它們送給IP層進行傳輸,同時它接收從IP層送來的UDP數據報,并把它們送給适當的應用程序。UDP軟件與應用程序之間所有的多路複用和多路分解都要通過端口機制來實現。實際上,每個應用程序在發送數據報之前必須與操作系統進行協商,以獲得協議端口和相應的端口号。當指定了端口之後,凡是利用這個端口發送數據報的應用程序都要把端口号放入UDP報文的源端口字段中。在處理輸入時,UDP從IP層軟件接收了傳入的數據報,根據UDP的目的端口号進行多路分解操作,如下圖。理解UDP端的最簡單的方式是把它看成是一個隊列。在大多數實現中,當應用程序與操作系統協商,試圖使用某個給定端口時,操作系統就創建一個内部隊列來容納收到的報文。通常應用程序可以指定和修改這個隊列的長度。當UDP收到數據報時,先檢查當前使用的端口是否就是該數據報的目的端口。如果不能匹配,則發送一個ICMP端口不可達報文并丢棄這個數據報。如果匹配,它就把這個數據報送到相應的隊列中,等待應用程序的訪問。當然,如果端口已滿也會出錯,UDP也要丢棄傳入的這個數據報。
應用場合由于缺乏可靠性且屬于非連接導向協議,所以在選擇UDP作為傳輸協議時必須要謹慎。在質量令人十分不滿意的環境下,UDP協議數據包丢失會比較嚴重。但是由于UDP的特性:它不屬于連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丢失一兩個數據包,也不會對接收結果産生太大影響。比如我們聊天用的ICQ和就是使用的UDP協議。如果某個應用需要很高的可靠性,那麼可以用傳輸控制協議(即TCP協議)來代替UDP。
使用UDP協議的應用有:域名系統(DNS)、簡單網絡管理協議(SNMP)、動态主機配置協議(DHCP)、路由信息協議(RIP)等等。因為UDP不屬于連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丢失幾個數據包,也不會對接收結果産生太大影響。
本文的初衷為學習筆記的分享,部分圖文來源于網絡,如侵,聯删。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!