溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何分析Linux TCP/IP協(xié)議棧

發(fā)布時(shí)間:2022-01-20 17:37:11 來(lái)源:億速云 閱讀:184 作者:kk 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何分析Linux TCP/IP協(xié)議棧,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

TCP/IP是指能夠在多個(gè)不同網(wǎng)絡(luò)間實(shí)現(xiàn)信息傳輸?shù)膮f(xié)議簇。TCP/IP協(xié)議不僅僅指的是TCP 和IP兩個(gè)協(xié)議,而是指一個(gè)由FTP、SMTP、TCP、UDP、IP等協(xié)議構(gòu)成的協(xié)議簇, 只是因?yàn)樵赥CP/IP協(xié)議中TCP協(xié)議和IP協(xié)議最具代表性,所以被稱為TCP/IP協(xié)議,下面為大家詳細(xì)講解一下TCP/IP協(xié)議棧。

TCP特點(diǎn)

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

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

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

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

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

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

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

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

我們首先來(lái)看張圖:如何分析Linux TCP/IP協(xié)議棧上圖展示的是數(shù)據(jù)流動(dòng)的在硬件中的過程,下圖展示的是數(shù)據(jù)在協(xié)議棧的過程:如何分析Linux TCP/IP協(xié)議棧

整個(gè)過程分為三個(gè)大區(qū)域:用戶區(qū),內(nèi)核區(qū),設(shè)備。這里所說(shuō)的設(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)存之中。然后對(duì)其進(jìn)行校驗(yàn),通過后發(fā)送到主機(jī)的主存之中。主存中的buffer是驅(qū)動(dòng)分配好的,驅(qū)動(dòng)會(huì)把分配好的buffer描述告訴網(wǎng)卡,如果沒有足夠的buffer接受網(wǎng)卡的數(shù)據(jù)包,網(wǎng)卡會(huì)將數(shù)據(jù)包丟棄。一旦數(shù)據(jù)包拷貝到主存完成,網(wǎng)卡會(huì)通過中斷告知主機(jī)OS。

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

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

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

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

什么是Linux系統(tǒng)

Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

上述就是小編為大家分享的如何分析Linux TCP/IP協(xié)議棧了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI