当前位置: 首页 > 科技观察

Linux网络硬核系列:TCP-IP协议栈

时间:2023-03-17 14:32:47 科技观察

今天给大家介绍一下Linux网络技术最核心的部分——TCP/IP协议栈。我们先看抽象网络协议栈模型TCP/IP四层(参考)模型,然后从上到下看Linux内核协议栈实现框架Socket/L4TCPlayer1。socket层socketobjecthierarchysocketframesocketsystemCall(socket,bind,listen,accept,send,recv,etc.)BSDsocketAPI协议栈sock抽象适配层tcp/udp/icmp/raw/packet/netlink/...socketmanagementsocketoptions2.tcp/udp层TCP消息收发TCPSocket连接管理TCP协议状态机,定时器处理TCP滑动窗口,拥塞控制框架L3IPlayer1。IPhandle报文分片和重组IP协议字段处理、IP选项、Qos、TTL、校验等处理报文接收(解封装)和发送(IP协议封装,提供给上层接口)、组播、ICMP协议处理等。2.Netlfilter框架5个HOOK点:PREROUTING:数据包进入路由表之前INPUT:经过路由表之后目的地是本机FORWARD:经过路由表之后,目的地不是本机OUTPUT:由生成本机,向外发送POSTROUTIONG:发送到网卡接口之前。每个HOOK点都会执行一些功能,大致分为以下几张表:NAT表:用于实现nat功能,端口映射,地址映射等mangle表:用于修改报文,比如改变TOS/DSCP的IPheader/ECN位过滤表:用于过滤报文raw表:用于预先标记报文,不经过一些过程(例如不需要建立会话)conntrack表:连接跟踪表,跟踪连接会话,用于实现状态防火墙,NAT功能的基础可以扩展到更多的功能。核心处理流程的主要功能无状态数据包过滤(IPv4和IPv6)有状态数据包过滤(IPv4和IPv6)各种网络地址和端口转换,例如NAT/NAPT(IPv4和IPv6)灵活和可扩展的基础设施三方扩展API3。路由系统协议栈处理位置路由子系统架构FIB(TheForwardingInformationBase)policyroutingPoliciesroutematchingHASH,LC-tries等主要功能三层路由转发4.邻居系统ARP协议(IPV4),NDP协议(IPV6)邻居表创建、更新、老化机制、状态转换等API接口主要函数获取mac地址L2链路层(驱动)1.链路层BridgeFDB(macforwardingdatabase)管理端口,网桥对象管理和报文接收,转发STP,vlan协议相关处理主要函数实现二层mac转发链路协议IEEE802协议族(STP、VLAN、Ethernet、无线wifi、令牌环等):通过队列缓存数据包,控制网络收发速度类:用于表示控制策略filter:用于将数据包划分成特定的控制策略主要功能提供流量限速、整形和Policy控制机制(Qos)2.硬件驱动层网络设备管理RPS、RFS、XPS、GRO、GSO、TSO等优化特性网卡软中断收发、NAPI、DMA支持各种网卡驱动实现协议栈文件系统ProcFileSystem/proc/net/proc/sys/netipv4coreSysFileSystem/sys/class/net/ethx主要功能提供协议栈相关配置查询和设置最终整体架构图