網路傳輸一丟丟記錄 資料報大小限制

2021-09-25 13:35:24 字數 1629 閱讀 2321

今早用udp傳乙個物件序列化位元組陣列,大小達到了7000+位元組,然後udp的send就報異常;

「乙個在資料報套接字上傳送的訊息大於內部訊息緩衝區或其他一些網路限制,或該使用者用於接收資料報的緩衝區比資料報小。」

網上查了一下,說是超過udp的單包容量(一般不超過1000位元組),所以報錯。如果用udp傳大的資料報(比如傳乙個檔案)標準做法是分包傳送,比如,先把檔案分包,256乙個包,每包資料的第乙個位元組,放包序號,這樣收到後,再組裝。傳小資料,則不用分包。

udp不會自動拆包,必須在傳送前自行將資料拆分後傳送,超過1500的必須拆分,安全起見設定為1400。

另外為了udp傳輸的安全性,每個資料報的前面第乙個位元組必須用來存放當前包序號,為了序號不連續的丟包現象能及時被發現並重傳,而整個資料的大小應該在序號為0的資料報後僅跟著4位元組長度(int型別)來指明。

如果你傳超過乙太網幀(1500位元組左右)的資料,udp就不太適合,否則udp可能亂序,你自己維護序列號得煩死你

可是為什麼99%的情況下傳幾十k的資料都沒問題呢?我……

如果我沒記錯,tcp/ip詳解裡說了udp是可以自動分片的,因為udp是傳輸層,而分片是更底層的ip層做的,不是乙個層級

你的問題可能就是傳輸中丟包或亂序了

徹底解決udp的丟包和亂序,需要有個流水號記錄順序和丟失狀況,還有有超時重發機制,這個超時重發通常又是重發全部而不是乙個包,因為你不知道哪個包丟了,讓對端告訴你的話這個「通知」一樣可能丟

如果udp沒開校驗和,還需要加個crc之類的保證沒有電磁干擾造成的錯誤

最後就相當於自己實現tcp,開銷往往比直接用tcp還大

所以udp只適合不怕丟包,不怕亂序的場合

udp有限制

常見ip碎片攻擊詳解

1. 為什麼存在ip碎片 

-=-=-=-=-=-=-=-=-=-=-= 

鏈路層具有最大傳輸單元mtu這個特性,它限制了資料幀的最大長度,不同的網路型別都有一 

個上限值。乙太網的mtu是1500,你可以用 netstat -i 命令檢視這個值。如果ip層有資料報 

要傳,而且資料報的長度超過了mtu,那麼ip層就要對資料報進行分片(fragmentation)操 

作,使每一片的長度都小於或等於mtu。我們假設要傳輸乙個udp資料報,乙太網的mtu為150 

0 位元組,一般ip首部為20位元組,udp首部為8位元組,資料的淨荷(payload)部分預留是 

1500-20-8=1472位元組。如果資料部分大於1472位元組,就會出現分片現象。 

(1)控制包的大小 ip層最大65535位元組(ip包頭長度16bit)決定udp最大為65535-20-8(28為ip包頭與udp包頭大小之和),鏈路層mtu(不同介質mtu大小不同,最小的296),當ip包大於mtu會造成ip層分片,容易導致丟片,所以為了避免分片常用包的大小為256,有的為512。

(2)把檔案流按統一長度,分包傳送。每個包至少兩部分組成:順序號+檔案位元組資料。

(3)接收時,安照順序號,把收到的資料組裝成乙個檔案。

(4)第乙個包 包括:總檔案長度,資料報數;最後乙個包 加上結束標誌

(5)還可以加校驗位,資料報中的規則自己可以發揮,根據需要自己規定就行了。

以下兩篇講的很好

今早用udp傳乙個物件序列化位元組陣列,大小達到了7000+位元組,然後udp的send就報異常;

na 資料報由於isp不穩定丟包 seq ack

知識參考 總行wac管理分行ap.手機終端打不開portal頁面.在各個環節抓包 2.1思路 wac和ap分別抓包,判斷是沒發還是沒收到 2.2具體操作 wac端和ap端分別過濾出2.2.2.1 2.3根據資料報情況,有收有發,客戶端一直確認41996 wac一直索要383的包.情況1 可能收到了,...

linux 網路延時 丟包與傳輸頻寬關係測試

在網際網路中,我們會向網路運營商申請指定額度的頻寬。實際傳輸時,由於網路qos達不到要求,實際的傳輸頻寬可能達不到標稱值。本次測試在區域網環境中使用模擬工具模擬不同qos下的網路條件,得出不同qos網路下傳輸頻寬 網路的qos通常用以下指標衡量 本次測試值模擬丟包率和延時與傳輸頻寬的關係。注 本文中...

Linux網路程式設計 UDP接收資料丟包解決方案

收到資料報後進行包計數。記錄收端處理資料耗時,對比發端耗時。最大容量下耗時超過了發包耗時 2 recvfrom 接收到資料之後處理速度太慢 udp是沒有流量控制的 因此,如果socket接收快取設定過小,就會因為udp包過大或者發包速率過快而丟包 2 解決方法 重新設定udp接收緩衝區大小 udp接...