默认建议的接口都是ethernet的(会包含eth头部),但对于RNDIS又定义了一层44字节的封包头部需要插入了报文中(cdc-ecm没有),然后再提交给usb处理
即对于驱动来说,
cdc-ecm基本属于透传模式,tx报文直接透传给usb;rx报文透传给CPU
rndis需要增加44字节头部封装,tx报文在skb中扩展头部给usb;rx报文剥掉头部给CPU
cdc-ncm从驱动上看也是有自己的头部扩展
gobinet有些差异,gobinet可以配置2种模式(rawIPMode,即是否带有以太网头部),如果是rawIPMode,则
tx报文在skb中剥掉eth头部给usb;rx报文增加eth头部给CPU
对于剥掉头部的动作,在实现上只是指针偏移;但是增加头部的动作则会因为skb数据区域预留空间不够导致报文重新分配skb(skb_copy),这个动作比较容易降低性能美国高防vps并且可能触发报文拥塞导致丢包
从传输效率上来说:cdc-ecm和gobinet no-rawIPMode模式的效率更高(透传)