网络收发路径上的一些冷知识 - 参数单位
网络收发路径上的一些冷知识 - 参数单位
在网络调优和排查过程中,了解各种参数及其单位的意义至关重要,因此本文将对常见的参数及其单位进行说明,如有问题,欢迎指正!
单位说明
| 类型 | 层次 | 大小 | 特点 |
| Frame | 数据链路层(L2) | 包括帧头、帧尾和负载,标准以太网帧最大 1518 字节(含 CRC 校验码)。 | 是物理网络中传输的最小单元,可通过 MTU 或使用 Jumbo Frame 改变大小(如高达 9000 字节)。 |
| IP Packet | 网络层(L3) | 包括 IP Header 和 Payload,通常小于 1500 字节(标准 MTU)。 | 包含源 IP 地址、目标 IP 地址等,用于路由和转发;IP Header 通常为 20 字节(IPv4)或 40 字节(IPv6)。 |
| TCP Segment | 传输层(L4) | 包括 TCP Header 和 Payload,大小取决于 TCP 缓冲区和 MTU。 | 提供可靠传输,支持重传、排序和流量控制,TCP Header 通常为 20 字节(可变,含选项)。 |
| UDP Datagram | 传输层(L4) | 包括 UDP Header 和 Payload,通常小于 1472 字节(减去 IP Header 和 UDP Header)。 | 提供无连接的传输,UDP Header 固定为 8 字节,适合实时性要求高的场景(如 DNS、VoIP)。 |
| ARP Packet | 数据链路层(L2) | 通常 28 字节(标准 ARP 包) | 用于解析 IP 地址到 MAC 地址的映射,工作在数据链路层,通常用于局域网通信(无路由功能)。 |
| ICMP Packet | 网络层(L3) | 包括 ICMP Header 和 Payload,通常小于 76 字节(Ping 请求/响应)。 | 用于网络诊断和错误报告(如 Ping 命令),支持多种类型(如 Echo 请求、Destination Unreachable)。 |
| IPv6 Packet | 网络层(L3) | 包括 IPv6 Header 和 Payload,通常小于 1500 字节 | IPv6 数据包,支持更大的地址空间和更高效的头部结构;IPv6 Header 固定为 40 字节(不含扩展头)。 |
| DNS Message | 应用层(L7) | 通常小于 512 字节(传统 DNS 请求/响应) | 用于域名解析,通常通过 UDP 协议传输;现代 DNS(如 DoH)可能通过 HTTPS 或 TCP 传输。 |
| TLS/SSL Record | 会话层(L5) | 大小可变,受限于 TCP 分片和 MTU。 | 加密传输协议的基本单位,支持完整性、加密性和身份验证;依赖 TCP 传输,常见于 HTTPS。 |
| SCTP Chunk | 传输层(L4) | 大小可变,通常较大 | 提供多流和多宿主的可靠传输;支持消息边界,适合电信信令传输(如 4G/LTE 核心网)。 |
网络收发路径中的单位说明
硬件层 (Network Interface Level)
常见指标
•
rx_dropped/tx_dropped• 单位:packet
• 描述:网卡因 RX 或 TX 队列溢出导致丢弃的数据包数量。
• 补充:
• 如果是标准网络层流量(如 TCP/IP、UDP/IP),丢弃单位是 IP Packet。
• 如果是非网络层流量(如 ARP、ICMP),丢弃单位是特定协议的 packet。
•
rx_overruns/tx_overruns• 单位:frame
• 描述:网卡的环形缓冲区溢出导致丢弃的帧数量。
•
rx_bytes/tx_bytes• 单位:bytes
• 描述:网卡接收或发送的总字节数。
•
rx_packets/tx_packets• 单位:packet
• 描述:网卡接收或发送的总数据包数量。
packet 和 frame 的区别
1. 定义:
• Frame(帧): 位于数据链路层,包含帧头(Frame Header)、帧尾和帧载荷,具体取决于物理链路类型(如以太网、Wi-Fi)。
• Packet(数据包): 位于网络层,是传输的逻辑单元。IP Packet 包含 IP 头和数据部分。
2. 大小:
• Frame: 通常固定为 64 到 1518 字节(标准以太网帧),如果使用 Jumbo Frame 最大可达 9000 字节。
• Packet: 包含网络层头部(如 IPv4 的 20 字节头部)以及数据部分,通常比帧小。
3. 关联:
• 一个 Frame 包含一个 Packet 及链路层附加信息。
Softnet 层 (SoftIRQ / Network Stack Level)
常见指标
•
Dropped(/proc/net/softnet_stat)• 单位:packet
• 描述:内核网络栈的软中断队列因满或处理能力不足导致丢弃的数据包数量。
•
net.core.netdev_max_backlog• 单位:packet
• 描述:定义网络设备提交给内核协议栈的最大队列长度,超过该值的包将被丢弃。
•
net.core.netdev_budget• 单位:packet
• 描述:每次软中断调用中最多处理的网络数据包数量。
网络层 (Network Layer)
常见指标和参数
•
ip_forward• 单位:packet
• 描述:内核网络层转发的 IP 包数量(特指 IP Packet)。
•
icmp_in_msgs/icmp_out_msgs• 单位:message
• 描述:接收和发送的 ICMP 消息数量。
TCP 层 (Transport Layer)
常见参数
•
net.ipv4.tcp_rmem和net.ipv4.tcp_wmem• 单位:bytes
• 描述:定义 TCP 接收(rmem)和发送(wmem)缓冲区大小。
•
net.ipv4.tcp_max_syn_backlog• 单位:connection
• 描述:未完成连接(SYN 阶段)的最大等待队列大小。
•
net.ipv4.tcp_mem• 单位:pages
• 描述:TCP 使用的内存限制,单位为内存页(默认 4 KB/页)。
Socket 层 (Application Layer)
常见指标和参数
•
SO_RCVBUF和SO_SNDBUF• 单位:bytes
• 描述:应用层 Socket 的接收和发送缓冲区大小,受
net.core.rmem_max和net.core.wmem_max限制。•
Recv-Q和Send-Q(ss或netstat输出)• 单位:bytes
• 描述:Recv-Q 表示未被应用程序读取的接收数据大小;Send-Q 表示未被内核发送的待发送数据大小。
系统资源相关参数
•
fs.file-max• 单位:file descriptors
• 描述:系统允许打开的最大文件描述符数量,包括网络 Socket。
•
net.netfilter.nf_conntrack_max• 单位:connection
• 描述:Netfilter 模块允许的最大连接跟踪条目数。
内核参数总结
| 参数名称 | 单位 | 示例配置值 | 描述 |
| fs.file-max | file descriptors | 26234859 | 最大文件描述符数量 |
| net.ipv4.tcp_keepalive_time | seconds | 300 | TCP 保活时间 |
| net.ipv4.tcp_max_tw_buckets | connections | 360000 | 最大 TIME_WAIT 连接数 |
| net.core.somaxconn | connections | 4096 | 系统允许的最大监听队列长度 |
| net.core.rmem_max | bytes | 16777216 | 接收缓冲区最大大小 |
| net.core.wmem_max | bytes | 16777216 | 发送缓冲区最大大小 |
| net.ipv4.tcp_rmem | bytes | 4096 87380 16777216 | TCP 接收缓冲区大小 |
| net.ipv4.tcp_wmem | bytes | 4096 87380 16777216 | TCP 发送缓冲区大小 |
| net.ipv4.tcp_max_syn_backlog | connections | 8192 | TCP 最大 SYN 队列长度 |
| net.ipv4.tcp_mem | pages | 94500000 915000000 927000000 | TCP 内存使用限制 |
| net.ipv4.tcp_max_orphans | connections | 3276800 | 最大孤立连接数 |
| net.netfilter.nf_conntrack_max | connections | 1000000 | 最大连接追踪条目数 |
| net.core.netdev_max_backlog | packets | 5000 | 接收队列最大长度 |
| net.core.netdev_budget | microseconds | 600 | 网络设备处理队列的预算时间 |