Linux 網(wǎng)絡(luò)硬核系列:TCP/IP 協(xié)議棧
今天給大家介紹Linux網(wǎng)絡(luò)技術(shù)中最核心的部分--TCP/IP協(xié)議棧 。
我們先看一下抽象的網(wǎng)絡(luò)協(xié)議棧模型
TCP/IP四層(參考)模型
再按分層思想看Linux內(nèi)核協(xié)議棧實(shí)現(xiàn)框架
自頂向下
Socket/ L4 TCP layer
1. socket layer
socket對(duì)象層次結(jié)構(gòu)
socket框架
- socket系統(tǒng)調(diào)用(socket,bind,listen,accept,send,recv等)
- BSD socket API
- 協(xié)議棧sock抽象適配層
- tcp/udp/icmp/raw/packet/netlink/... socket管理
- socket選項(xiàng)
2. tcp/udp layer
- TCP報(bào)文收發(fā)
- TCP Socket連接管理
- TCP協(xié)議狀態(tài)機(jī),定時(shí)器處理
- TCP滑動(dòng)窗口,擁塞控制框架
L3 IP layer
1. IP handle
- 報(bào)文分片和重組
- IP協(xié)議字段處理,IP選項(xiàng),Qos,TTL,校驗(yàn)等處理
- 報(bào)文接收(解封裝)和發(fā)送(IP協(xié)議封裝,提供給上層接口)
- 組播,ICMP協(xié)議處理等
2. netlfilter框架
5個(gè)HOOK點(diǎn):
PREROUTING:數(shù)據(jù)包進(jìn)入路由表之前
INPUT:通過(guò)路由表后目的地為本機(jī)
FORWARD:通過(guò)路由表后,目的地不為本機(jī)
OUTPUT:由本機(jī)產(chǎn)生,向外發(fā)送
POSTROUTIONG:發(fā)送到網(wǎng)卡接口之前。
每個(gè)HOOK點(diǎn)都會(huì)執(zhí)行一些函數(shù),大致分為下面幾個(gè)表:
NAT表: 用于實(shí)現(xiàn)nat功能,端口映射,地址映射等
mangle表: 用來(lái)修改報(bào)文,例如更改IP標(biāo)頭的TOS / DSCP / ECN位
filter表:用來(lái)過(guò)濾報(bào)文
raw表:用來(lái)提前標(biāo)記報(bào)文不走一些流程(比如不需要建會(huì)話)
conntrack表:連接跟蹤表,跟蹤連接會(huì)話,用來(lái)實(shí)現(xiàn)狀態(tài)防火墻,NAT功能的基礎(chǔ),可擴(kuò)展更多功能。
核心處理流程
主要功能
- 無(wú)狀態(tài)數(shù)據(jù)包過(guò)濾(IPv4和IPv6)
- 有狀態(tài)的數(shù)據(jù)包過(guò)濾(IPv4和IPv6)
- 各種網(wǎng)絡(luò)地址和端口轉(zhuǎn)換,例如NAT / NAPT(IPv4和IPv6)
- 靈活可擴(kuò)展的基礎(chǔ)架構(gòu)
- 第三方擴(kuò)展的API
3. 路由系統(tǒng)
協(xié)議棧處理位置
路由子系統(tǒng)架構(gòu)
- FIB(The Forwarding Information Base )
- 策略路由 Policies
- 路由匹配HASH,LC-tries等
主要功能
三層路由轉(zhuǎn)發(fā)
4. 鄰居系統(tǒng)
- ARP協(xié)議(IPV4),NDP協(xié)議(IPV6)
- 鄰居表新建,更新,老化機(jī)制,狀態(tài)轉(zhuǎn)化等
- API接口
主要功能
- 獲取mac地址
L2 link layer(driver)
1. Link layer
Bridge
- FDB(macforwarding database)管理
- port,bridge對(duì)象管理和報(bào)文接收,轉(zhuǎn)發(fā)
- STP,vlan協(xié)議相關(guān)處理
主要功能
- 實(shí)現(xiàn)二層mac轉(zhuǎn)發(fā)
鏈路協(xié)議
- IEEE 802協(xié)議族(STP,VLAN,以太網(wǎng),無(wú)線wifi,令牌環(huán)等)
Packt Type
- Protocol handler
- Packet_type list
主要功能
- 鏈路層報(bào)文協(xié)議分發(fā)
Traffic control
- qdisc :通過(guò)隊(duì)列將數(shù)據(jù)包緩存起來(lái),用來(lái)控制網(wǎng)絡(luò)收發(fā)的速度
- class :用來(lái)表示控制策略
- filter :用來(lái)將數(shù)據(jù)包劃分到具體的控制策略
主要功能
- 提供的流量限速、整形和策略控制機(jī)制(Qos)
2. hardware driver layer
- 網(wǎng)絡(luò)設(shè)備管理
- RPS,RFS,XPS,GRO,GSO,TSO等優(yōu)化特性
- 網(wǎng)卡軟中斷收發(fā),NAPI,DMA
- 支持各種網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)
協(xié)議棧文件系統(tǒng)
Proc FileSystem
- /proc/net
- /proc/sys/net
ipv4
core
Sys FileSystem
- /sys/class/net/ethx
主要功能
- 提供協(xié)議棧相關(guān)配置查詢和設(shè)置
最后
整體架構(gòu)圖