真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

LinuxTCP/IP協(xié)議棧的示例分析-創(chuàng)新互聯(lián)

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

站在用戶的角度思考問題,與客戶深入溝通,找到碧江網(wǎng)站設(shè)計(jì)與碧江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋碧江地區(qū)。

TCP特點(diǎn)

我們都非常清楚TCP協(xié)議設(shè)計(jì)的初衷,就是保證數(shù)據(jù)傳輸?shù)目焖伲行?,無誤。所以特點(diǎn)總結(jié)如下:

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


  • 2、數(shù)據(jù)是全雙工的


  • 3、數(shù)據(jù)是有序的,也就是接受的數(shù)據(jù)一定是按照發(fā)送時(shí)的順序的。


  • 4、流量控制,發(fā)送方可以通過接收方滑動窗口大小來動態(tài)調(diào)整發(fā)送數(shù)據(jù)的大小。


  • 5、擁塞控制,發(fā)送方通過ACK的狀態(tài)結(jié)合擁塞算法綜合計(jì)算給出窗口大小。

了解完TCP特點(diǎn)字后,我們就來真正的看看數(shù)據(jù)發(fā)送到底是怎樣的過程?

數(shù)據(jù)發(fā)送

我們首先來看張圖:
Linux TCP/IP協(xié)議棧的示例分析
上圖展示的是數(shù)據(jù)流動的在硬件中的過程,下圖展示的是數(shù)據(jù)在協(xié)議棧的過程:
Linux TCP/IP協(xié)議棧的示例分析
整個過程分為三個大區(qū)域:用戶區(qū),內(nèi)核區(qū),設(shè)備。這里所說的設(shè)備就是網(wǎng)卡。流程如下:

  • 1、用戶應(yīng)用程序調(diào)用write系統(tǒng)調(diào)用


  • 2、確認(rèn)文件描述符


  • 3、拷貝數(shù)據(jù)到socket buffer中


  • 4、創(chuàng)建tcp片段,計(jì)算checksum


  • 5、添加IP頭,執(zhí)行ip路由,計(jì)算checksum


  • 6、添加以太網(wǎng)協(xié)議頭部,執(zhí)行ARP


  • 7、告訴網(wǎng)卡芯片要發(fā)送數(shù)據(jù)了


  • 8、網(wǎng)卡從內(nèi)存中獲取數(shù)據(jù)發(fā)送,發(fā)送完成中斷告訴CPU

數(shù)據(jù)接收

直接看硬件數(shù)據(jù)流圖:
Linux TCP/IP協(xié)議棧的示例分析
首先網(wǎng)卡把接收到的數(shù)據(jù)包寫入到它的內(nèi)存之中。然后對其進(jìn)行校驗(yàn),通過后發(fā)送到主機(jī)的主存之中。主存中的buffer是驅(qū)動分配好的,驅(qū)動會把分配好的buffer描述告訴網(wǎng)卡,如果沒有足夠的buffer接受網(wǎng)卡的數(shù)據(jù)包,網(wǎng)卡會將數(shù)據(jù)包丟棄。一旦數(shù)據(jù)包拷貝到主存完成,網(wǎng)卡會通過中斷告知主機(jī)OS。

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

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

TCP在解報(bào)之后會根據(jù)其四元組找到對應(yīng)的TCB,之后通過TCP協(xié)議處理這個報(bào)文。在接收到報(bào)文后,會把報(bào)文加到接受報(bào)文,之后根據(jù)TCP的狀態(tài)發(fā)送一個ACK給對端。

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

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

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


當(dāng)前文章:LinuxTCP/IP協(xié)議棧的示例分析-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/gjohh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部