我的本職工作就是網絡流量分析領域,所以網絡這塊的課程我很感興趣
物理鏈路上不能傳輸任意大小的數據包。網絡接口配置的最大傳輸單元MTU,就是規定了最大的IP包大小。網絡數據包超過MTU的大小,就會在網絡層分片,以保證分片有的IP包不大於MTU。
當一個網絡幀到達網卡後,網卡會通過DMA將網絡數據包放到環形收包隊列中,然後通過硬中斷,告訴中斷處理程序已經收到網絡包
接着網卡中斷處理程序會爲網絡幀分配skb_buff結構,並將其拷貝到skb_buff緩衝區中,然後再通過軟中斷,通知內核收到了新的網絡幀。
內核協議棧從緩衝區中取出網絡幀,並通過網絡協議棧,從下到上逐層處理這個網絡幀。
網絡層取出IP頭後,判斷網絡包下一步的走向,當網絡層確認數據包是發給本機的,就會取出上層協議的類型(比如TCP或UDP),去掉IP頭,交給傳輸層處理。
傳輸層取出TCP頭或UDP頭後,根據<源IP,源端口,目的IP,目的端口>四元組作爲標識,找到對應的socket,並將數據拷貝到socket的接收緩衝區中
最後,應用程序就可以使用socket來讀取新接收到的數據了。