UDP知識簡單梳理

2021-10-09 03:09:46 字數 2137 閱讀 2837

udp(user datagram protocol),使用者資料報協議,是osi(open system interconnection,開放式系統互聯) 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,ietf rfc 768是udp的正式規範。udp提供了無連線通訊,且不對傳送資料報進行可靠性保證,適合於一次傳輸少量資料,udp傳輸的可靠性由應用層負責。

udp報文沒有可靠性保證、順序保證和流量控制欄位等,可靠性較差。但是正因為udp協議的控制選項較少,在資料傳輸過程中延遲小、資料傳輸效率高,適合對可靠性要求不高的應用程式,或者可以保障可靠性的應用程式,如dns、tftp、snmp等。

udp在ip報文中的位置如下圖所示:

udp首部有8個位元組,由4個字段構成,每個欄位都是兩個位元組。

在計算校驗和的時候,需要在udp資料報之前增加12位元組的偽首部,偽首部並不是udp真正的首部。只是在計算校驗和,臨時新增在udp資料報的前面,得到乙個臨時的udp資料報。校驗和就是按照這個臨時的udp資料報計算的。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算校驗和。這樣的校驗和,既檢查了udp資料報,又對ip資料報的源ip位址和目的ip位址進行了檢驗。

udp校驗和的校驗範圍如下:

因為udp是面向報文的,在進行udp程式設計的時候,我們最容易想到的問題就是,一次傳送多少bytes好? 當然,這個沒有唯一答案。相對於不同的系統,不同的要求,其得到的答案是不一樣的。我這裡僅對像icq一類的傳送聊天訊息的情況作分析,對於其他情況,或許也能得到一點幫助。

首先,我們知道tcp/ip通常被認為是乙個四層協議系統,包括鏈路層、網路層、傳輸層、應用層。udp屬於傳輸層,下面我們由下至上一步一步來看: 乙太網(ethernet)資料幀的長度必須在46-1500位元組之間,這是由乙太網的物理特性決定的。 這個1500位元組被稱為鏈路層的mtu(最大傳輸單元)。 但這並不是指鏈路層的長度被限制在1500位元組,其實這個mtu指的是鏈路層的資料區並不包括鏈路層的首部和尾部的18個位元組。所以事實上這個1500位元組就是網路層ip資料報的長度限制。因為ip資料報的首部為20位元組,所以ip資料報的資料區長度最大為1480位元組。而這個1480位元組就是用來放tcp傳來的tcp報文段或udp傳來的udp資料報的。又因為udp資料報的首部8位元組,所以udp資料報的資料區最大長度為1472位元組。這個1472位元組就是我們可以使用的位元組數。

當我們傳送的udp資料大於1472的時候會怎樣呢? 這也就是說ip資料報大於1500位元組,大於mtu。這個時候傳送方ip層就需要分片(fragmentation)。把資料報分成若干片,使每一片都小於mtu。而接收方ip層則需要進行資料報的重組。這樣就會多做許多事情,而更嚴重的是,由於udp的特性,當某一片資料傳送中丟失時,無法重組資料報,將導致丟棄整個udp資料報。因此,在普通的區域網環境下,建議將udp的資料控制在1472位元組以下為好。

ps:需要注意的,在分片的資料中,傳輸層的首部只會出現在第乙個分片中,如下圖所示。因為傳輸層的資料格式對ip層是透明的,傳輸層的首部只有在傳輸層才會有它的作用,ip層不知道也不需要保證在每個分片中都有傳輸層首部。所以,在網路上傳輸的資料報是有可能沒有傳輸層首部的。需要注意的,在分片的資料中,傳輸層的首部只會出現在第乙個分片中,如下圖所示。因為傳輸層的資料格式對ip層是透明的,傳輸層的首部只有在傳輸層才會有它的作用,ip層不知道也不需要保證在每個分片中都有傳輸層首部。所以,在網路上傳輸的資料報是有可能沒有傳輸層首部的。

為什麼udp有時比tcp更有優勢?

udp以其簡單、傳輸快的優勢,在越來越多場景下取代了tcp,如實時遊戲。

採用tcp,一旦發生丟包,tcp會將後續的包快取起來,等前面的包重傳並接收到後再繼續傳送,延時會越來越大,基於udp對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網路問題對遊戲性造成影響。

Zookeeper 簡單知識梳理

我有幾張阿里雲幸運券分享給你,用券購買或者公升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。一旦乙個更新操作被應用,那麼在客戶端再次更新它之前,它的值將不會改變.這個保證會產生兩種結果 如果客戶端成功獲得了正確的返回資料,那麼說明更新已經成功,如果不能夠返回...

知識梳理計畫

知識的學習一般來說有兩個過程,第乙個是摳細節,理解知識,另乙個是將知識點進行總結歸納融入到自己的知識體系中。如果工作學習過程中需要用到該知識點的時候可以很快的提取出來。在這幾年的學習以及研究生活中,我也陸陸續續的鑽研過一些演算法,但是很多東西,都是當時懂了,但是過了一段時間,可能就忘記了,等到需要使...

Hive 知識梳理

1 order by,sort by,distribute by,cluster by 背景表結構 在講解中我們需要貫串乙個 例子,所以需要設計乙個情景,對應 還要有乙個表結構和填充資料。如下 有 3 個字段,分別為 personid 標識某乙個人,company 標識一家公司名稱,money 標識...