42.2. 显示添加到内核的接受队列中的 TCP 连接

内核在 TCP 3 向握手中接收 ACK 数据包后,内核会将来自 SYN 队列的连接移到 accept 队列,直到连接的状态变为 ESTABLISHED。因此,只有成功的 TCP 连接才能在此队列中看到。

tcpaccept 工具使用 eBPF 特性显示内核添加到 accept 队列的所有连接。该工具是轻量级的,因为它跟踪内核的 accept() 函数,而不是捕获和过滤数据包。例如,使用 tcpaccept 进行常规故障排除,来显示服务器已接受的新连接。

步骤

  1. 输入以下命令来启动对内核 accept 队列的追踪:

    # /usr/share/bcc/tools/tcpaccept
    PID   COMM      IP RADDR         RPORT  LADDR    LPORT
    843   sshd      4  192.0.2.17    50598  192.0.2.1  22
    1107  ns-slapd  4  198.51.100.6  38772  192.0.2.1  389
    1107  ns-slapd  4  203.0.113.85  38774  192.0.2.1  389
    ...

    每次内核接受一个连接时,tcpaccept 都会显示连接的详情。

  2. Ctrl+C 停止追踪过程。

其他资源

  • tcpaccept(8) 手册页
  • /usr/share/bcc/tools/doc/tcpaccept_example.txt file