首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始套接字中的TCP数据包-CentOS6.6

原始套接字中的TCP数据包-CentOS6.6
EN

Stack Overflow用户
提问于 2015-02-03 07:17:55
回答 2查看 852关注 0票数 2

我尝试执行TCP流量,并在另一端使用原始套接字捕获数据包。

我将窗口大小设置为50000字节。同时以最大速率发送TCP流量。我在wireshark中观察到大约每12个包(1512字节包)就发送一个ACk。

在接收原始套接字中的数据包时。我期望12个数据包,就像我进入wireshark (我相信wireshark也使用原始套接字)。但我惊讶地看到一个数据包与发送数据流。

据我所知,原始套接字应该以数据包的形式接收,而不是以TCP流的形式传输。

我使用下面的原始套接字接收端口中的数据包。

代码语言:javascript
复制
  rawsd = socket(PF_PACKET, SOCK_RAW, ETH_P_ALL);

这是否与tcp_wrapper和OS配置有关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-09 04:50:57

这是我观察到的答案。

Linux端口具有设置“tcp-分段-卸载”的配置。

代码语言:javascript
复制
[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端口将数据包合并为完整的数据段.

代码语言:javascript
复制
   ethtool -K eth1 rx on tx on

在禁用tcp分段卸载时,eth端口不处理数据包,MTU大小的数据包在原始套接字中接收。

代码语言:javascript
复制
   ethtool -K eth1 rx off tx off

谢谢

票数 1
EN

Stack Overflow用户

发布于 2015-02-03 08:05:32

我认为wireshark在您的网络接口上使用了名为混杂模式的东西,在这种模式下,它可以获得较低层的数据包。但是,如果您使用原始套接字,您只是读取接收缓冲区数据,而不是数据包。

下面来自libpcap(wireshark后端) git存储库的代码显示,它使用原始套接字和其他选项。

代码语言:javascript
复制
pcap_activate_snoop(pcap_t *p)
{
int fd;
...
fd = socket(PF_RAW, SOCK_RAW, RAWPROTO_SNOOP);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28293344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档