色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡述Linux系統收發網絡數據包的過程

dyquk4xk2p3d ? 來源:碼農猿星球 ? 2023-05-05 10:04 ? 次閱讀

Linux 服務器收到網絡數據包,需要經過哪些處理,一步步將數據傳給應用進程的呢?應用進程發送數據包時,Linux 又是如何操作將數據包發送出去的呢?今天我們就來聊聊這個話題

在準備好接收網絡數據包之前,Linux需要做很多準備工作,例如:網絡子系統的初始化、協議棧的注冊、網卡驅動的初始化、啟動網卡等等,只有這些都準備好了之后,才能真正開始接收網絡包。

網絡協議棧

在介紹Linux收發網絡數據包之前,我們先來了解一下Linux網絡協議棧。

國際標準化組織制定了開放式系統互聯通信參考模型(Open System Interconnection Reference Model),也就是 OSI 網絡模型,該模型主要有 7 層,分別是應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層以及物理層。

由于 OSI 模型太復雜,提出的只是存在于概念和理論上的一種模型,分層太多,增加了網絡工作的復雜性,所以沒有大規模應用。 我們比較常見是TCP/IP 網絡模型,Linux 系統正是按照這套網絡模型來實現網絡協議棧的。

TCP/IP 網絡模型共有 4 層,分別是應用層、傳輸層、網絡層和網絡接口層,每一層負責的職能如下:

1、應用層 對應于OSI參考模型的高層,為用戶提供所需要的各種服務,例如:FTP、Telnet、DNS、SMTP等.

2、傳輸層 對應于OSI參考模型的傳輸層,為應用層實體提供端到端的通信功能,保證了數據包的順序傳送及數據的完整性。該層定義了兩個主要的協議:傳輸控制協議(TCP)和用戶數據報協議(UDP).

3、網絡層 對應于OSI參考模型的網絡層,主要解決主機到主機的通信問題。它所包含的協議設計數據包在整個網絡上的邏輯傳輸。注重重新賦予主機一個IP地址來完成對主機的尋址,它還負責數據包在多種網絡中的路由。該層有三個主要協議:網際協議(IP)、互聯網組管理協議(IGMP)和互聯網控制報文協議(ICMP)。

4、網絡接口層 與OSI參考模型中的物理層和數據鏈路層相對應。它負責監視數據在主機和網絡之間的交換。事實上,TCP/IP本身并未定義該層的協議,而由參與互連的各網絡使用自己的物理層和數據鏈路層協議,然后與TCP/IP的網絡接入層進行連接。地址解析協議(ARP)工作在此層,即OSI參考模型的數據鏈路層。

87070764-ea68-11ed-90ce-dac502259ad0.png

接收網絡數據包

8717db8e-ea68-11ed-90ce-dac502259ad0.png

網絡數據包到達網卡后,按照FIFO順序被存入網卡的接收隊列,網卡通過 DMA 技術,將網絡包寫入到指定的內存地址(Ring Buffer)。

Ring Buffer是在網卡驅動程序啟動時創建和初始化的,存儲的是sk_buff緩沖區的描述符(物理地址和大小等)。

當網絡包到達時,從Ring Buffer獲取指向的sk_buff描述符,通過DMA將數據寫入該地址。等sk_buff中的數據交由上層協議棧處理后,Ring Buffer中的描述更新為新分配的sk_buff。

接著網卡向 CPU 發起硬件中斷,當 CPU 收到硬件中斷請求后,根據中斷注冊表,找到注冊的中斷處理函數。

硬件中斷處理函數會做如下的事情:

1、屏蔽網卡的中斷

目的是避免CPU被頻繁中斷而無法處理其他任務,屏蔽中斷是告訴網卡已經知道內存中有數據了,下次再收到數據包直接寫內存就可以了,不要再通知 CPU 了。

2、發起軟中斷,恢復剛才屏蔽的中斷

內核中的 ksoftirqd 線程收到軟中斷后,就會調用相應軟中斷的處理函數來輪詢處理數據,即:從Ring Buffer 中獲取一個數據幀,用 sk_buff 表示,作為一個網絡包交給網絡協議棧從下到上進行逐層處理。

網絡協議棧對網絡包的處理流程如下:

1、網絡接口層

首先,網絡接口層檢查報文的合法性和正確性,如果不合法或報文校驗不正確則丟棄,否則找出上層協議的類型(IPv4還是IPv6),去掉幀頭、幀尾,然后交給上層即網絡層處理。

2、網絡層

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

3、傳輸層

傳輸層取出 TCP 頭或者 UDP 頭后,根據四元組【 源 IP、源端口、目的 IP、目的端口 】,找出對應的 Socket,并把數據拷貝到 Socket 的接收緩沖區。

4、應用層

最后,應用層程序調用 Socket 接口,將內核的 Socket 接收緩沖區的數據拷貝到應用層的緩沖區。

到這里,一個網絡包的接收過程就結束了。

發送網絡數據包

我們了解了網絡包的接收流程后,就很容易理解網絡包的發送流程了。網絡包的發送方向,正好跟接收方向相反。

首先,應用程序調用 Socket 發送網絡包的接口。這是一個系統調用,會從用戶態陷入到內核態的套接字層中。

套接字層會申請一個內核態的 sk_buff 內存,將用戶待發送的數據拷貝到 sk_buff 內存,并將其加入到Socket發送緩沖區等待網絡協議棧的處理。

由于網絡數據包從應用程序傳到內核時是原始數據,協議棧要在原始數據中加入通信約定才能保證數據到達服務端能被正確識別。網絡協議棧從 Socket 發送緩沖區中,取出數據包,然后按照 TCP/IP 棧的分層(傳輸層、網絡層、網絡接口層),從上到下逐層進行處理,各層將協議的頭信息不斷插入到數據包中。

協議棧對發送數據包的處理流程如下:

1、傳輸層

在傳輸層,會為器添加TCP頭,同時拷貝一個新的 sk_buff 副本,這是因為 sk_buff 在到達網卡發送完成的時候,會被釋放掉,而TCP 協議是支持重傳的,為確保網絡包可靠傳輸,在收到對方的 ACK 之前,這個 sk_buff 不能被刪除。

2、網絡層

在網絡層,主要會做這些工作:選取路由(確認下一跳的 IP)、填充 IP 頭、netfilter 過濾、對超過 MTU 大小的數據包進行分片。處理完這些工作后會交給網絡接口層處理。

3、網絡接口層

網絡接口層會進行物理地址尋址,以找到下一跳的 MAC 地址,填充幀頭和幀尾,將其放到發送隊列中。然后觸發軟中斷告訴網卡驅動程序:隊列中有新的網絡包需要發送。驅動程序收到通知會通過 DMA ,從發送包隊列中讀出網絡幀,并通過DMA將數據寫入網卡的FIFO發送隊列。

4、網卡設備

網卡設備從FIFO發送隊列中取出數據包,將其發送到網絡;當發送完成的時候,網卡設備會觸發一個硬中斷來釋放內存,主要是釋放 sk_buff內存和清理 RingBuffer 內存。最后,當收到這個 TCP 報文的 ACK 應答時,傳輸層就會釋放原始的 sk_buff。

至此,一個網絡包的發送流程就結束了。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209328
  • Linux系統
    +關注

    關注

    4

    文章

    593

    瀏覽量

    27392
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1353

    瀏覽量

    79055
  • 數據包
    +關注

    關注

    0

    文章

    260

    瀏覽量

    24385
  • 網絡層
    +關注

    關注

    0

    文章

    40

    瀏覽量

    10294

原文標題:簡述Linux系統收發網絡數據包的過程

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux系統收發網絡數據包的工作過程

    Linux 服務器收到網絡數據包,需要經過哪些處理,一步步將數據傳給應用進程的呢?應用進程發送數據包時,
    發表于 06-08 12:34 ?534次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統收發網絡</b><b class='flag-5'>數據包</b>的工作<b class='flag-5'>過程</b>

    Linux場景下數據包是如何在協議層傳輸的

    數據 應用層發送數據過程大致如下: 我們把上述處理過程的區域大致分為: User區域 Kernel 區域 Device區域 在user和kernel區域的任務都是由本機cpu執行,這
    的頭像 發表于 11-11 11:33 ?1114次閱讀
    <b class='flag-5'>Linux</b>場景下<b class='flag-5'>數據包</b>是如何在協議層傳輸的

    基于uC/OS-II和Libpcap的嵌入式數據包嗅探器的設

    本文應用嵌入式技術設計了一個網絡數據包嗅探器的軟硬件系統,研究了把主要用于UNIX/Linux 平臺上捕獲網絡
    發表于 06-20 10:10 ?11次下載

    以太網數據包捕獲與轉發技術

    數據包捕獲技術在網絡安全領域中應用十分廣泛,網絡入侵檢測系統、協議分析軟件、防火墻等都需要捕獲數據包。本文研究了
    發表于 07-30 11:19 ?63次下載

    網絡數據包捕獲機制研究

    網絡數據包捕獲技術,是實現入侵檢測、網絡安全審計的關鍵技術。本文改進了國外傳統的數據包捕獲函數庫Libpcap 捕獲數據包的方案。原方案在網
    發表于 09-01 10:09 ?9次下載

    Linux網絡防火墻Netfilter的數據包傳輸過濾原理

    給出了Linux網絡防火墻Netfilter在IPV4網絡環境下,Netfilter框架掛接點結構及數據包的傳輸流程,并描述了在該流程中進行數據包
    發表于 02-27 11:33 ?22次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>網絡</b>防火墻Netfilter的<b class='flag-5'>數據包</b>傳輸過濾原理

    你知道Linux網絡數據包的接收過程

    網卡需要有驅動才能工作,驅動是加載到內核中的模塊,負責銜接網卡和內核的網絡模塊,驅動在加載的時候將自己注冊進網絡模塊,當相應的網卡收到數據包時,網絡模塊會調用相應的驅動程序處理
    發表于 04-22 17:29 ?552次閱讀

    Linux網絡接收過程的監控與調優

    上一篇文章中《圖解Linux網絡接收過程》,我們梳理了在Linux系統下一個
    的頭像 發表于 11-10 14:50 ?1674次閱讀

    網絡數據包分析軟件wireshark的基本使用

    Wireshark(前稱Ethereal)是一個網絡數據包分析軟件。網絡數據包分析軟件的功能是截取網絡
    的頭像 發表于 09-29 14:48 ?3029次閱讀

    wireshark導入數據包進行分析

    linux的tcpdump命令主要用于網絡問題的調試中,通過抓取傳輸過程數據包進行分析和調試。而wireshark則是一款功能強大,使用方便的數據
    的頭像 發表于 12-27 09:37 ?2113次閱讀

    如何使用家庭總線系統兼容收發器傳輸UART數據包

    Maxim Integrated首款兼容家庭總線系統(HBS)的收發器MAX22088提高了惡劣工業環境的性能。MAX22088設計用于家庭總線系統,不限于這些網絡。本應用筆記演示了使
    的頭像 發表于 01-12 11:50 ?1835次閱讀
    如何使用家庭總線<b class='flag-5'>系統</b>兼容<b class='flag-5'>收發</b>器傳輸UART<b class='flag-5'>數據包</b>

    Linux優化實戰:如何分析網絡的問題

    所謂丟,是指在網絡數據收發過程中,由于種種原因,數據包還沒傳輸到應用程序中,就被丟棄了。
    發表于 01-13 13:57 ?969次閱讀

    Wireshark網絡數據包分析軟件簡介

    wireshark是一個免費開源的網絡數據包分析軟件,功能十分強大。可以截取各種網絡數據包,顯示網絡數據
    的頭像 發表于 04-26 09:52 ?2800次閱讀
    Wireshark<b class='flag-5'>網絡</b><b class='flag-5'>數據包</b>分析軟件簡介

    Linux如何操作將數據包發送出去

    數據包之前,Linux需要做很多準備工作,例如:網絡子系統的初始化、協議棧的注冊、網卡驅動的初始化、啟動網卡等等,只有這些都準備好了之后,才能真正開始接收網絡
    的頭像 發表于 06-17 16:00 ?1040次閱讀
    <b class='flag-5'>Linux</b>如何操作將<b class='flag-5'>數據包</b>發送出去

    請問高端網絡芯片如何處理數據包呢?

    隨著網絡芯片帶寬的持續提升,其內部數據包處理單元的工作負載也隨之增加。然而,如果處理單元無法與網絡接口的傳入速率相匹配,將無法及時處理數據包,這不僅會導致
    的頭像 發表于 04-02 16:36 ?621次閱讀
    請問高端<b class='flag-5'>網絡</b>芯片如何處理<b class='flag-5'>數據包</b>呢?
    主站蜘蛛池模板: 早乙女由依在线观看| 青柠在线观看视频在线高清| 99久久无码一区人妻A片竹菊| TIMI1TV天美传媒在线观看| 秋霞伦理高清视频在线| 国产精品色吧国产精品| 亚洲中文字幕无码一久久区| 免费看的一级毛片| 超碰在线视频 免费| 亚洲国产精品一区二区久久第| 久久亚洲网站| 波多结衣一区二区三区| 亚洲2017天堂色无码| 理论片午午伦夜理片影院| 成人性生交大片免费看中文| 亚洲国产高清福利视频| 美女靠逼漫画| 国产WW久久久久久久久久| 亚洲中文字幕永久在线| 青草在线观看视频| 国产亚洲精品久久无亚洲| 91久久精一区二区三区大全| 熟女人妻久久精品AV天堂| 九九热在线免费观看| www.黄色| 亚洲欧美中文字幕网站大全| 男助理憋尿PLAY灌尿BL出去| 国产精品青青在线麻豆| 91九色麻豆| 午夜快车神马影视| 免费观看的毛片| 国产精品亚洲第一区二区三区 | 光棍天堂在线a| 一区三区三区不卡| 日韩在线看片中文字幕不卡| 久久99亚洲热最新地址获取| 被两根巨大同时进去高H| 野花韩国高清完整版在线| 日本亚洲欧洲免费旡码| 久久99精品国产自在自线| 春药按摩人妻中文字幕|