1 回答

TA貢獻1810條經驗 獲得超4個贊
首先,您不僅有設備上每個接口的 MTU 大小以及發送/接收的任何目的地,而且兩者之間的每個設備也有一個 MTU 大小。出于這個原因,正如其他人所提到的,您可能希望使用 MTU 普遍接受的內容,因為您可能無法控制數據路由中的每個設備。在 UDP 的情況下,MTU 實際上只是表示數據報在分片之前可以有多大。
其次,您幾乎肯定希望您的 SND/RCV 緩沖區大于 MTU。這些是內核緩沖區,當您還沒有準備好接收數據時,它們會保留數據。更大的 UDP RCV 緩沖區意味著內核會在將它們放入深淵之前為您緩沖更多的數據包。也許您對每個數據包都有一些重要的工作要做。根據比特率,您可能需要更大或更小的內核緩沖區。
最后,您使用的是 UDP。無法保證您會按順序或完全收到數據包。您和對等方之間的任何路由器都可能出于任何原因決定丟棄數據包。由于您使用的是 UDP,因此您應該為丟棄和亂序的數據包做好準備。您可能還需要某種重傳機制,這會使事情變得更加復雜。
或者,如果丟棄的數據包不可接受,您可能會考慮使用 TCP,因為您知道時間是不確定的。
如果您使用的是 linux,則可以在 /proc/sys/net 中查看當前緩沖區大小。通常內核會加倍你的要求。
此外,您可以通過觀察 /proc/net/udp 中的數據包丟失來調整緩沖區大小。如果您看到下降,您可能希望使您的 rcv 緩沖區更大,特別是在數據是突發的和處理密集型的情況下。如果您的數據以一致的速率進入并且您仍在丟棄數據包,那么您處理它們的速度不夠快。
- 1 回答
- 0 關注
- 232 瀏覽
添加回答
舉報