Hacker News 中文摘要

RSS订阅

Linux 全网络栈图解 (2024) -- Entire Linux Network stack diagram (2024)

文章摘要

文章介绍了Linux网络栈中流量控制(TC)相关的核心配置参数,包括接收/发送缓冲区大小(net.core.rmem/wmem)、默认队列规则(defaultqdisc)、接口特定调度器设置、QDISC缓冲区调整方法(ethtool)、TCP/UDP内存参数、窗口缩放、拥塞控制算法、定时器设置(FINWAIT2/TIMEWAIT)、连接数限制(somaxconn)、SYN队列大小以及本地端口范围等网络调优关键配置项。

文章总结

Linux网络栈配置与管理指南

核心网络参数配置: 1. 内存缓冲区设置 - 接收/发送缓冲区大小:net.core.rmemmax/default、net.core.wmemmax/default - TCP/UDP内存设置:net.ipv4.tcpmem、net.ipv4.udpmem - 单个数据包选项缓冲区:net.core.optmem_max

  1. 队列调度机制
  • 默认队列调度器:net.core.default_qdisc
  • 接口特定调度器(如eth0):tc qdisc add dev eth0 root fq
  • 队列长度调整:ip link set eth0 txqueuelen XX
  1. TCP协议优化
  • 窗口缩放:net.ipv4.tcpwindowscaling
  • 拥塞控制算法:net.ipv4.tcpcongestioncontrol
  • 连接状态超时:net.ipv4.tcpfintimeout
  • 半连接队列:net.ipv4.tcpmaxsyn_backlog

硬件加速功能(通过ethtool配置): - 多队列支持:ethtool -L eth0 rx XX tx YY - 卸载功能:TSO/LRO/GRO/GSO - VLAN支持:ethtool -K eth0 rxvlan on txvlan on - 校验和卸载:ethtool -K eth0 rx on tx on

虚拟网络组件: 1. 虚拟设备 - TAP设备(用于虚拟机) - VETH设备对(用于容器间通信) - 网桥(Linux bridge/OVS bridge)

  1. 网络隔离技术
  • VLAN隔离
  • VxLAN隧道(标准OpenStack实现)
  • 网络命名空间隔离
  1. 虚拟化网络
  • VirtIO虚拟网卡(前端/后端架构)
  • KVM虚拟交换机配置
  • Open vSwitch高级功能

监控与统计: 1. 系统命令 - 基础统计:netstat -i/-s、ss、nstat - 详细监控:sar -n DEV/EDEV - 队列查看:ip -s link

  1. 系统文件
  • /proc/net/dev(接口统计)
  • /proc/net/snmp(协议统计)
  • /proc/softirqs(软中断统计)

高级功能: 1. 数据包导向 - RPS(接收包导向):/sys/class/net/eth0/queues/ - XPS(发送包导向):xps_cpus设置 - aRFS(硬件流导向)

  1. 性能优化
  • 中断均衡:/proc/irq/XX/smp_affinity
  • NAPI轮询参数:net.core.netdevbudget(usecs)
  • BIG TCP支持(内核6.3+)
  1. 安全过滤
  • Netfilter框架(iptables/nftables)
  • 连接跟踪(conntrack)
  • 桥接过滤(ebtables)

注:所有配置需根据实际硬件限制调整,特别是缓冲区大小和队列长度等参数。虚拟网络配置需考虑MTU设置和性能开销。

评论总结

总结评论内容:

  1. 对图表实用性的高度认可
  • "A good schematic makes a world of difference!"("好的示意图能带来天壤之别!")(评论2)
  • "Lovely diagram, thanks for sharing it!"("很棒的图表,感谢分享!")(评论5)
  1. 图表对理解Linux网络栈的帮助
  • "Until I finally found a schematic showing the flowchart...All of a sudden, I could write rules that did exactly what I wanted"("直到找到显示流程图的示意图...突然就能写出完全符合需求的规则了")(评论2)
  • "I'm familiar with most of the stack just from decades of Linux usage"("通过几十年Linux使用经验就熟悉了大部分技术栈")(评论1)
  1. 对图表扩展功能的期待
  • "If someone could program a visualization tool...would be even cooler"("如果有人能开发可视化工具...会更酷")(评论3)
  • "Is it possible we see the diagram as an svg?"("能否提供svg格式的图表?")(评论6)
  1. 对作者其他作品的关注
  • "the author of this diagram also made a Linux disk I/O diagram"("该图表作者还制作了Linux磁盘I/O图")(评论4)
  • "Shout out to the brilliant and generous work of the author!"("向作者出色而慷慨的工作致敬!")(评论4)
  1. 对虚拟化支持的疑问
  • "I'm not sure if this takes into account para-virtualized networks on VMs"("不确定是否考虑了VM的准虚拟化网络")(评论5)