UDP協(xié)議

什么是UDP協(xié)議?

User Datagram Protocal ,用戶數(shù)據(jù)報協(xié)議,它跟TCP協(xié)議不同,TCP協(xié)議是基于流的,發(fā)送的數(shù)據(jù)跟IP數(shù)據(jù)報個數(shù)無關。而UDP數(shù)據(jù)則直接封裝成IP數(shù)據(jù)報發(fā)送(當然,如果UDP數(shù)據(jù)過長,會導致IP數(shù)據(jù)報分片發(fā)送)。所以UDP是簡單的基于IP數(shù)據(jù)報的傳輸,而IP數(shù)據(jù)報的傳輸是不保證可到達,不保證傳輸順序,所以UDP不提供任何的可靠性。

首部格式

  • 「Source port」 源端口號,可選的,如果不用可全部置0.如果喜歡接收方能回復,則源端口號很重要,要不然別人也不知道回復哪個端口,我們知道,系統(tǒng)內核是通過端口號來映射應用程序的
  • 「Destination port」 和「 「Source port」 一樣的語義,通過指定接收方的端口號來指定特定應用程序接收到此UDP數(shù)據(jù)報
  • 「Length」 指UDP數(shù)據(jù)報的長度,注意,包括「首部」 和 「數(shù)據(jù)報內容」 的總長度
  • 「Check sum」 檢驗和,和 「IP」 檢驗和一樣,不同的是UDP的檢驗和針對首部和內容全部計算得出檢驗和。
    *「Data octets」 UDP數(shù)據(jù)報內容,可以為空


    UDP協(xié)議格式

IP分片

前面已經(jīng)說過,UDP協(xié)議是基于IP協(xié)議的簡單封裝,而IP協(xié)議對應的鏈路層有MTU的概念 ,即物理鏈路傳輸數(shù)據(jù)時有最大傳輸單元限制,這樣當IP數(shù)據(jù)包長送的時候,會將MTU和當前的數(shù)據(jù)包長度進行比較,如果必要,則要進行IP分片傳輸。我們知道,以太網(wǎng)鏈路層的MTU是1500,則每次傳輸?shù)淖畲髷?shù)據(jù)不能超過1500字節(jié)(byte),如果超過了就要進行分片傳輸。

IP分片

上圖所描述的示例中,如果我們發(fā)送一個超過了MTU長度的UDP數(shù)據(jù),比如1473字節(jié),加上IP首部20字節(jié)和UDP首部8個字節(jié),即1501字節(jié),它比以太網(wǎng)鏈路層的MTU:1500多1個字節(jié),所以要進行IP分片后傳輸。分片的第一個分組包含了UDP首部(8個字節(jié))和UDP數(shù)據(jù)(1472)個字節(jié)。第二個分組只包含了UDP數(shù)據(jù)的最后一個字節(jié)內容。我們可以了解到,對于分片發(fā)送的UDP數(shù)據(jù),只有第一個分組擁有UDP首部的信息,如果所有的分組中第一片分組丟失的話,則所有分組都要丟棄,因我們知道UDP首部中包含了重要的信息,如「Destination port」,如果不知道目的地端口號,則系統(tǒng)不知道將該數(shù)據(jù)交給哪個應用程序去處理。所以,利用UDP傳輸?shù)膽贸绦颍瑧摽刂茢?shù)據(jù)報的升序,盡量避免分片進行。

關于接收端在接收到一個IP數(shù)據(jù)報的分片數(shù)據(jù)時,如果進行重組,即把所有分片數(shù)據(jù)再次按順序組合起來呢,這就要利用IP首部中一些字段標識,我們一起來復習下前面文章中的IP協(xié)議:

  • Identification(唯一標識): 每一個IP數(shù)據(jù)報都要有唯一的標識字段,這樣在分片和重組時不至于混淆兩個完全不同的分片數(shù)據(jù)。就是說,一個IP數(shù)據(jù)報分片后,每個分片的IP首部中,該字段相同,這樣接收端就知道這些分片來自一個數(shù)據(jù)報
  • Flages(標志): 這個字段也是為IP數(shù)據(jù)報的分片和重組作用的。用于標識收到的分片后續(xù)是否還有分片待接收。1代表后續(xù)還有分處,0代表分片結束,所以最后一個分片該值為0
  • Fragment offset(分片偏移):指當前分片數(shù)據(jù)在整體IP數(shù)據(jù)報中所處的偏移量,以8字節(jié)(64比特)為單位。由此可見,「identification」,「Flages」,「Fragment offset」這三個字段是為IP數(shù)據(jù)報分片和重組功能作用的字段
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 11.1 引言 UDP是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議:進程的每個輸出操作都正好產(chǎn)生一個UDP數(shù)據(jù)報,并組裝成一...
    張芳濤閱讀 2,971評論 1 6
  • 1 運輸層協(xié)議概述 1.1 進程之間的通信 網(wǎng)絡層是為主機之間提供邏輯通信,而運輸層為應用進程之間提供端到端的邏輯...
    Mr希靈閱讀 8,323評論 0 34
  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,375評論 6 174
  • 計算機網(wǎng)絡七層模型中,傳輸層有兩個重要的協(xié)議:(1)用戶數(shù)據(jù)報協(xié)議UDP (User Datagram Proto...
    Q南南南Q閱讀 1,866評論 0 3

友情鏈接更多精彩內容