2011-05-13 21 views
19

Me gustaría saber los valores posibles de la columna st en /proc/net/tcp. Creo que la columna st equivale a la columna STATE de netstat(8) o ss(8).Lista de posibles estados de socket internos de/proc

He conseguido identificar tres códigos:

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          

Lo anterior muestra:

  • On Line SL 0: un puerto de escucha en TCP/2208. st = 0A = LISTEN
  • On line sl 6: sesión establecida en tcp/22. st = 01 = ESTABLISHED
  • On line sl 7: Un socket en estado TIME_WAIT después de cerrar sesión ssh. No inodo st = 06 = TIME_WAIT

¿Alguien puede ampliar esta lista? La página de manual proc(5) es bastante conciso sobre el tema afirmando:

/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. 

Y en una nota relacionada, la salida de/proc/net/tcp anterior está mostrando algunos procesos de escucha (2208, 62, 111, etc.). Sin embargo, no puedo ver una conexión de tcp en el tcp/22, aunque se muestran los estados establecidos y time_wait. Sí, puedo verlos en /proc/net/tcp6 pero ¿no deberían estar presentes en /proc/net/tcp también? La salida de Netstat lo muestra de manera diferente a las aplicaciones vinculadas solo a ipv4. P.ej.

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

Muchas gracias, -Andrew

+0

Heres some [más lectura] (http://www.readmespot.com/question/f/21657/semantics-of----and-0-0-0-0-in-dual-stack- oses) en mapeo ipv4 a ipv6 si alguien está interesado –

+0

Ese es un enlace muerto ahora. Creo que probablemente los enlaces a esto: http://serverfault.com/questions/21657/semantics-of-and-0-0-0-0-in-dual-stack-oses – user314104

Respuesta

27

Deben coinciden con la enumeración en ./include/net/tcp_states.h en las fuentes del núcleo Linux:

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! */ 
}; 

En cuanto a su pregunta 2., son realmente seguro de que hay no es un sshd escuchando, por ejemplo 0.0.0.0:22? Si no, sospecho que lo que está viendo está relacionado con los sockets de v4-mapped-on-v6, ver p. man 7 ipv6

+0

Gracias, no sé por qué no captó eso cuando desgranaba la fuente. Creo que estaba intentando hacer coincidir con 'EST'. Definitivamente no hay servicio en '0016', por lo que debe ser el mapeo de v4 a v6 como usted menciona. Nuevo para mi –

+0

Además, no estoy totalmente seguro de cómo obtendría los valores hexadecimales de 'tcp_states.h'. Solo puedo ver ESTABLISHED teniendo un valor como el que pegaste arriba, pero ¿cómo funcionan los otros estados y se corresponden? –

+2

es una enumeración, y comienza con 1. Por ejemplo, TCP_SYN_SENT es 2, TCP_LISTEN es 10. Y 10 en decimal es 'A' en hexadecimal, que es el' 0A' que se ve en/proc/net/tcp – nos

Cuestiones relacionadas