V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
huangya
V2EX  ›  Linux

nc 命令发送文件使用 udp 可以设置包不分片吗?

  •  
  •   huangya · 357 天前 · 1167 次点击
    这是一个创建于 357 天前的主题,其中的信息可能已经有所发展或是发生改变。

    server 端命令如下: nc -u -l 5201 > something.zip

    client 端 cat /tmp/1G | nc -u server_ip 5201

    在 client 端抓包发现,包被分片了。有什么办法不分片吗?

    9 条回复    2024-01-05 12:06:58 +08:00
    pagxir
        1
    pagxir  
       357 天前 via Android
    你用 UDP 方式的 nc 分不分片没有意义吧。
    huangya
        2
    huangya  
    OP
       357 天前
    @pagxir 我是为了测试需求。我的本意是想通过 nc 发送一些 udp 包来测试。但 udp 不能分片。用 iperf 的话,因为 iperf 本身还有个 tcp 的控制连接,这样会影响我的测试。所以没用 iperf 。
    lance6716
        3
    lance6716  
       357 天前 via Android
    你的意思是 1G 一个包?这网络设备受得了吗
    huangya
        4
    huangya  
    OP
       357 天前
    @lance6716 ip 层不分片,发送多个包。就是一个个包发送出去,且小于 mtu 1500.
    huangya
        5
    huangya  
    OP
       357 天前
    @lance6716 假设 nc 是使用 sendto 函数发送的包[1],我希望它每调用一次 sendto ,里面的 len 参数是小于 1500-20 bytes ip 头-8 bytes udp 头 = 1472. 现在我看到的是每次 len 都是 10000 多。所以会在 ip 层分片。刚想到是不是这个 len 是由 cat /tmp/1G 这个重定向决定的。

    ssize_t send(int sockfd, const void *buf, size_t len, int flags);


    [1]https://linux.die.net/man/2/sendto
    huangya
        6
    huangya  
    OP
       357 天前
    @huangya 说错了,不是重定向,是管道
    lance6716
        7
    lance6716  
       357 天前 via Android
    不太懂,估计要搞清楚 len 的规则可能要看 nc 的源码(比如某个缓冲区可能是 16k ,或者来自其他系统参数)。那就不如自己写代码发包了
    dhb233
        8
    dhb233  
       357 天前   ❤️ 1
    可以用 socat
    cat /tmp/1G | socat -b 1472 stdin udp-connect:"server_ip":5201
    huangya
        9
    huangya  
    OP
       356 天前
    @dhb233 此方法可以。感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1784 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:26 · PVG 00:26 · LAX 08:26 · JFK 11:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.