Ubuntu 如何在一个UDP数据包中发送大块数据?

Ubuntu 如何在一个UDP数据包中发送大块数据?,ubuntu,udp,ubuntu-14.04,tcpdump,netcat,Ubuntu,Udp,Ubuntu 14.04,Tcpdump,Netcat,尝试使用Netcat发送UDP数据包 nc -u 127.0.0.1 1234 并使用tcpdump查看实际数据包 tcpdump -i any -vv -n udp dst port 1234 理论上,UDP数据包大小约为64K,但是,当我发送一条大小大于2048的消息时,Netcat会将数据拆分,并在两个单独的UDP数据包中发送。例如,如果我发送以下长字符串 01234567890123456789012345678901234567890123456789012345678901234

尝试使用Netcat发送UDP数据包

nc -u 127.0.0.1 1234
并使用tcpdump查看实际数据包

tcpdump -i any -vv -n udp dst port 1234
理论上,UDP数据包大小约为64K,但是,当我发送一条大小大于2048的消息时,Netcat会将数据拆分,并在两个单独的UDP数据包中发送。例如,如果我发送以下长字符串

012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
tcpdump将显示2个数据包:

08:13:09.171828 IP (tos 0x0, ttl 64, id 25262, offset 0, flags [DF], proto UDP (17), length 2076)
    127.0.0.1.33279 > 127.0.0.1.1234: [bad udp cksum 0x061c -> 0x7eb9!] UDP, length 2048
08:13:09.171842 IP (tos 0x0, ttl 64, id 25263, offset 0, flags [DF], proto UDP (17), length 981)
    127.0.0.1.33279 > 127.0.0.1.1234: [bad udp cksum 0x01d5 -> 0x3723!] UDP, length 953
是否可以通过Netcat或其他工具在一个UDP数据包中发送长消息?在internet上找不到Netcat的任何选项


另外,我使用的是Ubuntu14.04,问题是netcat读取特定大小的数据块,然后写入这些数据块。而且,由于它是从流(即stdin)读取的,因此无法定义消息边界之类的内容。我看不到任何使用nc更改读取大小的选项,但如果您需要一些命令行来发送更大的数据包,您可以使用Perl或类似工具,如下所示:

$ dd if=/dev/zero bs=1024 count=32 | perl -MIO::Socket::INET -e \
   'IO::Socket::INET->new(PeerAddr => q[127.0.0.1:1234], Proto => q[udp])->send(do { local $/; <STDIN> })'

$ tcpdump -i lo -n port 1234
... IP 127.0.0.1.42061 > 127.0.0.1.1234: UDP, length 32768                                                                                                                       
$dd if=/dev/zero bs=1024 count=32 | perl-MIO::Socket::INET-e\
'IO::Socket::INET->new(PeerAddr=>q[127.0.0.1:1234],Proto=>q[udp])->>send(do{local$/;}'
$tcpdump-i lo-n端口1234
... IP 127.0.0.1.42061>127.0.0.1.1234:UDP,长度32768

我想发送更多的数据,看看延迟会有多大不同,你能帮我吗?(数据包大小为1GigaBytes)@Arash:UDP数据包的最大大小为64k-UDP报头中不支持更多数据包。非常感谢您的帮助。我的意思是,除了UDP之外,有没有一种方法可以测试更大的数据块?我想计算一下当我们发送超大数据包时网络中的延迟,我不知道从哪里开始。