首页 > 解决方案 > ns3 中 TCP 数据包大小的变化

问题描述

我是一个新的 ns3 用户。程序Sixth.cc生成 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 字节,谁能解释我,如果是,为什么?

标签: networkingtcpnetwork-programmingtcpdumpns-3

解决方案


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

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

因此,MSS 没有变化,但传输的段的大小确实发生了变化。可能传输了较小的 504 字节段,因为这是 TCP 在给定时间在其缓冲区中要发送的全部内容。

其他详情

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

在第 238-240 行,与设备 1 关联的 PhyRxDrop TraceSource 连接到RxDrop. RxDrop使用一个绑定参数实例化回调。bound 参数是一个 PcapFileWrapper,它可以被认为是一个封装文件的类,并且可以很容易地将数据包添加到 pcap 文件中。


推荐阅读