我遇到的一种情况是,我正在使用pcap_sendpacket()
将数据包放在LLC层的线路上,而与此同时我正在使用pcap_dispatch()
并具有关联的回调函数来接收数据包。发送和接收发生在不同的执行线程中。
我观察到传入数据包的速率特别高时,我看不到我的传出数据包出现在电线上(使用wireshark)。但是,我也没有看到pcap_sendpacket()
失败(返回-1)。连接是否可能不是全双工的,即如果网络连接的带宽已满,则传出数据包可能会以某种方式无限期地阻塞?
答案 0 :(得分:1)
我遇到一种情况,我正在使用pcap_sendpacket()将数据包放在LLC层的线路上
这不是将数据包放在线路上的层-它们是在LLC层下面的数据链路层的数据包上放入的;在以太网上,它位于802.3层,而不是802.2层。
IEEE 802.2逻辑链路控制层(以太网)是全双工吗?
它既不是全双工也不是半双工。
它也不是以太网;它可以在以太网之上运行,但也可以在FDDI或令牌环或IEEE 802.11之上运行。...
也许您正在考虑IEEE 802.3,这是以太网?如果是这样,则有全双工和半双工版本的以太网。
我观察到传入数据包速率特别高时,我看不到我的传出数据包出现在电线上(使用wireshark)。
以太网适配器不接收自己的数据包;如果主机发送了一个数据包,并且该主机上的代码正在发送数据包的适配器上捕获,那是因为OS的网络堆栈接受了发送的数据包并将其作为输入提供给数据包捕获机制,而不是因为该数据包被捕获的网络适配器接收到。
也许数据包到达速度太快,以至于数据包接收线程看不到它们?使用pcap_stats()
查看是否有任何数据包被丢弃。