Networking ns3中TCP数据包大小的更改

Networking ns3中TCP数据包大小的更改,networking,tcp,network-programming,tcpdump,ns-3,Networking,Tcp,Network Programming,Tcpdump,Ns 3,我是一个新的ns3用户。该程序生成一个pcap文件 1.136956 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 17177:17681, ack 1, win 32768, options [TS val 1133 ecr 1127,eol], length 504: HTTP 1.403196 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 33280:33784, ack

我是一个新的ns3用户。该程序生成一个pcap文件

1.136956 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 17177:17681, ack 1, win 32768, options [TS val 1133 ecr 1127,eol], length 504: HTTP
1.403196 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 33280:33784, ack 1, win 32768, options [TS val 1399 ecr 1394,eol], length 504: HTTP
1.436476 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 37440:37944, ack 1, win 32768, options [TS val 1432 ecr 1428,eol], length 504: HTTP
2.533823 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 174184:174720, ack 1, win 32768, options [TS val 2530 ecr 2525,eol], length 536: HTTP
2.543036 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 175760:176264, ack 1, win 32768, options [TS val 2539 ecr 2534,eol], length 504: HTTP
2.608703 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 183544:184080, ack 1, win 32768, options [TS val 2605 ecr 2600,eol], length 536: HTTP
5.804476 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 583440:583944, ack 1, win 32768, options [TS val 5800 ecr 5796,eol], length 504: HTTP
6.453436 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 664560:665064, ack 1, win 32768, options [TS val 6449 ecr 6445,eol], length 504: HTTP
7.367743 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 778424:778960, ack 1, win 32768, options [TS val 7364 ecr 7360,eol], length 536: HTTP
7.393596 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 782080:782584, ack 1, win 32768, options [TS val 7389 ecr 7386,eol], length 504: HTTP
8.158143 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 877224:877760, ack 1, win 32768, options [TS val 8155 ecr 8149,eol], length 536: HTTP

谁能解释一下MSS是否从536字节变为504字节,如果是,原因是什么?

在sixth.cc中生成的pcap文件只显示已丢弃的数据包。默认的MSS是536字节,这就是为什么丢弃的最大数据包具有该大小。碰巧TCP也决定传输504字节的数据段,相应的数据包被接收器丢弃。后来,536字节段也发生了同样的情况

当然,下一个问题是:为什么TCP决定在一种情况下传输504字节段,在另一种情况下传输536字节段?我还没有调试程序来验证这一点,但我的猜测是TCP的缓冲区只有504字节要发送,所以它只发送了这么多。MSS是最大段大小(而不是最小值),因此TCP可以发送小于536字节的数据包。您可以尝试通过以下两种方法来验证这一点:

  • 在TcpSocketBase中设置断点,或
  • 用于TcpSocketBase,并查找有关正在调用的Nagle算法的消息
因此,MSS没有改变,但传输的段的大小确实改变了。较小的504字节段可能被传输,因为这是TCP在给定时间在其缓冲区中要发送的全部数据

其他详情 在第208-210行,RateErrorModel被实例化,并与设备1相关联。此模型将在接收器网络设备上随机丢弃数据包。因此,在这个模拟中,数据包可能由于缓冲区溢出而丢弃,或者由于RateErrorModel而随机丢弃


在第238-240行,与设备1相关联的PhyRxDrop TraceSource连接到
RxDrop
。对
RxDrop
的回调用一个绑定参数实例化。绑定参数是一个PcapFileWrapper,可以将其视为封装文件的类,使向pcap文件添加数据包变得容易。

在sixth.cc中生成的pcap文件仅显示已丢弃的数据包。默认的MSS是536字节,这就是为什么丢弃的最大数据包具有该大小。碰巧TCP也决定传输504字节的数据段,相应的数据包被接收器丢弃。后来,536字节段也发生了同样的情况

当然,下一个问题是:为什么TCP决定在一种情况下传输504字节段,在另一种情况下传输536字节段?我还没有调试程序来验证这一点,但我的猜测是TCP的缓冲区只有504字节要发送,所以它只发送了这么多。MSS是最大段大小(而不是最小值),因此TCP可以发送小于536字节的数据包。您可以尝试通过以下两种方法来验证这一点:

  • 在TcpSocketBase中设置断点,或
  • 用于TcpSocketBase,并查找有关正在调用的Nagle算法的消息
因此,MSS没有改变,但传输的段的大小确实改变了。较小的504字节段可能被传输,因为这是TCP在给定时间在其缓冲区中要发送的全部数据

其他详情 在第208-210行,RateErrorModel被实例化,并与设备1相关联。此模型将在接收器网络设备上随机丢弃数据包。因此,在这个模拟中,数据包可能由于缓冲区溢出而丢弃,或者由于RateErrorModel而随机丢弃

在第238-240行,与设备1相关联的PhyRxDrop TraceSource连接到
RxDrop
。对
RxDrop
的回调用一个绑定参数实例化。绑定参数是一个PcapFileWrapper,可以将其视为一个封装文件的类,使向pcap文件添加数据包变得简单