Networking

如何使用 9000 MTU 設置 veth 以模擬在同一主機上發送和接收大型 UDP 多播數據包?

  • June 23, 2021

發送方需要將大數據包傳輸到接收方(在同一主機上,MTU 為 1500),根據我的閱讀,我認為這可以使用 veth 和 9000 MTU 來模擬。但我無法弄清楚到底該怎麼做——網際網路上的大多數 veth 教程/文章都提到了網路命名空間,我不確定是否需要創建一個網路命名空間來實現這一點。任何指示/建議都會有所幫助,謝謝!

在 Linux 上,此設置不是特定於veth的,因此沒有記錄在veth中,而是在通用ip link命令中:

ip link add [ link DEVICE ] [ name ] NAME
[ txqueuelen PACKETS ]
[ address LLADDR ] [ broadcast LLADDR ]
[ mtu MTU ] [ index IDX ] 

...

ip link set { DEVICE | group GROUP } 
...
[ mtu MTU ] 

...

您可以使用ip link set ... mtu 9000

ip link set veth0 mtu 9000

一些介面可能會回答:Error: mtu greater than device maximum.因為硬體限制。虛擬veth介面不會出現這種情況,它的最大 MTU 是 65535:

# ip -details link show veth0
68: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 9000 qdisc noop state DOWN mode DEFAULT group default qlen 1000
   link/ether 2a:93:f8:8e:bc:b6 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535 
   veth addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 

與相關部分:

minmtu 68 maxmtu 65535 

請注意,要使此功能有用,您需要另一個名稱空間中的另一端。例如這裡 veth0 的另一邊veth1

ip netns add experiment
ip link set veth1 peer netns experiment
ip -n experiment link set veth1 mtu 9000

等(啟動介面,添加地址,路由……)

對於多播部分,您可能對此感興趣:

使用 Socat 進行 IP 多播

引用自:https://unix.stackexchange.com/questions/655403