代码之家  ›  专栏  ›  技术社区  ›  Matthew Iselin

创建分段IPv4数据包的简单方法

  •  0
  • Matthew Iselin  · 技术社区  · 16 年前

    有没有软件或者简单的方法来编写代码来实现这一点?我宁愿不去修改我正在测试的主机上的MTU,只是为了让它正常工作。我的开发环境是Windows。

    2 回复  |  直到 16 年前
        1
  •  4
  •   cuble    13 年前

    我认为最简单的方法是使用ping:

        ping -l 2000 192.168.0.1
    

    对于linux,它应该是:

        ping -s 2000 192.168.0.1
    
        2
  •  0
  •   Matthew Iselin    16 年前

    我发现的大多数软件都需要在目标计算机上安装一个侦听器,这对于我正在进行的测试来说是难以置信的。

        3
  •  0
  •   Qeole    6 年前

    UDP数据报没有序列号,因此发送大量数据可能会导致数据报碎片。例如,可以在Linux上轻松使用netcat生成UDP片段:

    $ dd if=/dev/zero count=10  |  nc  192.168.0.1  1234
    

    使用tcpdump,我们可以观察到数据报id的存在、不断增加的片段偏移量和更多片段标志:

    # tcpdump -i eth0 -vvv udp and not port 53
    00:41:35.449822 IP (tos 0x0, ttl 63, id 33788, offset 0, flags [+], proto UDP (17), length 1444)
        192.168.0.2.38920 > 192.168.0.1.1234: UDP, bad length 5120 > 1416
    00:41:35.449947 IP (tos 0x0, ttl 63, id 33788, offset 1424, flags [+], proto UDP (17), length 1444)
        192.168.0.2 > 192.168.0.1: udp
    00:41:35.449976 IP (tos 0x0, ttl 63, id 33788, offset 2848, flags [+], proto UDP (17), length 1444)
        192.168.0.2 > 192.168.0.1: udp
    00:41:35.450000 IP (tos 0x0, ttl 63, id 33788, offset 4272, flags [none], proto UDP (17), length 876)
        192.168.0.2 > 192.168.0.1: udp
    

    • 这不需要目标节点上的任何侦听器。
    • localhost . 可能是因为我的 lo 接口的MTU为65536。
    • TCP数据报不会被netcat分割,序列号用于在目标节点重新组装数据块。

    我没有机会尝试Windows等效软件,但很可能它也会产生碎片。考虑到这个问题是十年前提出来的,Windows限制可能不再重要了。