Linux TCP/IP協議棧全過程
可以毫不誇張的說現如今的網際網路是基於TCP/IP構建起來的網路。弄懂協議棧的原理,無論對除錯網路IO效能還是解決網路問題都是有很大幫助的。本片文章就帶領大家來看看核心是如何控制網路資料流的。 |
我們都非常清楚TCP協議設計的初衷,就是保證資料傳輸的快速,有序,無誤。所以特點總結如下:
- 1、面向連線,可以用五元組來表示一條連線(遠端ip,遠端埠,本地ip,本地埠,傳輸層協議)。
- 2、資料是全雙工的
- 3、資料是有序的,也就是接受的資料一定是按照傳送時的順序的。
- 4、流量控制,傳送方可以通過接收方滑動視窗大小來動態調整傳送資料的大小。
- 5、擁塞控制,傳送方通過ACK的狀態結合擁塞演算法綜合計算給出視窗大小。
瞭解完TCP特點字後,我們就來真正的看看資料傳送到底是怎樣的過程?
我們首先來看張圖:
上圖展示的是資料流動的在硬體中的過程,下圖展示的是資料在協議棧的過程:
整個過程分為三個大區域:使用者區,核心區,裝置。這裡所說的裝置就是網路卡。流程如下:
- 1、使用者應用程式呼叫write系統呼叫
- 2、確認檔案描述符
- 3、拷貝資料到socket buffer中
- 4、建立tcp片段,計算checksum
- 5、新增IP頭,執行ip路由,計算checksum
- 6、新增乙太網協議頭部,執行ARP
- 7、告訴網路卡晶片要傳送資料了
- 8、網路卡從記憶體中獲取資料傳送,傳送完成中斷告訴CPU
直接看硬體資料流圖:
首先網路卡把接收到的資料包寫入到它的記憶體之中。然後對其進行校驗,通過後傳送到主機的主存之中。主存中的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等技術,他們通過繞過核心以減少拷貝等方式優化了效能,當然可能依賴硬體。
原文地址: https://www.linuxprobe.com/linux-tcp-ip-protocol-stack.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2661048/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Linux中,TCP/IP協議棧的工作原理是什麼?LinuxTCP協議
- tcp/ip協議TCP協議
- TCP/IP協議棧在Linux核心中的執行時序分析TCP協議Linux
- 系列TCP/IP協議-TCP協議概述(011)TCP協議
- TCP/IP、UDP/IP協議TCPUDP協議
- TCP/IP協議族TCP協議
- TCP/IP 協議族TCP協議
- TCP/IP五層協議TCP協議
- 如何理解TCP/IP協議?TCP協議
- 計算機網路學習筆記(10) TCP/IP協議棧 之TELNET協議計算機網路筆記TCP協議
- 系列TCP/IP協議-UDP(009)TCP協議UDP
- TCP/IP協議 - 網路層TCP協議
- tcp/ip協議和opc協議對比詳解TCP協議
- Java中的TCP/IP協議和IP地址JavaTCP協議
- 在Linux中,如何理解Tcp/ip協議三次握手?LinuxTCP協議
- 系列TCP/IP協議-ARP與RARPTCP協議
- 系列之TCP/IP協議-概述(001)TCP協議
- TCP/IP協議的SYN攻擊TCP協議
- TCP/IP協議族基本概念TCP協議
- 網路基礎和 TCP、IP 協議TCP協議
- 《TCP/IP詳解 卷1:協議》第3章 IP:網際協議TCP協議
- TCP/IP五層模型-傳輸層-TCP協議TCP模型協議
- 系列TCP/IP協議-靜態IP選路(007)TCP協議
- TCP/IP網路協議棧:乙太網資料包結構、802.3、MTUTCP協議
- TCP/IP 協議相關的問題TCP協議
- 「多圖警告」重學 TCP/IP 協議TCP協議
- 帶你瞭解TCP/IP協議族TCP協議
- 大型站點TCP/IP協議優化TCP協議優化
- TCP/IP協議常見漏洞型別TCP協議型別
- tcp/ip協議(1)三握四揮TCP協議
- TCP/TP協議棧(逐漸更新版)TCP協議
- TCP/IP的通訊過程-VeCloudTCPCloud
- Linux 高效能伺服器程式設計-TCP/IP 協議族Linux伺服器程式設計TCP協議
- TCP/IP協議族——高效能Linux伺服器程式設計TCP協議Linux伺服器程式設計
- 系列TCP/IP協議-TCP建立與終止連線(012)TCP協議
- TCP/IP協議及配置、檔案系統TCP協議
- TCP/IP 協議及網路分層模型TCP協議模型
- 原創 | Ripple20:Treck TCP/IP協議棧漏洞分析與驗證(附視訊)TCP協議