강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

리눅스마스터1급 : 네트워크 명령어 netstat

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 네트워크 명령어 netstat

 

 

netstat는 현재 연결된 네트워크 연결과 라우팅 테이블, 인터페이스에 대한 통계, 마스커레이딩 연결, 멀티캐스팅 정보 등을 보여준다.

 

 

 

, netstat 명령으로 어떤 호스트(또는 서버)들과 어떤 서비스로 연결되어 있는지와 그 연결상태는 어떠한가에 대한 정보들을 알 수 있다.

 

 

 

 

 

어떤 클라이언트와 연결되었는가?

어떤 서비스(www, ftp, mysql, ssh )로 연결되었는가?

어떤 포트(port) 번호로 연결되어 있는가?(의 서비스에 대한 포트 번호)

연결상태(wait, listen, connect )는 어떠한가?

네트워크 연결상태가 어떻게 되어 있는가?

기본 게이트웨이의 설정이 제대로 되어 있는가?

route에서처럼 라우팅 경로는 어떠한가?

1) 주요 옵션

먼저 netstat 명령에서 주로 사용하는 유용한 옵션들에 대해서 알아보도록 한다.

 

 

 

명령의 여러 기능들을 사용하기 위해 이 옵션들을 함께 사용할 수 있다.

 

 

 

 

 

옵션

설명

-a

--all과 같으며 listen되는 소켓정보와 listen 되지 않는 소켓정보 모두 보여줌.

-n

--numeric과 같으며 10진수의 수치정보로 결과를 출력해줌.

-r

--route와 같으며 설정된 라우팅 정보를 출력해줌.

-p

--program과 같으며 실행되고 있는 각 프로그램과 PID 정보를 출력함.

-i

--interface=iface와 같으며 모든 네트워크 인터페이스 정보를 출력함. 또는 특정 네트워크 인터페이스를 지정할 수 있음.

-c

--continuous와 같으며 netstat 결과를 연속적으로 출력함.

-l

--listening과 같으며 listen 되고 있는 소켓 정보를 출력함.

-s

--statistics와 같으며 각 프로토콜에 대한 통계정보를 출력함.

 

2) 인터페이스의 표시

 

 

 

 

# netstat -i

Kernel Interface table

Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg

eth0 1500 0 550639602 0 0 0 766044774 0 0 0 BMRU

lo 16436 0 6824854 0 0 0 6824854 0 0 0 LRU

 

 

 

 

 

 

 

-i 옵션은 해당 호스트에 설치된 인터페이스에 대한 정보를 출력한다.

 

 

 

예제에서 현재 eth0lo(loop back) 인터페이스가 동작중이다.

 

 

 

lo 는 자기 자신을 가리키는 기본 주소로서 기본으로 설정되는 인터페이스이다.

 

 

 

고립된 네트워크는 루프백(loopback) 인터페이스만 있으면 된다.

 

 

 

유닉스는 기본적으로 네트워크상에 있다는 것을 가정하고 동작한다.

 

 

 

따라서 루프백 인터페이스를 통해서 그것을 대신해 주는 것이다.

 

 

 

3) 라우팅 정보 출력하기

 

 

 

 

# netstat -rn

Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

220.73.136.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0

169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

0.0.0.0 220.73.136.129 0.0.0.0 UG 0 0 0 eth0

 

 

 

 

 

-n 은 도메인 주소를 질의하지 말고 IP 주소 그대로 출력하라는 옵션이다.

 

 

 

그래서 route -n 을 했을 때와 비슷한 결과가 나온다.

 

 

 

이것은 아직 설정이 되지 않아 도메인 네임 서버에 접속이 불가능하거나 접속 시간을 아끼고 싶은 경우 사용하면 유용하다.

 

 

 

그렇지만 이것은 route 만 했을 때와는 달리 MSS(Maximum Segment Size)를 포함하여 나타낸다.

 

 

 

이것은 MTU(Maximum Transmission Unit) 와 연관되는 값인데, 물리적으로 다른 네트워크로 패킷이 전송될 때 단일 패킷으로 전송되기에는 너무 큰 경우에는 게이트웨이에서 이를 적절하게 잘라(fragmentation) 주어야 한다.

 

 

 

이를 위해 있는 것이 MTU 값이고, 그와 반대되는 값이 MSS 이다.

 

 

 

 

4) 패킷 통계 보기

 

 

 

 

$ netstat -s

Ip:

5080085 total packets received

8 with invalid headers

0 forwarded

0 incoming packets discarded

1363449 incoming packets delivered

2614271 requests sent out

Icmp:

164509 ICMP messages received

167 input ICMP message failed.

ICMP input histogram:

destination unreachable: 1880

timeout in transit: 149

redirects: 252

echo requests: 87

echo replies: 162141

4482 ICMP messages sent

0 ICMP messages failed

ICMP output histogram:

destination unreachable: 4395

echo replies: 87

Tcp:

32087 active connections openings

0 passive connection openings

17 failed connection attempts

0 connection resets received

22 connections established

2723487 segments received

2400872 segments send out

3572 segments retransmited

8769 bad segments received.

1433 resets sent

Udp:

41550 packets received

4267 packets to unknown port received.

33 packet receive errors

45990 packets sent

TcpExt:

32 resets received for embryonic SYN_RECV sockets

34 packets pruned from receive queue because of socket buffer overrun

81 ICMP packets dropped because they were out-of-window

SockMallocOOM: 0

 

 

 

 

 

-s 옵션은 각각의 프로토콜들에 대한 통계를 보여 준다.

 

 

 

IP(Internet Protocol), ICMP (Internet Control Message Protocol), TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 등의 프로토콜에 대해서 들어오고 나간 패킷, 에러가 난 패킷 등을 보고하여 준다.

 

 

 

 

5) 열려진 소켓들 출력하기

 

 

 

 

$ netstat

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 bit-21.com:1022 hlug.hanyang.ac.kr:ssh FIN_WAIT2

tcp 1 0 bit-21.com:2505 bit-21.com:mysql CLOSE

tcp 1 0 bit-21.com:2490 bit-21.com:mysql CLOSE_WAIT

tcp 1 0 bit-21.com:2469 bit-21.com:mysql CLOSE_WAIT

tcp 1 0 bit-21.com:2396 bit-21.com:mysql CLOSE

tcp 1 0 bit-21.com:2394 bit-21.com:mysql CLOSE

tcp 0 0 bit-21.com:mysql bit-21.com:2379 ESTABLISHED

tcp 0 0 bit-21.com:2379 bit-21.com:mysql ESTABLISHED

tcp 1 0 bit-21.com:2376 bit-21.com:mysql CLOSE_WAIT

tcp 0 0 localhost:16802 localhost:2028 ESTABLISHED

tcp 0 0 localhost:2028 localhost:16802 ESTABLISHED

tcp 0 0 localhost:16802 localhost:2027 ESTABLISHED

tcp 0 0 localhost:2027 localhost:16802 ESTABLISHED

tcp 1 0 bit-21.com:1995 bit-21.com:mysql CLOSE_WAIT

tcp 1 0 bit-21.com:1853 bit-21.com:mysql CLOSE

tcp 1 0 bit-21.com:1852 bit-21.com:mysql CLOSE_WAIT

tcp 0 0 bit-21.com:ssh bit-21.com:1023 ESTABLISHED

tcp 0 0 bit-21.com:1023 bit-21.com:ssh ESTABLISHED

tcp 0 696 bit-21.com:ssh 211.181.178.73:3594 ESTABLISHED

tcp 0 0 bit-21.com:ssh 211.181.178.74:4601 ESTABLISHED

...중략...

udp 192 0 bit-21.com:3338 210.107.25.254:domain ESTABLISHED

udp 0 0 bit-21.com:3337 ns.dacom.co.kr:domain ESTABLISHED

udp 0 0 bit-21.com:3336 hynetm.hanyang.a:domain ESTABLISHED

udp 192 0 bit-21.com:3335 210.107.25.254:domain ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags Type State I-Node Path

unix 0 [ ] STREAM CONNECTED 538839 @00000b41

unix 0 [ ] STREAM CONNECTED 429073 @000007bc

unix 0 [ ] STREAM CONNECTED 538845 @00000b42

unix 1 [ ] STREAM CONNECTED 537630 @00000ad4

...중략...

unix 0 [ ] DGRAM 489

unix 0 [ ] DGRAM 417

 

 

 

 

 

위의 정보는 관리하고 있는 서버에서 netstat를 실행시킨 것이다.

 

 

 

만약 아무런 옵션을 주지 않고 netstat 를 실행시킨다면 위와 비슷한 정보를 보게 될 것이다.

 

 

 

위의 정보는 현재 시스템에서 열려져 있는 소켓을 나타낸다.

 

 

 

 

Active Internet connection 이란 이름으로 tcp, udp, 그리고 여기엔 표시가 되지 않았지만 raw 프로토콜을 사용하는 소켓에 대한 정보가 출력된다.

 

 

 

Proto 란 필드는 현재 소켓이 사용하고 있는 프로토콜에 대해 출력한다.

 

 

 

다음으로 Recv-Q 필드는 사용자의 프로그램이 아직 복사해 가지 않은 바이트 수이다.

 

 

 

그러니까 받은 패킷 중에서 큐(Receive Queue)에 대기중인 바이트를 말하는 것이다.

 

 

 

Send-Q 필드는 반대로 연결된 원격 호스트가 가져가지 않은 바이트 수이다.

 

 

 

마찬가지로 보낼 큐(Send Queue)에 대기중인 바이트이다.

 

 

 

Local Address 는 로컬 호스트 주소와 포트번호가 나온다.

 

 

 

-n 옵션을 붙이면 IP 주소로 나오게 된다.

 

 

 

다음으로 Foreign Address 는 원격 호스트의 주소와 포트번호이다.

 

 

 

State 는 연결된 소켓의 상태를 나타낸다.

 

 

 

다음은 이 상태 출력에 대한 설명이다.

 

 

 

 

 

ESTABLISHED : 소켓이 연결되어 있다.

 

 

 

 

SYN_SENT : 소켓이 동작중이고 연결을 하려고 시도 중이다.

 

 

 

 

SYN_RECV : 네트워크로부터 연결 요청을 받았다.

 

 

 

 

FIN_WAIT1 : 소켓의 연결이 끊어지고, 연결이 중단되고 있는 중이다.

 

 

 

 

FIN_WAIT2 : 연결이 끊어지고, 소켓이 원격의 연결중단을 기다리고 있다.

 

 

 

 

TIME_WAIT : 소켓이 네트워크 상에 있는 패킷을 처리하기 위해 대기중이다.

 

 

 

 

CLOSED : 소켓이 사용중이 아니다.

 

 

 

 

CLOSE_WAIT : 원격지에서 연결을 중단했고 소켓이 끝나기를 기다리고 있다.

 

 

 

 

LAST_ACK : 원격지의 연결이 중단되고, 소켓은 끝났다.

 

 

 

ACK 를 기다리고 있는 상태

 

LISTEN : 소켓이 연결을 기다리고 있는 상태. -l (--listening), -a (--all) 옵션을 주지 않으면 보이지 않는다.

 

 

 

 

CLOSING : 양쪽에서 연결은 끊겼지만 아직 보내지 않은 데이터가 있는 상태

UNKOWN : 소켓의 상태가 파악되지 않는 상태

 

Active UNIX Domain Sockets Domain 이 나타내는 것과 같이 시스템 내부에서의 연결을 위한 소켓들을 출력한다.

 

 

 

대부분 unix 프로토콜을 갖는 소켓들로써, 로그를 기록한다거나 하는 일을 처리한다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  102 명