UDP細節筆記

2021-10-08 16:37:27 字數 1430 閱讀 6846

資源列表

1.udp報文大小的影響因素

udp包最大長度

(65535-8(udp包頭)-20(ip包頭))=65507位元組

udp包理想長度

mtu = 1500位元組,如果udp包大小超過mtu則會在ip層被分包。因此如果要避免分包,udp包最大為1500位元組,減去udp頭(8位元組)和ip頭(20位元組),udp資料大小最大為1472位元組。

2.udp傳送和接收過程

(1) 傳送過程

sendto()把資料放在send buffer裡,通知os來取

os在適當的時候,過來取資料,併發送到網路

注意:這裡udp的send buffer和tcp的不一樣,udp雖然會先將資料寫到socket send buffer裡面,但是在資料鏈路層傳送之後就會清除對應的資料報。而在tcp中即使發出去了也不會馬上清除,等到收到了ack之後才會清楚對應的資料報。因此,在教科書上一般會說udp沒有傳送快取,但是實際上還是會有套接字傳送快取來做中轉的。

問題:

(2) 接收過程

os不斷地從網路上接收資料,快取到receive buffer裡

應用層從receive buffer裡取資料

問題:3.udp的丟包問題

(1)lost on the way out

如果socket傳送緩衝區滿了,後續應用程式傳送的udp包會被核心丟棄

(2)lost in transit

udp包在網路中傳輸時,遇到路由等網路中介軟體快取溢位導致的丟包。或者是通道本身導致的隨機性丟包

(3)lost on the way in

當udp包到達了接收端,但是接收端的socket接收緩衝區滿了,那麼這個包會被丟棄。

在linux中可以通過netstat -suna檢視快取導致的丟包數量

4.udp的時延問題

(1)傳輸時延

即資料報從傳送端發出去的時延(傳送端排隊時延)

(2)傳播時延

物理層的訊號傳播時延

(3)排隊時延/處理時延

在路由器中的處理和排隊時延(網路擁塞)

5. tcp vs udp

(1.throughput (udp 優於 tcp)

2.latency (udp 優於 tcp)

udp通訊C 實現的細節

在windows linux下有下面結構 sockaddr結構 struct sockaddr sa family是位址家族,一般都是 af 的形式。通常大多用的是都是 af inet,代表tcp ip協議族。sa data是14位元組 協議位址。此資料結構用做bind connect recvfr...

C 細節筆記

放在草稿箱裡都快遺忘了。還是發出來吧,僅作備忘 類與物件在記憶體中的情況小結 1.在c 中,物件即變數,一塊記憶體 唯一標識 猜想 類與函式一樣,被編譯器放在 段 疑問 編譯器編輯時需要將其識別符號和入口位址一一對應,是放在符號表裡索引實現的嗎?應該是,編譯器用識別符號找到入口位址,然後通過該位址到...

學習UDP筆記

udp user datagram protocol 使用者資料協議 無連線的傳輸層協議 面向事物 是一種簡單不可靠的資訊傳送服務 網路中多用於處理資料報 udp不提供資料報分組,組裝,不能對資料報進行排序 當報文傳送之後,無法得知其是否安全完整到達 udp協議的主要作用是將網路資料流量壓縮成資料報...