我一直在尝试理解gianfar linux以太网驱动程序的代码,并且很难理解fragemented页面。我知道最大传输大小是9600字节,但这包括片段吗?
是否可以发送和接收大小较大的传输(例如14000字节),如果它们被分成多个片段?
提前谢谢
答案 0 :(得分:0)
9600
是jumbo frame maximum size。 maximum MTU(“巨型MTU”)大小为9600 - 14 = 9586
个字节。另外,如果我没记错的话,MTU从不包含4字节FCS。
因此,9586
必须是最大的以太网“有效载荷”大小,可以放在线上。这是单个以太网帧的限制。因此,如果您有一个更大的块数据(“传输”),您可能能够“切片”它并从中生成多个以太网帧(准确地说,多个独立的{{1} } -s),每个符合MTU大小。因此,在这种情况下,您将有多个独立的以太网帧交给网络驱动程序。这些帧之间的互连只能在IP报头级别上检测到,即,如果您查看第一帧的IP报头,您将能够看到“更多碎片”标志,指示下一帧包含一个IP数据包,即原始(大)块数据的下一个片段。但从驾驶员的角度来看,这些框架应保持独立。
但是,如果您的意思是“skb
片段”而不是“IP片段”,那么将14000字节的帧放入单个skb
的多个片段(“数据片段”)中可能没有帮助关于MTU(比如说,你已经在界面上配置了巨型MTU)。因为这些片段只是较小的连续内存块,包含相同以太网帧的不同部分。并且驱动程序只是makes 多个描述符指向这些内存块。硬件将选择它们以发送单个帧。如果HW发现总帧长度大于最大MTU,则可能拒绝传输。在这种情况下,确切的行为是单独谈话的主题。