Perl RawIP最大数据大小

时间:2017-10-25 14:46:09

标签: perl networking

我正在尝试使用Perl中的Net :: RawIP通过TCP发送一些数据。不幸的是我收到了错误

  

sendto()位于/usr/lib/x86_64-linus-gnu/perl5/5.24/Net/RawIP.pm第630行

如果TCP数据字段大于大约1470个字符:

  my $n = Net::RawIP->new({
                        ip  => {
                                saddr => '[src]',
                                daddr => '[dst]',
                               },
                        tcp => {
                                source => 7777,
                                dest   => 7777,
                                data => "x" x 150  
                          }
                       });
  $n->send;

有效,但

  my $n = Net::RawIP->new({
                        ip  => {
                                saddr => '[src]',
                                daddr => '[dst]',
                               },
                        tcp => {
                                source => 7777,
                                dest   => 7777,
                                data => "x" x 1500  # size changed here
                          } 
                       });
  $n->send;

崩溃。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:2)

您正在构建too large的数据包,因此sendto返回错误EMSGSIZE

  

EMSGSIZE
  套接字类型要求以原子方式发送消息,并且要发送的消息大小使这变得不可能。

它开始在1500左右失败并不神秘;这是以太网帧可以承载的最大值。

您需要使用多个数据包或多个数据包碎片。