今天把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是如何解析的。
