2011-05-13 6 views
19

열의 가능한 값을 /proc/net/tcp에 알고 싶습니다. 나는 st 열이 netstat(8) 또는 ss(8)의 상태 열과 같다고 생각합니다.가능한 내부 소켓 상태 목록/proc

나는 3 개 코드를 식별하기 위해 관리해야 :

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 상태의 소켓. 아이 노드가 없습니다. 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 디렉토리/그물/TCP 출력이 몇 청취 과정 (2208, 62, 111 등)를 보이고있다. 그러나, tcp/22에서 listen TCP 연결을 볼 수는 없지만 established 및 time_wait 상태가 표시됩니다. 예, /proc/net/tcp6에서 볼 수 있지만 /proc/net/tcp에도 존재하지 않아야합니까? Netstat 출력은 ipv4에만 바인드 된 응용 프로그램과 다르게 표시됩니다. 예 :

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

많은 감사, -Andrew

+0

Heres 일부 [더 읽기] (http://www.readmespot.com/question/f/21657/semantics-of----and-0-0-0-0-in-dual-stack- oses) ipv4에서 ipv6 매핑에 관심이 있다면 –

+0

그건 이제 죽은 링크입니다. 나는 아마 이것에 연결된다고 생각한다 : http://serverfault.com/questions/21657/semantics-of-and-0-0-0-0-in-dual-stack-oses – user314104

답변

27
그들은 리눅스 커널 소스에 ./include/net/tcp_states.h에 열거에 일치해야

: 당신의 2. 질문에 대해서는

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

당신에게있어 정말 확신 예를 들어 듣는 sshd가 아닙니다. 0.0.0.0:22? 그렇지 않다면, 나는 당신이 v4-mapped-on-v6 소켓과 관련이 있다고 생각합니다. man 7 ipv6

+0

고마워, 왜 나 근원을 그릴 때 그것을 잡아 내지 못했습니다. 나는'EST '에 매치를 시도하고 있었다고 생각한다. '0016'에는 서비스가 전혀 없으므로 언급 한대로 v4에서 v6으로 매핑해야합니다. 내게 새로운. –

+0

또한, 나는'tcp_states.h'에서 16 진수 값을 얻는 방법을 완전히 모르겠습니다. 위의 내용을 붙여 넣은 것과 같은 가치가있는 설정 만 볼 수 있지만 다른 상태는 어떻게 작동합니까? –

+2

그것은 열거 형이며 1부터 시작합니다. TCP_SYN_SENT는 2이고 TCP_LISTEN은 10입니다. 10 진수의 10은 16 진수의'A'입니다. 이는/proc/net/tcp에있는'0A '입니다. – nos

관련 문제