43.8. 显示 TCP 状态更改信息
在 TCP 会话中,TCP 状态会改变。tcpstates
工具使用 eBPF 功能跟踪这些状态变化,并打印包括每个状态持续时间的详细信息。例如,使用 tcpstates
来确定连接是否在初始化状态中花费了太多时间。
流程
使用以下命令开始追踪 TCP 状态变化:
# /usr/share/bcc/tools/tcpstates SKADDR C-PID C-COMM LADDR LPORT RADDR RPORT OLDSTATE -> NEWSTATE MS ffff9cd377b3af80 0 swapper/1 0.0.0.0 22 0.0.0.0 0 LISTEN -> SYN_RECV 0.000 ffff9cd377b3af80 0 swapper/1 192.0.2.1 22 192.0.2.45 53152 SYN_RECV -> ESTABLISHED 0.067 ffff9cd377b3af80 818 sssd_nss 192.0.2.1 22 192.0.2.45 53152 ESTABLISHED -> CLOSE_WAIT 65636.773 ffff9cd377b3af80 1432 sshd 192.0.2.1 22 192.0.2.45 53152 CLOSE_WAIT -> LAST_ACK 24.409 ffff9cd377b3af80 1267 pulseaudio 192.0.2.1 22 192.0.2.45 53152 LAST_ACK -> CLOSE 0.376 ...
每次连接改变其状态时,
tcpstates
都会显示一个新行,其中包含更新的连接详情。如果多个连接同时改变了其状态,请使用第一列中的套接字地址(
SKADDR
)来确定哪些条目属于同一个连接。- 按 Ctrl+C 停止追踪过程。
其他资源
-
系统中
tcpstates (8)
手册页 -
/usr/share/bcc/tools/doc/tcpstates_example.txt
file