聊一聊RNDIS

今天把RNDIS的包抓了。

總的來說,感覺和CDC的區(qū)別不是很大。

枚舉之后就是大量的這種send - response - get的流程。

然后就是在Data EP上跑以太包。

和普通CDC的區(qū)別在于,普通CDC的data EP上傳的是應用數(shù)據(jù), RNDIS的data EP上傳的是以太包。

有個有趣的問題,如何知道一個以太包的開始和結(jié)束?

spec給出的解決方案是:

USB BULK 一次最大傳512字節(jié)。

如果以太包小于512,那收下來的就是一個完整的以太包。

如果以太包大于512,就發(fā)送512*N + M, M<512。

這就是說,從開始就收512字節(jié)的包,一直到收到小于512的BULK包為止。

如果以太包是512的倍數(shù),spec要求必須要在最后發(fā)一個長度為0的包。

這樣我們就可以從BULK包(USB信道)中恢復出一個完整的以太包了。

下圖解析了ARP是如何over USB的,以及RNDIS是如何解析的。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容