網路資料包發送接收全過程

來源:互聯網
上載者:User

轉載:http://blog.csdn.net/hilyoo/article/details/4455031

Linux的網路介面分為四部分:網路裝置介面,網路介面核心,網路通訊協定族,網路介面socket層。
可參考:
http://lxr.linux.no/linux+v2.6.30.4/net/
  網路裝置介面部分主要負責從物理介質接收和發送資料,實現的檔案在linu/driver/net目錄下面。

  網路介面核心部分是整個網路介面的關鍵部位,它為網路通訊協定提供統一的發送介面,屏蔽各種各樣的物理介質,同時有負責把來自下層的包向合適的協議配送。它是網路介面的中樞部份。它的主要實現檔案在linux/net/core目錄下,其中linux/net/core/dev.c為主要管理檔案。

  網路通訊協定族部分是各種具體協議實現的部份。Linux支援TCP/IP,IPX,X.25,AppleTalk等的協議,各種具體協議實現的源碼在linux/net/目錄下相應的名稱。在這裡主要討論TCP/IP(IPv4)協議,實現的源碼在linux/net/ipv4,其中linux/net/ipv4/af_inet.c是主要的管理檔案。

  網路介面Socket層為使用者提供的網路服務的編程介面,主要的源碼在linux/net/socket.c

發送:

應用程式調用系統調用,將資料發送給socket
socket檢查資料類型,調用相應的send函數
send函數檢查socket狀態、協議類型,傳給傳輸層
tcp/udp(傳輸層協議)為這些資料建立資料結構,加入協議頭部,比如連接埠號碼、檢驗和,傳給下層(網路層)
ip(網路層協議)添加ip頭,比如ip地址、檢驗和
如果資料包大小超過了mtu(最大資料包大小),則分區;ip將這些資料包傳給鏈路層
鏈路層寫到網卡隊列
網卡調用響應中斷驅動程式,發送到網路

接收:

資料包從網路到達網卡,網卡接收幀,放入網卡buffer,在向系統發送插斷要求
cpu調用相應中斷函數,這些中斷處理常式在網卡驅動中
中斷處理函數從網卡讀入記憶體,交給鏈路層
鏈路層將包放入自己的隊列,置非強制中斷標誌位
進程調度器看到了標誌位,調度相應進程
該進程將包從隊列取出,與相應協議匹配,一般為ip協議,再將包傳遞給該協議接收函數
ip層對包進行錯誤偵測,無錯,路由
路由結果,packet被轉寄或者繼續向上層傳遞
如果發往本機,進入鏈路層
鏈路層再進行錯誤偵測,尋找相應連接埠關聯socket,包被放入相應socket接收隊列

socket喚醒擁有該socket的進程,進程從系統調用read中返回,將資料拷貝到自己的buffer,返回使用者態。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.