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

357 天前
 huangya

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

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

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

1168 次点击
所在节点    Linux
9 条回复
pagxir
357 天前
你用 UDP 方式的 nc 分不分片没有意义吧。
huangya
357 天前
@pagxir 我是为了测试需求。我的本意是想通过 nc 发送一些 udp 包来测试。但 udp 不能分片。用 iperf 的话,因为 iperf 本身还有个 tcp 的控制连接,这样会影响我的测试。所以没用 iperf 。
lance6716
357 天前
你的意思是 1G 一个包?这网络设备受得了吗
huangya
357 天前
@lance6716 ip 层不分片,发送多个包。就是一个个包发送出去,且小于 mtu 1500.
huangya
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
357 天前
@huangya 说错了,不是重定向,是管道
lance6716
357 天前
不太懂,估计要搞清楚 len 的规则可能要看 nc 的源码(比如某个缓冲区可能是 16k ,或者来自其他系统参数)。那就不如自己写代码发包了
dhb233
357 天前
可以用 socat
cat /tmp/1G | socat -b 1472 stdin udp-connect:"server_ip":5201
huangya
357 天前
@dhb233 此方法可以。感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX