中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux TCP/IP協議棧的示例分析

發布時間:2021-11-08 17:58:19 來源:億速云 閱讀:170 作者:柒染 欄目:建站服務器

這篇文章將為大家詳細講解有關Linux TCP/IP協議棧的示例分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

TCP特點

我們都非常清楚TCP協議設計的初衷,就是保證數據傳輸的快速,有序,無誤。所以特點總結如下:

  • 1、面向連接,可以用五元組來表示一條連接(遠程ip,遠程端口,本地ip,本地端口,傳輸層協議)。


  • 2、數據是全雙工的


  • 3、數據是有序的,也就是接受的數據一定是按照發送時的順序的。


  • 4、流量控制,發送方可以通過接收方滑動窗口大小來動態調整發送數據的大小。


  • 5、擁塞控制,發送方通過ACK的狀態結合擁塞算法綜合計算給出窗口大小。

了解完TCP特點字后,我們就來真正的看看數據發送到底是怎樣的過程?

數據發送

我們首先來看張圖:
Linux TCP/IP協議棧的示例分析
上圖展示的是數據流動的在硬件中的過程,下圖展示的是數據在協議棧的過程:
Linux TCP/IP協議棧的示例分析
整個過程分為三個大區域:用戶區,內核區,設備。這里所說的設備就是網卡。流程如下:

  • 1、用戶應用程序調用write系統調用


  • 2、確認文件描述符


  • 3、拷貝數據到socket buffer中


  • 4、創建tcp片段,計算checksum


  • 5、添加IP頭,執行ip路由,計算checksum


  • 6、添加以太網協議頭部,執行ARP


  • 7、告訴網卡芯片要發送數據了


  • 8、網卡從內存中獲取數據發送,發送完成中斷告訴CPU

數據接收

直接看硬件數據流圖:
Linux TCP/IP協議棧的示例分析
首先網卡把接收到的數據包寫入到它的內存之中。然后對其進行校驗,通過后發送到主機的主存之中。主存中的buffer是驅動分配好的,驅動會把分配好的buffer描述告訴網卡,如果沒有足夠的buffer接受網卡的數據包,網卡會將數據包丟棄。一旦數據包拷貝到主存完成,網卡會通過中斷告知主機OS。

之后驅動會檢查它是否能處理這個新的包。如果能處理,驅動會把數據包包裝成OS認識的結構( linux sk_buffer)并推送到上層。 鏈路層接收到幀后檢查通過的話會按照協議解幀并推送至IP層。

IP層會在解包之后根據包中包含的IP信息決定推送至上層還是轉發到其他IP。如果判斷需要推送至上層,則會解掉IP包頭并推送至TCP層。

TCP在解報之后會根據其四元組找到對應的TCB,之后通過TCP協議處理這個報文。在接收到報文后,會把報文加到接受報文,之后根據TCP的狀態發送一個ACK給對端。

當然上述過程會受到NAT等等Netfilter的作用,這里不談了,也沒深研究過。當然為了性能,大牛們方方面面也做了很多努力,比如大到RDMA、DPDK等大的軟硬件技術,小到zero-copy、checksum offload等;

現代的軟硬件TCP/IP協議棧單鏈接發送速率到1~2GiB/s完全沒有任何問題(經過實測)。如果你想探索更優秀的性能,你可以嘗試RMDA等技術,他們通過繞過內核以減少拷貝等方式優化了性能,當然可能依賴硬件。

關于Linux TCP/IP協議棧的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巨野县| 开封县| 广东省| 山阳县| 五家渠市| 论坛| 霞浦县| 太康县| 龙游县| 绥德县| 万州区| 铅山县| 饶阳县| 大埔县| 读书| 鹤山市| 阿拉善左旗| 东丽区| 仙居县| 东兴市| 年辖:市辖区| 丹凤县| 炉霍县| 海原县| 石泉县| 江孜县| 上思县| 淮安市| 灌云县| 长阳| 姚安县| 神农架林区| 化州市| 霞浦县| 化隆| 伊吾县| 绥德县| 南昌市| 临夏市| 星子县| 札达县|