Zero To One

How to Use netstat on Linux (한글 번역) 본문

Linux

How to Use netstat on Linux (한글 번역)

Zero_To_One 2022. 2. 14. 16:21

Linux netstat 명령은 네트워크 연결, 사용 중인 포트 및 이를 이용하는 프로세스에 대한 정보를 제공한다.

 

Ports, Processes, and Protocols

Network sockets은 연결되거나 연결을 기다릴 수 있다. 연결은 TCP 또는 UDP와 같은 네트워킹 프로토콜을 사용할 수 있다.

그들은 Internet Protocal 주소와 network ports를 사용하여 연결을 설정한다.

 

Sockets이란 단오는 물리적인 연결 포인트 를 연상케 할 수 있지만 여기서 socket은 네트워크 데이터 연결의 한쪽 끝을 처리하는데 사용되는 소프트웨어 구성이다.

 

sockets은 2가지 주요 상태를 가지고 있다. : 그들은 연결하고 네트워크 전달을 진행할 뿐만 아니라 그들은 그들에게서 연결되는 연결을 위해 기다릴 수 있다. 소켓이 원격 장치에 연결을 설정하는 중간에 있는 상태와 같은 다른 상태들이 있지만, 과도 상태를 제쳐두고 소켓을 연결 중이거나 대기 중인 것으로 생각할 수 있다.

 

수신 소켓은 서버라고 하며, 수신 소켓과의 연결을 요청하는 소켓은 클라이언트라고 한다. 이러한 이름은 하드웨어 또는 컴퓨터 역할과 관련이 없다. 그들은 단순히 연결의 각 끝에서 각 소켓의 역할을 정의한다.

 

netstat 명령을 사용하여 연결된 소켓과 수신 중인 소켓을 검색할 수 있다. 즉, 사용 중인 포트와 이 포트를 사용하는 프로세스가 표시된다. 네트워크 인터페이스 및 멀티캐스트 연결에 대한 라우팅 테이블과 통계를 보여줄 수 있다.

 

netstat의 기능은 ip 및 ss는 같은 서로 다른 리눅스 유틸리티에서 시간이 지남에 따라 복제되었다. 모든 리눅스 및 유닉스계열 운영 체제와 심지어 윈도우 및 맥에서도 사용 가능하기 때문에 모든 네트워크 분석 명령의 할아버리를 아는 것은 여전히 가지차가 있다.

 

다음은 사용 방법이다. 예제를 통해 완료해보자

 

Listing All sockets

-a (all) 옵션은 netstat가 연결된 소켓과 대기 소켓을 모두 표시하도록 한다. 이 명령어는 긴 목록을 만들기 쉬우므로, 파이프로 더 적게 만든다.

netstat -a | less

목록에는 TCP(IP), TCP6(IPv6) 그리고 UDP 소켓이 포함되어 있다.

터미널 창에 래핑되어 있기 때문에 무슨 일이 일어나고 있는지 알기가 조금 어렵다. 이 목록의 몇가지 섹션은 다음과 같다.

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN     
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp        0      0 jaehyeok-Inspiron:36864 211.249.222.33:https    ESTABLISHED
tcp        0      0 jaehyeok-Inspiron:34320 ta-in-f188.1e100.n:5228 ESTABLISHED
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN     
udp        0      0 0.0.0.0:38048           0.0.0.0:*                          
udp        0      0 224.0.0.251:mdns        0.0.0.0:*                          
udp        0      0 0.0.0.0:mdns            0.0.0.0:*                          
udp        0      0 localhost:domain        0.0.0.0:*                          
udp        0      0 jaehyeok-Inspiro:bootpc _gateway:bootps         ESTABLISHED
udp        0      0 0.0.0.0:631             0.0.0.0:*                          
udp6       0      0 [::]:mdns               [::]:*                             
udp6       0      0 [::]:35365              [::]:*                             
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     33703    @/tmp/.ICE-unix/1158
unix  2      [ ]         DGRAM                    32618    /run/user/1000/systemd/notify
unix  2      [ ACC ]     STREAM     LISTENING     32621    /run/user/1000/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     32626    /run/user/1000/bus
unix  2      [ ACC ]     STREAM     LISTENING     32627    /run/user/1000/gnupg/S.dirmngr
unix  2      [ ACC ]     STREAM     LISTENING     32628    /run/user/1000/gnupg/S.gpg-agent.browser
unix  2      [ ACC ]     STREAM     LISTENING     32629    /run/user/1000/gnupg/S.gpg-agent.extra
unix  2      [ ACC ]     STREAM     LISTENING     32630    /run/user/1000/gnupg/S.gpg-agent.ssh
unix  2      [ ACC ]     STREAM     LISTENING     40012    /tmp/.X11-unix/X0

"Active Internet (활성인터넷)" 섹션에는 연결된 외부 연결과 원격 연결 요청을 수신하는 로컬 소켓이 나열된다. 즉, 외부장치에 설정되거나 설정될 네트워크 연결을 나열한다.

"UNIX 도메인 섹션"에는 연결 및 수신 내부 연결이 나열된다. 즉, 운영 체제의 여러 응용 프로그램, 프로세스 및 요소 간에 컴퓨터 내에 설정된 연결이 나온다.

 

"Active Interent"열은 다음과 같다.

  • Proto : 이 소켓에서 사용하는 프로토콜( ex TCP,UDP) 이다.
  • Recv-Q : 수신 대기열. 이러한 바이트는 수신되어 버퍼링된 수신 바이트로, 이 연결을 사용하는 로컬 프로세스가 읽고 소비할 때 까지 기다린다.
  • Send-Q : 전송 대기열에서 보낼 준비가 된 바이트가 표시된다.
  • Local address : 연결 로컬 끝의 주소 세부 정보이다. 기본값은 netstat가 주소에 대한 로컬 호스트 이름과 포트에 대한 서비스 이름을 표시하는 것이다.
  • Foreign address(외부 주소) : 연결 원격 끝의 주소 및 포트 번호
  • State : 로컬 소켓의 상태이다. UDP 소켓의 경우 일반적으로 공백이다. 아래의 표를 참조.

TCP 연결의 경우 상태 값은 다음 중 하나일 수 있다.

  • LISTEN : 서버쪽만 해당된다. 소켓이 연결 요청을 기다리는 중이다.
  • SYN-SENT : 클라이언트 측만 해당. 이 소켓은 연결 요청을 했고 승인 여부를 기다리는 중이다.
  • SYN-RECEIVED : 서버쪽만 해당. 이 소켓은 연결 요청을 수락훈 후 연결 확인을 기다리는 중이다.
  • ESTABLISHED : 서버 및 클라이언트. 서버와 클라이언트 사이에 작동연결이 구축되어 둘 사이에 데이터가 전송될 수 있다.
  • FIN-WAIT-1 : 서버 및 클라이언트. 이 소켓은 원격 소켓의 연결 종료 요청 또는 이전에 이 소켓에서 전송된 연결 종료요청의 확인을 기다리고 있다.
  • FIN-WAIT-2 : 서버 및 클라이언트. 이 소켓은 원격 소켓의 연결 종료 요청을 기다리는 중이다.
  • CLOSING-WAIT : 서버 및 클라이언트. 이 소켓은 로컬 사용자의 연결 종료 요청을 기다리는 중이다.
  • CLOSING : 서버 및 클라이언트. 이 소켓은 원격 소켓으로 보낸 연결 종료 요처으이 승인을 기다리는 중이다.
  • Last-ACK : 서버 및 클라이언트. 이 소켓은 원격 소켓으로 보낸 연결 종료 요청의 승인을 기다리는 중이다.
  • TIME-WAIT : 서버 및 클라이언트. 이 소켓은 원격 소켓의 중단 요청을 수신했음을 알리기 위해 원격 소켓에 수신확인을 보냈다. 그것은 현재 승인을 받았는지 확인하기 위해 대기중이다.
  • CLOSED : 연결이 없으므로 소켓이 종료되었다.

"UNIX 도메인" 열은 다음과 같다.

  • Proto : 이 소켓에서 사용하는 프로토콜이다. 그것은 "unix"가 될 것이다.
  • RefCnt : 참조 수. 이 소켓에 연결된 프로세스 수 이다.
  • Flags : 일반적으로 소켓이 연결 요청을 대기중임을 의미하는 SO_ACCEPTON으로 설정된다. W로 표시된 SO_WAITDATA는 읽기 대기 중인 데이터가 있음을 의미한다. SO_NOSPACE(N으로 표시)는 소켓에 데이터를 쓸 공간이 없음을 의미한다.( 즉, 송신 버퍼가 꽉 찼음).
  • Type : 소켓 유형. 아래 유형 표 참조.
  • State : 소캣의 상태. 아래의 상태표 참조.
  • I-Node : 이 소켓과 연결된 파일 시스템 inode.
  • Path : 소켓에 대한 파일 시스템 경로.

Unix 도메인 소켓 유형은 다음 중 하나일 수 있다.

  • DGRAM : 소켓이 고정 길이의 메세지를 사용하여 데이터그램 모드에서 사용되고 있다. Datagram은 신뢰할 수 있고 시퀀싱되거나 중복되지 않는 datagram임을 보장하지 않는다.
  • STREAM : 이것은 소켓 연결의 일반적인 "정상" 타입이다. 이러한 소켓은 신뢰할 수 있는 순차적 패킷 전달을 제공하도록 설계되어있다.
  • RAW : 이 소켓은 원시 소켓으로 사용되고 있다. raw 소켓은 OSI 모델의 네트워크 수준에서 작동하며 전송 수준의 TCP 및 UDP 헤더를 참조하지 않는다.
  • RDM : 이 소켓은 안정적으로 배달된 메세지 연결의 한쪽 끝에 있다.
  • SEQPACKET : 이 소켓은 순차 패킷 소켓으로 작동하며, 안정적이고 시퀀싱된 중복되지 않은 패킷 전송을 제공하는 또 다른 수단이다.
  • PACKET : 원시(raw) 인터페이스 엑세스 소켓이다. 패킷 소캣은 OSI 모델의 장치 드라이버 (즉, 데이터 링크 계층) 수준에서 원시 패킷을 수신하거나 전송하기 위해 사용된다.

Unix 도메인 소켓 상태는 다음 중 하나일 수 있다.

  • FREE : 이 소켓은 하당되지 않았다.
  • LISTENING : 이 소켓은 들어오는 연결 요청을 수신하고 있다.
  • CONNECTING : 이 소켓은 연결 중이다.
  • CONNECTED : 연결이 설정되었으며 소켓에서 데이터를 수신 및 전송할 수 있다.
  • DISCONNECTING : 연결이 종료되는 중이다.

와, 정말 많은 정보네요! 많은 netstat 옵션이 어떤 식으로든 결과를 구체화하지만 내용을 크게 바꾸지는 않는다. 한번 보도록 하자.

 

Listing Sockets by Type

netstat -a 명령은 필요한 정보보다 더 많은 정보를 제공할 수 있다.

TCP 소켓만 보거나 표시해야 하는 경우 -t 옵션을 사용하여 TCP 소켓만 표시하도록 제한 할 수 있다.

netstat -at | less

디스플레이 출력이 크게 감소한다. 나열된 몇 개의 소켓은 모두 TCP 소켓이다.

 

U(UDP) 및 -x(UNIX) 옵션은 유사한 방식으로 작동하여 결과를 명령줄에 지정된 소켓 유형으로 제한한다. 

사용 중인 -U 옵션은 다음과 같다.

netstat -au | less

오직 UDP 소켓들만 나열된다.

 

Listing Sockets by State

수신 대기 또는 대기 상태인 소켓을 보려면 -l (listening) 옵션을 사용한다.

netstat -l | less

나열된 소켓은 listening 상태에 있는 소켓이다.

이를 -t, -u (TCP, UDP) 및 -x(UNIX) 옵션과 결합하여 관심 소켓에 홈인 할 수 있다. 수신 TCP 소켓에 대해 알아보자

netstat -lt | less

이제, TCP 수신(listening) 소켓만 보인다.

 

Network Statisics by PRotocaol

프로토콜에 대한 통계를 보려면 -s (statistics) 옵션을 사용하고, -t (TCP), -u(UDP), -x(UNIX) 옵션을 전달한다.

-s(통계) 옵션만 단독으로 사용하면 모든 프로토콜에 대한 통계를 볼 수 있다. 

TCP 프로토콜에 대한 통계를 확인해보자.

netstat -st | less

TCP 연결에 대한 통계 컬렉션은 더 적게 보여진다.

 

Showing Process Names and PIDs

소켓을 사용하여 프로세스의 PID(프로세스 ID)를 프로세스의 이름과 함께 볼 수 있다.

-p(program)옵션은 이 작업만 수행한다. 수신상태에 있는 TCP 소켓을 사용하는 프로세스의 PID와 프로세스 이름이 무엇인지 알아보도록 하자. 일반적으로 루트 권한이 필요한 정보를 포함아여 사용 가능한 모든 정보를 수신하기 위해 sudo를 사용한다.

sudo netstat -p -at

"PID/프로그램 이름"이라는 추가 컬럼이 있다. 각 소켓을 사용하는 프로세스의 PID와 이름을 나열한다.

 

Listing Numeric Addresses

일부 모호성을 제거ㅏ기 위해 취할 수 있는 또 다른 단계는 로컬 및 원격 주소를 확인된 도메인 및 호스트 이름 대신 IP주소로 표시하는 것이다. -n(numeric) 옵션을 사용할 경우 IPv4 주소는 점으로 표시된 십진수 형식으로 표시된다.

sudo netstat -an | less

IP 주소는 숫자 값으로 표시 된다. 포트 번호도 표시되며 IP주소에서 콜론 " : " 로 구분된다.

IP 주소 127.0.0.1은 소켓이 로컬 시스템의 루프백 주소에 속박 되었음을 나타낸다. 0.0.0.0의 IP 주소는 로컬 주소의 경우 "기본 경로"로, 외부 주소의 경우 "임의 IP 주소"로 생각할 수 있다. " :: "로 표시된 IPv6 주소도 모두 0 주소이다.

 

(루프백 : 로컬 루프백 메커니즘은 물리적 네트워크 인터페이스를 요구하지 않고, 또는 컴퓨터가 연결될 수 있는 네트워크에서 접근할 수 있게 만들지 않고 호스트에서 네트워크 서비스를 실행하기 위해 사용될 수 있다. 예를 들어, 로컬로 설치된 웹사이트는 웹 브라우저에서 URL http://localhost로 엑세스 하여 홈 페이지를 표시할 수 있다.)

 

나열된 포트는 일반적인 용도를 쉽게 확인 할 수 있다.

22 : SSH(Secure Shell) 수신 대기 포트.

25 : SMTP(Simple Mail Transfer Protocol) 수신 포트.

53 : DNS(Domain Name System) 수신 포트.

68 : DHCP(Dynamic Host Configuration Protocol) 수신 포트

631 : CUPS(Common UNIX PRinting System) 수신 대기 포트

 

Displaying the Routing Table

-r (route) 옵션은 커널 라우팅 테이블을 표시한다.

sudo netstat -r

열의 의미는 다음과 같다.

  • Destination : 대상, 대상 네트워크 또는 대상 호스트 디바이스 (대상이 네트워크가 아닌 경우).
  • Gateway : 게이트워이 주소, 게이트웨이 주소가 설정되지 않는 경우 여기에 " * "가 나타난다.
  • Genmask : 경로에 대한 서브넷 마스크 이다.
  • Flags : 아래 플래그 표 참조
  • MSS : 이 경로를 통한 TCP 연결에 대한 기본 최대 세그먼트 크기. 하나의 TCP 세그먼트에서 수신할 수 있는 최대 데이터 양.
  • Window : 이 경로를 통한 TCP 연결에 대한 기본 창 크기로, 수신 버퍼가 가득 차기 전에 전송 및 수신할 수 있는 패킷의 수를 나타낸다. 실제로 패킷은 수신 응용 프로그램에 의해 소비된다.
  • irtt : 초기 왕복 시간. 이 값은 커널에서 참조하여 응답 속도가 느린 원격 연결에 한 TCP 매개 변수를 동적으로 조정한다.
  • Iface : 이 경로를 통해 전송된 패킷이 전송되는 네트워크 인터페이스 이다.

플래그 값은 다음 중 하나일 수 있다.

  • U : 루트가 떴다.
  • H : 대상이 호스트이며 이 경로에 가능한 유일한 목적지이다.
  • G : 게이트웨이를 사용한다.
  • R : 동적 라우팅을 위해 경로를 복구한다.
  • D : 라우팅 데몬에 의해 동적으로 설치 된다.
  • M : ICMP(Internet Control Message Protocol) 패킷을 수신할 때 라우팅 데몬에 의해 수정된다.
  • A : 자동 DNS 및 DHCP 구성 파일 생성기인 addrconf에 의해 설치된다.
  • C : 캐시 항목
  • ! : 경로 거부

Finding the Port Used by Process

netstat의 출력을 grep을 통해 pipe하면 프로세스 이름을 검색하여 사용 중인 포트를 식별할 수 있다. 

이전에 검색한 -a(all), -n(numeric), -p(program) 옵션을 사용하고 "sshd"를 검색한다.

sudo netstat -anp | grep "sshd"

아무것도 안뜬다...

grep는 대상 문자열을 찾으며 sshd 데몬이 포트 22를 사용하고 있음을 알 수 있다. (내경우는 안뜬다)

물론, 우리는 이것을 반대로도 할 수 있다. ":22"를 검색하면 어떤 프로세스가 해당 포트를 사용하고 있는지 알 수 있다.

sudo netstat -anp | grep ":22"

 

List the Network Interfaces

-i(interfaces) 옵션은 netstat가 검색할 수 있는 네트워크 인터페이스 테이블을 표시한다.

sudo netstat -i

열이 의미하는 바는 다음과 같다.

  • Iface : 인터페이스의 이름이다. enp0s3 인터페이스는 외부 세계에 대한 네트워크 인터페이스이며 lo 인터페이스는 루프백 인터페이스이다. 루프펙 인터페이스는 컴퓨터가 네트워크에 연결되어 있지 않더라도 프로세스가 네트워킹 프로토콜을 사용하여 컴퓨터 내에서 상호 통신할 수 있게 한다.
  • MTU : (The Maximum Transmission Unit, 최대 전송 단위). 이것은 보낼 수 있는 가장 큰 "packet"이다. 라우팅 및 프로토콜 플래그를 포함하는 헤더와 기타 메타데이터, 그리고 실제로 전송되고 있는 데이터로 구성된다.
  • RX-OK : 오류 없이 수신된 패킷의 수.
  • RX-ERR : 수신된 패킷의 수 (오류 포함). 우리는 이것을 최대한 낮게 하고 싶다.
  • RX-DRP : 손실된 패킷의 수 (즉, 손실됨) 이다. 우리도 최대한 낮게 했으면 한다.
  • RX-OVR : 수신 시 오버플로우로 인해 손실된 패킷의 수 이다. 이것은 보통 수신 버퍼가 가득차서 더 이상의 데이터를 받아들일 수 없었지만, 더 많은 데이터가 수신되어 폐기되어야만 했다는 것을 의미한다. 이 수치가 낮을 수록 좋고, 0이 완벽하다.
  • TX-OK : 오류없이 전송된 패킷 수
  • RX-ERR : 오류와 함께 전송된 패킷의 수 (우리는 이것을 0으로 하고 싶다)
  • TX-DRP : 전송 시 삭제된 패킷의 수 (이상적으로는 이값이 0이 여야 한다)
  • TX-OVR : 전송 시 오버플로우로 인해 손실된 패킷의 수. 이것은 보통 송신 버퍼가 가득 차서 더이상의 데이터를 받아들일 수 없다는 것을 의미하지만, 더 많은 데이터가 전송준비가 되어 버려야 했다.
  • flg : 아래 참조.

flg는 다음을 나타낸다.

  • B : 브로드캐스트 주소가 사용중이다.
  • L : 인터페이스는 루프백 장치이다.
  • M : 모든 패킷이 수신되고 있다. (즉, 비규칙 (promiscuous)모드). 필터링되거나 폐기되는 것은 없다.
  • O : 이 인터페이스의 ARP(Adress Resolution Protocol)가 꺼져 있다.
  • P : PPP(Point-to-Point) 연결.
  • R : 인터페이스가 실행 중.
  • U : 인터페이스가 작동한다.

List Multicast Group Memberships

간단히 말해서, 멀티캐스트 전송은 수신자의 수에 관계없이 패킷이 단 한번만 전송될 수 있게한다. 예를들어, 비디오 스트리밍과 같은 서비스의 경우, 이것은 송신자의 관점에서 효율을 엄청나게 증가시킨다.

sudo netstat -g

열에 대한 설명은 다음과 같다.

  • Interface : 소켓이 전송되는 인터페이스의 이름이다.
  • RefCnt : 소켓에 연결된 프로세스의 수 이다.
  • Group : 멀티캐스트 그룹의 이름 또는 식별자 이다.

The New Kids on the Block

route, ip, ifconfig 및 ss 명령은 netstat가 보여줄 수 있는 많은 기능을 제공할 수 있다.

모두 훌륭한 명령들이고 확인해볼 가치가 있다.

netstat는 유닉스 계열 운영 체제, 잘 알려지지 않은 운영 체제와 관계없이 보편적으로 사용 가능하기 때문에 이에 초점을 맞췄다.

 

 

출처 : 

https://www.howtogeek.com/513003/how-to-use-netstat-on-linux/

 

How to Use netstat on Linux

The Linux netstat command gives you a treasure-trove of information about your network connections, the ports that are in use, and the processes using them. Learn how to use it.

www.howtogeek.com

 

'Linux' 카테고리의 다른 글

1) 리눅스 성능을 모니터링하는 20가지 명령줄 도구  (0) 2022.02.14
시스템 모니터링 관련 명령어  (0) 2022.02.14
Chmod  (0) 2022.02.14
CLI와 리눅스 기본 명령어  (0) 2022.02.11