Linux Kernel TCP/IP Stack|Linux网络硬核系列
大家好,我是Alex,今天給大家介紹Linux網絡技術中最核心的部分--TCP/IP協議棧?。? ? ? ?
我們先看一下抽象的網絡協議棧模型
TCP/IP四層(參考)模型
再按分層思想看Linux內核協議棧實現框架
自頂向下
Socket/ L4 TCP layer
1. socket layer
socket對象層次結構
socket框架
socket系統調用(socket,bind,listen,accept,send,recv等)
BSD socket API
協議棧sock抽象適配層
tcp/udp/icmp/raw/packet/netlink/... socket管理
socket選項
2. tcp/udp layer
TCP報文收發
TCP Socket連接管理
TCP協議狀態機,定時器處理
TCP滑動窗口,擁塞控制框架
L3 IP layer
1. IP handle
報文分片和重組
IP協議字段處理,IP選項,Qos,TTL,校驗等處理
報文接收(解封裝)和發送(IP協議封裝,提供給上層接口)
組播,ICMP協議處理等
2. netlfilter框架
5個HOOK點:
PREROUTING:數據包進入路由表之前
INPUT:通過路由表后目的地為本機
FORWARD:通過路由表后,目的地不為本機
OUTPUT:由本機產生,向外發送
POSTROUTIONG:發送到網卡接口之前。
每個HOOK點都會執行一些函數,大致分為下面幾個表:
NAT表: 用于實現nat功能,端口映射,地址映射等
mangle表: 用來修改報文,例如更改IP標頭的TOS / DSCP / ECN位
filter表:用來過濾報文
raw表:用來提前標記報文不走一些流程(比如不需要建會話)
conntrack表:連接跟蹤表,跟蹤連接會話,用來實現狀態防火墻,NAT功能的基礎,可擴展更多功能。
核心處理流程
主要功能
無狀態數據包過濾(IPv4和IPv6)
有狀態的數據包過濾(IPv4和IPv6)
各種網絡地址和端口轉換,例如NAT / NAPT(IPv4和IPv6)
靈活可擴展的基礎架構
第三方擴展的API
3. 路由系統
協議棧處理位置
路由子系統架構
FIB(The Forwarding Information Base?)
策略路由 Policies
路由匹配HASH,LC-tries等
主要功能
三層路由轉發
4. 鄰居系統
ARP協議(IPV4),NDP協議(IPV6)
鄰居表新建,更新,老化機制,狀態轉化等
API接口
主要功能
獲取mac地址
L2 link layer(driver)
1. Link layer
Bridge
FDB(mac forwarding database)管理
port,bridge對象管理和報文接收,轉發
STP,vlan協議相關處理
主要功能
實現二層mac轉發
鏈路協議
IEEE 802協議族(STP,VLAN,以太網,無線wifi,令牌環等)
Packt Type
Protocol handler
Packet_type list
主要功能
鏈路層報文協議分發
Traffic control
qdisc :通過隊列將數據包緩存起來,用來控制網絡收發的速度
class :用來表示控制策略
filter :用來將數據包劃分到具體的控制策略
???主要功能
提供的流量限速、整形和策略控制機制(Qos)
2. hardware driver layer
網絡設備管理
RPS,RFS,XPS,GRO,GSO,TSO等優化特性
網卡軟中斷收發,NAPI,DMA
支持各種網卡驅動實現
協議棧文件系統
Proc FileSystem
/proc/net
/proc/sys/net
? ipv4
? ? ? ? ? core
Sys FileSystem
/sys/class/net/ethx
主要功能
提供協議棧相關配置查詢和設置
最后
整體架構圖
如果想了解更多細節,請閱讀Linux內核源碼或者參考下面兩本經典著作:
《The Linux Networking Architecture》
《Understanding Linux Network Internals》
公眾號回復"協議棧"可獲取經典PDF
我們下次見!
看完記得一鍵三連在看,轉發,點贊
是對文章最大的贊賞,感謝
推薦閱讀
計算機網絡硬核指南|網絡設計核心思想
網絡排障全景指南手冊v1.0精簡版pdf?
一個奇葩的網絡問題
總結
以上是生活随笔為你收集整理的Linux Kernel TCP/IP Stack|Linux网络硬核系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 多线程网络模型全面揭秘|网络
- 下一篇: Linux网络新技术基石 |eBPF