Server

네트워크 연결상태인 LISTEN과 ESTABLISHED에 대해 알아보자.

개발허재 2024. 4. 3. 22:40

네트워크 연결 단계를 알아볼 수 있는 명령어에는 netstat과 ss가 있다

 

명령어의 결과에서 LISTEN과 ESTABLISHED 상태는 네트워크 연결의 두 다른 단계를 나타낸다.

 

- LISTEN: LISTEN은 서버 측에서 연결 요청을 기다리고 있는 상태. 즉, 특정 포트에서 들어오는 클라이언트의 연결 요청을 대기. 서버가 특정 포트에서 듣고(listening) 있으며, 클라이언트로부터의 초기 연결 시도(SYN 패킷)를 기다리고 있음을 의미한다.

 

- ESTABLISHED: ESTABLISHED 상태는 TCP 연결이 성공적으로 수립되어 데이터 전송이 가능한 상태. 이 상태는 클라이언트와 서버 간의 3-way 핸드셰이크가 완료되어 양쪽 모두 데이터를 송수신할 준비가 되었음을 의미한다. 즉, 연결이 활성화되어 있고, 실제 데이터 교환이 이루어지고 있는 상태.

 

LISTEN 상태는 서버가 새로운 연결을 받을 준비가 되어 있음을 나타내며, ESTABLISHED 상태는 실제로 연결이 성립되어 데이터 교환이 이루어지고 있음을 나타낸다. 이러한 구분은 네트워크 문제 해결, 성능 모니터링, 보안 분석 등에서 필요한 정보이다 .

 

 

 

Established 확인방법

$ ss -tn state established

 

출력결과 예시

root@BD1DEV-L-KUBESPAWNER-WORKER-001:/home/hsd3030# ss -tn state established

Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port

0      0                          10.70.171.47:934                                     10.70.10.21:2049

 

위의 ss 명령어 출력 결과는 현재 시스템에서 활성화되어 있는 ESTABLISHED 상태의 TCP 연결 정보를 보여줍니다. 각 열이 나타내는 정보는 다음과 같습니다.

 

- Recv-Q: 받기 큐(Receive Queue)의 현재 크기입니다. 이 값이 0이 아니라면, 받은 데이터가 처리를 기다리고 있다는 것을 의미합니다.

 

- Send-Q: 보내기 큐(Send Queue)의 현재 크기입니다. 이 값이 0이 아니라면, 아직 전송되지 않은 데이터가 있다는 것을 의미합니다.

 

- Local Address:Port: 로컬 머신의 IP 주소와 포트 번호입니다. 이 연결의 한쪽 끝을 나타냅니다. 여기서는 10.70.171.47:934입니다. 즉, 로컬 머신의 IP 주소가 10.70.171.47이고, 포트 번호가 934인 것을 나타냅니다.

 

- Peer Address:Port: 상대방(원격) 머신의 IP 주소와 포트 번호입니다. 연결의 다른 한쪽 끝을 나타냅니다. 여기서는 10.70.10.21:2049입니다. 원격 머신의 IP 주소가 10.70.10.21이고, 포트 번호가 2049 것을 나타냅니다.

 

결론적으로, 결과는 로컬 머신의 IP 주소 10.70.171.47 포트 934 원격 머신의 IP 주소 10.70.10.21 포트 2049 성공적으로 연결되어 있으며, 연결은 ESTABLISHED 상태, 활성화되어 데이터 교환이 가능한 상태임을 나타냅니다. 또한, Recv-Q Send-Q 값이 모두 0이므로, 현재 대기 중인 데이터(수신 또는 송신 대기 중인) 없음을 의미합니다.

 

 

추가 예시:

출력결과 예시의 결과에서, telnet 10.70.171.47 934 명령을 실행했을 때 "telnet: Unable to connect to remote host: Connection refused" 오류 메시지가 나타나는 이유가 궁금했다.

  1. 포트가 더 이상 리스닝 상태가 아님: ss -tn state established 명령의 출력 결과에서는 포트 934에 대한 연결이 ESTABLISHED 상태임을 보여줍니다. 하지만, 이는 해당 시점에 연결이 활성화되어 있음을 의미할 뿐, telnet을 시도하는 시점에 해당 포트가 여전히 리스닝 상태인지는 보장하지 않습니다. 즉, telnet을 시도하는 시점에는 해당 포트가 리스닝 상태가 아니어서 연결을 수립할 수 없는 상황일 수 있습니다.
  2. 서비스 또는 애플리케이션이 중지됨: ss 명령의 결과는 특정 시점의 스냅샷입니다. 그 시점에서는 연결이 활성화되어 있었지만, telnet을 시도하는 시점에는 해당 포트를 리스닝하고 있는 서비스나 애플리케이션이 중지되었거나 장애가 발생하여 연결을 수립할 수 없게 되었을 수 있습니다.
  3. IP 주소 또는 포트 번호의 변경: 네트워크 설정 변경으로 인해 서버의 IP 주소나 포트 번호가 변경되었을 가능성도 있습니다. 이 경우, 기존의 IP 주소와 포트 번호로는 더 이상 연결을 수립할 수 없습니다.
즉, 특정 시점에 연결이 활성화되었다는 것의 스냅샷이지 현재 시점 (ss -tn state established)에서 활성화되고 있다는 것을 보장하지 않는다. 반면에 LISTEN은 현재 시점(ss -tuln | grep LISTEN) 에도 활성화가 되어있다는 것을 의미한다.

 

 

LISTEN 확인방법

ss -tuln | grep LISTEN

이 명령어에서 사용된 옵션들의 의미는 다음과 같습니다:

  • -t : TCP 소켓을 보여줍니다.
  • -u : UDP 소켓을 보여줍니다. (LISTEN 상태는 TCP에만 적용되지만, 일반적으로 서버에서 리스닝 중인 포트를 확인할 때 UDP 포트도 함께 확인할 수 있습니다.)
  • -l : 리스닝 중인 소켓만을 보여줍니다.
  • -n : 서비스 이름 대신 숫자 포트 번호로 보여줍니다.