• Linux Kernel TCP/IP Stack|Linux网络硬核系列


     介绍Linux网络技术中最核心的部分--TCP/IP协议栈 。

    我们先看一下抽象的网络协议栈模型

     再按分层思想看Linux内核协议栈实现框架

     1. socket layer

     socket框架

    • socket系统调用(socket,bind,listen,accept,send,recv等)

    • BSD socket API

    • 协议栈sock抽象适配层

    • tcp/udp/icmp/raw/packet/netlink/... socket管理

    • socket选项

    2. tcp/udp layer

    • TCP报文收发

    • TCP Socket连接管理

    • TCP协议状态机,定时器处理

    • TCP滑动窗口,拥塞控制框架

    L3 IP layer

     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地址

    L2 link layer(driver)

    1. Link layer

    Bridge

    • FDB(mac forwarding database)管理

    • port,bridge对象管理和报文接收,转发

    • STP,vlan协议相关处理

    主要功能

    • 实现二层mac转发

    链路协议

     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

    主要功能

    • 提供协议栈相关配置查询和设置

    最后

    整体架构图

  • 相关阅读:
    JS中的“&&”与“&”和“||”“|”有什么区别?
    深入理解CSS过度动画transition
    使用navigator.userAgent查看浏览器当前模式和版本
    node.js面试题
    Javascript 中的 ...(展开运算符)
    JavaScript立即执行函数
    JavaScript实现继承的6种方式
    JavaScript的排序算法--冒泡、选择、直接插入
    JavaScript RegExp 对象
    (CVPR 2020 Oral)最新Scene Graph Generation开源框架
  • 原文地址:https://www.cnblogs.com/windyrainy/p/16663141.html
Copyright © 2020-2023  润新知