server 端命令如下: nc -u -l 5201 > something.zip
client 端 cat /tmp/1G | nc -u server_ip 5201
在 client 端抓包发现,包被分片了。有什么办法不分片吗?
1
pagxir 357 天前 via Android
你用 UDP 方式的 nc 分不分片没有意义吧。
|
2
huangya OP @pagxir 我是为了测试需求。我的本意是想通过 nc 发送一些 udp 包来测试。但 udp 不能分片。用 iperf 的话,因为 iperf 本身还有个 tcp 的控制连接,这样会影响我的测试。所以没用 iperf 。
|
3
lance6716 357 天前 via Android
你的意思是 1G 一个包?这网络设备受得了吗
|
5
huangya OP @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 |
7
lance6716 357 天前 via Android
不太懂,估计要搞清楚 len 的规则可能要看 nc 的源码(比如某个缓冲区可能是 16k ,或者来自其他系统参数)。那就不如自己写代码发包了
|
8
dhb233 357 天前 1
可以用 socat
cat /tmp/1G | socat -b 1472 stdin udp-connect:"server_ip":5201 |