極客時間-linux性能優化 33 關於 Linux 網絡你必須知道這些(上)

我的本職工作就是網絡流量分析領域,所以網絡這塊的課程我很感興趣

物理鏈路上不能傳輸任意大小的數據包。網絡接口配置的最大傳輸單元MTU,就是規定了最大的IP包大小。網絡數據包超過MTU的大小,就會在網絡層分片,以保證分片有的IP包不大於MTU。

 

當一個網絡幀到達網卡後,網卡會通過DMA將網絡數據包放到環形收包隊列中,然後通過硬中斷,告訴中斷處理程序已經收到網絡包

 

接着網卡中斷處理程序會爲網絡幀分配skb_buff結構,並將其拷貝到skb_buff緩衝區中,然後再通過軟中斷,通知內核收到了新的網絡幀。

 

內核協議棧從緩衝區中取出網絡幀,並通過網絡協議棧,從下到上逐層處理這個網絡幀。

 

網絡層取出IP頭後,判斷網絡包下一步的走向,當網絡層確認數據包是發給本機的,就會取出上層協議的類型(比如TCP或UDP),去掉IP頭,交給傳輸層處理。

 

傳輸層取出TCP頭或UDP頭後,根據<源IP,源端口,目的IP,目的端口>四元組作爲標識,找到對應的socket,並將數據拷貝到socket的接收緩衝區中

 

最後,應用程序就可以使用socket來讀取新接收到的數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章