今天给大家介绍Linux网络技术中最核心的部分--TCP/IP协议栈 。 我们先看一下抽象的网络协议栈模型 TCP/IP四层(参考)模型 再按分层思想看Linux内核协议栈实现框架 自顶向下 Socket/ L4 TCP layer 1. socket layer socket对象层次结构 socket框架
2. tcp/udp layer
L3 IP layer 1. IP handle
2. netlfilter框架 5个HOOK点: PREROUTING:数据包进入路由表之前 INPUT:通过路由表后目的地为本机 FORWARD:通过路由表后,目的地不为本机 OUTPUT:由本机产生,向外发送 POSTROUTIONG:发送到网卡接口之前。 每个HOOK点都会执行一些函数,大致分为下面几个表: NAT表: 用于实现nat功能,端口映射,地址映射等 mangle表: 用来修改报文,例如更改IP标头的TOS / DSCP / ECN位 filter表:用来过滤报文 raw表:用来提前标记报文不走一些流程(比如不需要建会话) conntrack表:连接跟踪表,跟踪连接会话,用来实现状态防火墙,NAT功能的基础,可扩展更多功能。 核心处理流程 主要功能
3. 路由系统 协议栈处理位置 路由子系统架构
主要功能
4. 邻居系统
主要功能
L2 link layer(driver) 1. Link layer Bridge
主要功能
链路协议
Packt Type
主要功能
Traffic control
主要功能
2. hardware driver layer
协议栈文件系统 Proc FileSystem
core Sys FileSystem
主要功能
最后 整体架构图 如果想了解更多细节,请阅读Linux内核源码或者参考下面两本经典著作: 《The Linux Networking Architecture》 《Understanding Linux Network Internals》 |
|