2011-05-13 13 views
19

Chciałbym poznać możliwe wartości kolumny st w /proc/net/tcp. Myślę, że kolumna st jest równa kolumnie STAN z netstat(8) lub ss(8).Lista możliwych wewnętrznych statusów gniazd z/proc

udało mi się zidentyfikować trzy kody:

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          

Powyższe Wystawy:

  • Na linii sl 0: nasłuchiwania portu TCP/2208. st = 0A = LISTEN
  • W linii sl 6: Ustalona sesja na tcp/22. st = 01 = ESTABLISHED
  • W linii sl 7: Gniazdo w stanie TIME_WAIT po wylogowaniu ssh. Bez i-węzła. st = 06 = TIME_WAIT

Czy ktoś może rozwinąć tę listę? proc(5) podręcznika jest dość lakoniczny na temat treści:

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

I na powiązana uwaga powyżej wyjścia/proc/net/tcp pokazuje kilka procesów słuchania (2208, 62, 111 itp). Jednak nie widzę połączenia nasłuchującego tcp na tcp/22, mimo że pokazane są stany i czas oczekiwania. Tak, widzę je w /proc/net/tcp6, ale czy nie powinny one również być obecne w /proc/net/tcp? Wyjście Netstat pokazuje to inaczej niż aplikacje powiązane tylko z ipv4. Na przykład.

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

Dziękujemy, -Andrew

+0

Oto kilka [więcej czytanie] (http://www.readmespot.com/question/f/21657/semantics-of----and-0-0-0-0-in-dual-stack- oses) na mapowaniu ipv4 na ipv6, jeśli ktokolwiek jest zainteresowany –

+0

To jest już nieaktualne łącze. Myślę, że prawdopodobnie linki do tego: http://serverfault.com/questions/21657/semantics-of-and-0-0-0-0-in-dual-stack-oses – user314104

Odpowiedz

27

Powinny pasujące do wyliczenia w ./include/net/tcp_states.h w źródłach jądra 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! */ 
}; 

2. Co do twojego pytania, czy naprawdę jesteś pewien, że nie słuchanie sshd np 0.0.0.0:22? Jeśli nie, podejrzewam, że to, co widzisz, jest związane z gniazdami v4-mapped-on-v6, zobacz np. man 7 ipv6

+0

Dzięki, nie wiem, dlaczego ja nie złapał tego, kiedy szukał źródła. Myślę, że próbowałem dopasować do 'EST'. Z pewnością nie ma usługi na '0016', więc musi to być mapowanie v4 do v6, o czym wspomniałeś. Nowy dla mnie. –

+0

Ponadto, nie jestem całkowicie pewien, jak uzyskać wartości szesnastkowe z 'tcp_states.h'. Widzę tylko ESTABLISHED o wartości takiej jak ty wklejona powyżej, ale w jaki sposób inne stany działają i są dopasowane? –

+2

to wyliczenie i zaczyna się od 1. Tak np. TCP_SYN_SENT wynosi 2, TCP_LISTEN to 10. A dziesiętnie dziesiętnie to 'A' w języku heksadecym, czyli' 0A', który widzisz w/proc/net/tcp – nos

Powiązane problemy