【发布时间】:2015-04-02 07:41:02
【问题描述】:
我尝试执行 TCP 流量并在另一端使用 RAW 套接字捕获该数据包。
我将窗口大小设置为 50000 字节。同时以最大速率发送 TCP 流量。我在wireshark中观察到大约每12个数据包(1512字节数据包)发送一个ACK。
在原始套接字中接收数据包时。我希望有 12 个数据包,就好像我进入了 Wireshark(我相信 Wireshark 也使用原始套接字)。但是我很惊讶地看到一个带有发送数据流的数据包。
据我所知,RAW 套接字应该以有线传输的数据包形式接收,而不是作为 TCP 流。
我在下面使用原始套接字来接收端口中的数据包
rawsd = socket(PF_PACKET, SOCK_RAW, ETH_P_ALL);
这是否与 tcp_wrapper 和操作系统 tcp 配置有关。
【问题讨论】:
-
整个垃圾是什么意思? Tcp 以流而不是以数据包的形式发送和接收数据是什么让您认为您会收到 12 个数据包?另外我不认为wireshark使用原始套接字
-
对不起垃圾意味着我在整个流而不是数据包中接收它。我可以理解 TCP 在流中发送和接收数据,但 RAW 套接字将捕获特定端口上接收的数据包。 Wirkshark 使用 libpcap,而 libpcap 又使用 RAW 套接字。
-
是的,但是你会得到整个数据包,然后你必须解析头获取数据包长度正确更新头指针以使用 libpcap 之类的库访问数据我相信
-
那么单独使用wireshark 怎么可能显示实际以有线方式传输的数据包。您的意思是 RAW 套接字确实在较低层获取数据包。
-
在电线上它们是位。网络底层 软件角度的驱动不关心
标签: c linux sockets networking tcp