1

我有一种情况,我在使用关联的回调函数pcap_sendpacket()接收数据包的同时,将数据包放在 LLC 层的线路上。pcap_dispatch()发送和接收发生在不同的执行线程中。

我观察到当传入数据包速率特别高时,我没有看到我的传出数据包出现在网络上(使用wireshark)。但是,我也没有看到pcap_sendpacket()失败(返回-1)。连接是否有可能不是全双工的,即如果网络连接的带宽已满,那么传出的数据包可能会以某种方式无限期地阻塞?

4

1 回答 1

1

我有一种情况,我正在使用 pcap_sendpacket() 将数据包放在 LLC 层的线路上

这不是将数据包放在线路上的层——它们放在数据链路层的线路上,在 LLC 层之下;在以太网上,它位于 802.3 层,而不是 802.2 层。

IEEE 802.2 逻辑链路控制层(以太网)是全双工的吗?

它既不是全双工也不是半双工。

它也不是以太网。它可以运行在以太网之上,但它也可以运行在 FDDI 或令牌环或 IEEE 802.11 或....

也许您正在考虑 IEEE 802.3,即以太网?如果是这样,则以太网有全双工和半双工版本。

我观察到当传入数据包速率特别高时,我没有看到我的传出数据包出现在网络上(使用wireshark)。

以太网适配器不接收自己的数据包;如果主机发送数据包,并且该主机上的代码正在发送数据包的适配器上捕获,那是因为操作系统的网络堆栈获取正在发送的数据包并将它们作为输入提供给数据包捕获机制,而不是因为数据包由您正在捕获的网络适配器接收。

也许数据包到达太快以至于数据包接收线程无法看到它们?用于pcap_stats()查看是否有任何数据包被丢弃。

于 2019-04-07T08:26:05.363 回答