浅析Linux内核网络子系统_陈轶飞
浅析Linux网络子系统
陈轶飞
rstevens2008 at
Linux网络子系统
• 作用:使Linux成为一个可扩展的网络操作系统
– 支持多协议族:INET, INET6, UNIX...
– 支持多种类型的网络设备: 以太网卡、无线网卡...
• 领略顶级大师作品,成为C高手的绝佳参考
– 开闭原则
• 对扩展开放: 可增加新的协议族、协议、网络设备
• 对修改封闭: 而无需改动框架的代码
– 面向接口编程
• 无处不在的函数指针
– 依赖倒置原则
• 依赖于抽象的接口,而不是具体的实现。
• net_protocol_family, net_device
– 高性能
– 模块化,高可维护性;框架化,高可扩展性
• 各种网络技术汇聚与此,成为网络高手的绝佳参考
– IPv4, IPv6, IPSec, 策略路由, QoS, 网桥, ...
rstevens2008 at
从应用层编程开始
• 简单的UDP发送程序
– sock = socket(AF_INET, SOCK_DGRM, 0);
– sendto(sock, ...)
• 简单的UDP接收程序
– sock = socket(AF_INET, SOCK_DGRM, 0);
– bind(sock, ...);
– recvfrom(sock, );
• 简单的抓包程序,模拟 tcpdump
– sock = socket(AF_PACKET, RAW,
htons(ETH_P_IP));
– recvfrom(sock, ...);
rstevens2008 at
网络子系统架构
INET INET6 UNIX
...
Netfilter
QoS
WiFi GPRS
rstevens2008 at
系统调用层
sendmsg() socket() recvmsg()
sys_socketcall()
sys_sendmsg()