我尝试执行TCP流量,并在另一端使用原始套接字捕获数据包。
我将窗口大小设置为50000字节。同时以最大速率发送TCP流量。我在wireshark中观察到大约每12个包(1512字节包)就发送一个ACk。
在接收原始套接字中的数据包时。我期望12个数据包,就像我进入wireshark (我相信wireshark也使用原始套接字)。但我惊讶地看到一个数据包与发送数据流。
据我所知,原始套接字应该以数据包的形式接收,而不是以TCP流的形式传输。
我使用下面的原始套接字接收端口中的数据包。
rawsd = socket(PF_PACKET, SOCK_RAW, ETH_P_ALL);这是否与tcp_wrapper和OS配置有关。
发布于 2015-02-09 04:50:57
这是我观察到的答案。
Linux端口具有设置“tcp-分段-卸载”的配置。
[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分段卸载时,无论MTU配置如何,在eth端口将数据包合并为完整的数据段.
ethtool -K eth1 rx on tx on在禁用tcp分段卸载时,eth端口不处理数据包,MTU大小的数据包在原始套接字中接收。
ethtool -K eth1 rx off tx off谢谢
发布于 2015-02-03 08:05:32
我认为wireshark在您的网络接口上使用了名为混杂模式的东西,在这种模式下,它可以获得较低层的数据包。但是,如果您使用原始套接字,您只是读取接收缓冲区数据,而不是数据包。
下面来自libpcap(wireshark后端) git存储库的代码显示,它使用原始套接字和其他选项。
pcap_activate_snoop(pcap_t *p)
{
int fd;
...
fd = socket(PF_RAW, SOCK_RAW, RAWPROTO_SNOOP);https://stackoverflow.com/questions/28293344
复制相似问题