我尝试执行TCP通信并在另一端使用RAW套接字捕获该数据包。
我将窗口大小设置为50000字节。同时以最大速率发送TCP流量。我在wireshark中观察到每发送12个数据包(1512字节数据包)就会发送一个ACk。
同时在原始套接字中接收数据包。我预计会收到12个数据包,好像我进入了Wireshark(我相信Wireshark也使用原始套接字)。但是我很惊讶地看到一个包发送数据流。
据我所知,RAW套接字应该以有线形式而不是TCP流形式接收的数据包形式接收。
我在下面使用原始套接字在端口中接收数据包
rawsd = socket(PF_PACKET, SOCK_RAW, ETH_P_ALL);
无论如何,这是否与tcp_wrapper和OS tcp配置有关。
这是我观察到的答案。
Linux Eth端口具有配置来设置“ tcp-segmentation-offload”。
[root@Kernel317 home]# ethtool -k eth0
Features for eth0:
rx-checksumming: off
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp6-segmentation: off [fixed]
启用tcp-segmentation-offload时,无论配置的MTU如何,数据包都将在eth端口中合并为完整的数据段。
ethtool -K eth1 rx on tx on
禁用tcp-segmentation-offload时,在eth端口中不处理数据包,并且在RAW套接字中接收MTU大小的数据包。
ethtool -K eth1 rx off tx off
谢谢
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句