今天給大家介紹Linux網絡技術中最核心的部分--TCP/IP協議棧 。
我們先看一下抽象的網絡協議棧模型
再按分層思想看Linux內核協議棧實現框架
1. socket layer
socket對象層次結構
socket系統調用(socket,bind,listen,accept,send,recv等)
協議棧sock抽象適配層
tcp/udp/icmp/raw/packet/netlink/。。. socket管理
socket選項
2. tcp/udp layer
TCP報文收發
TCP Socket連接管理
TCP協議狀態機,定時器處理
TCP滑動窗口,擁塞控制框架
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地址
1. Link layer
FDB(macforwarding 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
主要功能
提供協議棧相關配置查詢和設置
編輯:jq
-
IPv6
+關注
關注
6文章
711瀏覽量
60878 -
ARP協議
+關注
關注
0文章
10瀏覽量
7021 -
NDP
+關注
關注
0文章
7瀏覽量
1532
原文標題:Linux 網絡硬核系列:TCP/IP 協議棧
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
TCP協議是什么
EtherNet/IP轉Modbus-TCP協議網關(EtherNet/IP轉Modbus-TCP)

評論