大于MTU的数据包到达TUN接口

时间:2014-08-12 10:32:13

标签: python mtu tun

我使用pytun设置TUN并使用UDP将转发到其上的数据包转发到另一台计算机。让我感到困惑的是,即使我已经将TUN配置为具有141字节的MTU,我也会读取大小为145的数据包。请参阅以下代码:

from pytun import TunTapDevice
tun = TunTapDevice(name="vpn")
tun.addr = '10.8.0.1'
tun.dstaddr = '10.8.0.2'
tun.netmask = '255.255.255.0'
tun.mtu = 141
tun.up()
assert len(tun.read(1000)) <= tun.mtu # <-- fails for some packets

我已使用ifconfig验证了界面的实际MTU。

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

如果你没有添加IFF_NO_PI标志,你的帧上会得到一个4字节的标题。

从内核Documentation / networking / tuntap.txt

  

3.2帧格式:

     

如果未设置标志IFF_NO_PI,则每种帧格式为:
  标志[2字节]
  Proto [2字节]
  原始协议(IP,IPv6等)框架。

据推测,你应该能够得到你想要的东西

from pytun import TunTapDevice, IFF_TUN, IFF_NO_PI
tun = TunTapDevice(name="vpn",flags=(IFF_TUN | IFF_NO_PI))