You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统下如何仅获取TCP协议的网络统计数据(排除UDP)?

分离TCP与UDP流量统计及netstat "segment" 含义解答

一、分离TCP/UDP流量统计的方法

可以通过以下几种方式实现精准统计:

  • 使用ss命令(netstat的现代替代工具)
    ss -ti可查看单条TCP连接的收发字节数,结合awk可汇总全局TCP总流量:
    # 统计TCP接收总字节数
    ss -ti | awk '/recv_bytes/ {sum += $2} END {print "TCP接收总字节: " sum}'
    # 统计TCP发送总字节数
    ss -ti | awk '/send_bytes/ {sum += $2} END {print "TCP发送总字节: " sum}'
    
    对应UDP统计可替换为ss -ui。
  • 读取内核/proc/net/snmp统计文件
    内核维护了TCP、UDP的全局字节统计,直接读取即可:
    # 提取TCP收发字节数
    grep -A 10 TCP /proc/net/snmp | awk '/InOctets/ {print "TCP接收字节: " $2} /OutOctets/ {print "TCP发送字节: " $4}'
    # 提取UDP收发字节数
    grep -A 10 UDP /proc/net/snmp | awk '/InOctets/ {print "UDP接收字节: " $2} /OutOctets/ {print "UDP发送字节: " $4}'
    
    其中InOctets和OutOctets就是对应协议的字节统计值,单位为字节,完全可以替代你之前用的网卡全局rx_bytes/tx_bytes。
  • tcpdump临时过滤统计
    若需统计特定时间段的TCP流量,可使用tcpdump实时过滤:
    # 统计eno1网卡TCP接收字节数
    tcpdump -i eno1 tcp -w /dev/null 2>&1 | awk '/captured/ {split($6,a,"."); print "TCP接收字节: " a[1]}'
    

二、netstat中"segment"的含义

netstat -st里的"segment"指TCP段,它的大小不是固定MTU:

  • TCP段的最大长度由MSS(最大段大小)决定,MSS通常是MTU减去IP头和TCP头长度(比如MTU为1500时,MSS一般为1460)。
  • 实际传输中,TCP段大小可以小于MSS,比如数据量不足、拥塞控制、分段重传场景下,都会产生更小的段。
  • 所以segments received/sent out是TCP段的数量统计,和字节数属于不同维度的指标,无法直接换算成固定大小的字节值。

内容的提问来源于stack exchange,提问作者wef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:45:41