我有这样一种情况,我正在使用 pcap_sendpacket()
将数据包放在 LLC 层的线路上,同时我正在使用 pcap_dispatch()
接收数据包> 具有关联的回调函数。发送和接收发生在不同的执行线程中。
我观察到当传入数据包速率特别高时,我没有看到我的传出数据包出现在线路上(使用 wireshark)。但是,我也没有看到 pcap_sendpacket()
失败(返回 -1)。连接是否可能不是全双工的,即如果网络连接的带宽已满,则传出数据包可能会以某种方式无限期阻塞?
最佳答案
I have a situation where I am using pcap_sendpacket() to put packets on the wire at the LLC layer
那不是将数据包放在线路上的层 - 它们放在 LLC 层下方的数据链路层的线路上;在以太网上,它位于 802.3 层,而不是 802.2 层。
Is IEEE 802.2 Logical Link Control Layer (Ethernet) full duplex?
既不是全双工也不是半双工。
它也不是以太网;它可以在以太网之上运行,但它也可以在 FDDI 或 token 环或 IEEE 802.11 或……之上运行。
也许您正在考虑 IEEE 802.3,即以太网?如果是这样,则以太网有全双工和半双工两种版本。
I have observed when the incoming packet rate is particularly high, I am not seeing my outgoing packets appear on the wire (using wireshark).
以太网适配器不接收自己的数据包;如果主机发送数据包,并且该主机上的代码正在发送数据包的适配器上捕获,那是因为操作系统的网络堆栈接收正在发送的数据包并将它们作为数据包捕获机制的输入提供,而不是因为数据包由您正在捕获的网络适配器接收。
也许数据包到达得太快以至于数据包接收线程看不到它们?使用 pcap_stats()
查看是否有任何数据包被丢弃。
关于c - IEEE 802.2 逻辑链路控制层(以太网)是全双工的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55521141/