/ proc中可能的内部套接字状态列表

时间:2011-05-13 13:00:43

标签: linux sockets ipv6 ipv4 procfs

我想知道st/proc/net/tcp列的可能值。我认为st列等同于netstat(8)ss(8)的STATE列。

我设法确定了三个代码:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
0: 0100007F:08A0 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7321 1 ffff81002f449980 3000 0 0 2 -1                     
1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 6656 1 ffff81003a30c080 3000 0 0 2 -1                     
2: 00000000:0272 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 6733 1 ffff81003a30c6c0 3000 0 0 2 -1                     
3: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7411 1 ffff81002f448d00 3000 0 0 2 -1                     
4: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7520 1 ffff81002f4486c0 3000 0 0 2 -1                     
5: 0100007F:089F 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7339 1 ffff81002f449340 3000 0 0 2 -1           
6: 0100007F:E753 0100007F:0016 01 00000000:00000000 02:000AFA92 00000000   500        0 18198 2 ffff81002f448080 204 40 20 2 -1                   
7: 0100007F:E752 0100007F:0016 06 00000000:00000000 03:000005EC 00000000     0        0 0 2 ffff81000805dc00                                      

以上显示:

  • 在线sl 0:tcp / 2208上的侦听端口。 st = 0A = LISTEN
  • 在线sl 6:在tcp / 22上建立的会话。 st = 01 = ESTABLISHED
  • 在线sl 7:ssh注销后处于TIME_WAIT状态的套接字。没有inode。 st = 06 = TIME_WAIT

有人可以扩展此列表吗? proc(5)联机帮助页面上的主题很简洁:

   /proc/net/tcp
          Holds a dump of the TCP socket table. Much of the information is not of use apart from debugging. The "sl" value is the kernel hash slot for the socket, the "local address" is  the  local  address  and
          port  number pair.  The "remote address" is the remote address and port number pair (if connected). ’St’ is the internal status of the socket.  The ’tx_queue’ and ’rx_queue’ are the outgoing and incom-
          ing data queue in terms of kernel memory usage.  The "tr", "tm->when", and "rexmits" fields hold internal information of the kernel socket state and are only useful  for  debugging.   The  "uid"  field
          holds the effective UID of the creator of the socket.

在相关的说明中,上面的/ proc / net / tcp输出显示了一些监听进程(2208,62,111等)。但是,我在tcp / 22上看不到监听tcp连接,而是显示已建立的和time_wait状态。是的,我可以在/proc/net/tcp6中看到它们,但它们是否也不会出现在/proc/net/tcp中? Netstat输出显示与仅绑定到ipv4的应用程序不同。 E.g。

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4231/portmap        
tcp        0      0 :::22                       :::*                        LISTEN      4556/sshd           

非常感谢, -Andrew

1 个答案:

答案 0 :(得分:28)

它们应该匹配linux内核源代码中./include/net/tcp_states.h的枚举:

enum {
    TCP_ESTABLISHED = 1,
    TCP_SYN_SENT,
    TCP_SYN_RECV,
    TCP_FIN_WAIT1,
    TCP_FIN_WAIT2,
    TCP_TIME_WAIT,
    TCP_CLOSE,
    TCP_CLOSE_WAIT,
    TCP_LAST_ACK,
    TCP_LISTEN,
    TCP_CLOSING,    /* Now a valid state */

    TCP_MAX_STATES  /* Leave at the end! */
};

关于你的2.问题,你真的确定没有sshd听取过例如0.0.0.0:22?如果没有,我怀疑你所看到的与v4-mapped-on-v6套接字相关,参见例如man 7 ipv6

相关问题