【问题标题】:Sending Jumbo Frames with Pcap使用 Pcap 发送巨型帧
【发布时间】:2014-03-04 05:01:26
【问题描述】:

我有兴趣发送Jumbo Frames,我有两个问题:

1) 在实际尝试(并收到错误)之前,我似乎不知道我是否可以发送巨型帧。似乎只有在存在某种类型的网络适配器(即千兆网卡)时才有可能。

有没有办法知道我可以通过 pcap 发送的最大允许数据包,而实际上不需要发送和失败?

2) 我找不到任何关于 pcap 如何处理如此大的数据包的文档 - 从那时起,它似乎在 1536 (+-) 内运行良好,即使使用正确的设备(即千兆卡),流量也不稳定,并且错误显示与 pcap_sendpacket() 函数相关,并且它无法发送数据(错误是通用的无法发送数据包错误,与大数据包无关或类似)。

有没有人尝试过使用 Pcap 发送这么大的数据包?

(我的环境 - 如果重要的话,是 Windows,但代码是跨平台的,我希望在 Linux 上出现相同的“问题”)

【问题讨论】:

    标签: pcap winpcap


    【解决方案1】:

    有没有办法知道我可以通过 pcap 发送的最大允许数据包,而实际上不需要发送和失败?

    不是来自 pcap。至少在某些平台上,可以确定接口 MTU,这可能指示是否支持巨型帧(如果 MTU 为 1500,则不;如果 MTU 大于 1500,则限制为 MTU + MAC 报头 14 个字节)。完成的方式取决于平台,因此在 pcap 中提供“获取最大数据包大小”调用可能很有用;但是,它目前没有。

    我找不到任何关于 pcap 如何处理如此大的数据包的文档

    pcap 通过将这些数据包交给操作系统来处理它们 :-) 之后发生的事情是操作系统代码的一个功能。

    (我的环境 - 如果重要的话,是 Windows,但代码是跨平台的,我希望在 Linux 上出现相同的“问题”)

    您的代码可能是跨平台的,但 libpcap/WinPcap 的代码虽然提供了跨平台 API,但绝对不是跨平台的;它在不同平台上的实现方式非常不同,因此您可能会或可能不会在各种操作系统上看到相同的问题。

    【讨论】:

    • 感谢您的回答,虽然它并不能真正解决我的问题 :) 它只是让我的预感更加确定。
    • 如果没有其他结果,我会将您的标记为答案
    • 在 Windows 上,应为设备查询 OID_GEN_MAXIMUM_FRAME_SIZE OID。您必须 use PacketRequest() 获取 OID 的值; WinPcap 源或 Wireshark 源中可能有代码给出了如何从驱动程序获取 OID 值的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多