갑자기 서버가 정상적으로 통신이 되지 않거나 서비스가 정상적으로 제공되지 않는 문제가 발생할 때 원인을 빠르게 파악하기 위한 명령어를 알아보자. 모든 명령어는 LINUX 기준으로 설명한다.

ping(Packet InterNet Groper)

네트워크 상태를 확인할 때 가장 많이 사용하는 명령어가 ping이다. 상대 호스트가 살아 있는지 확인하는 것이 목표지만 두 호스트간의 라우팅 경로도 정상적으로 구성되어 있는지 확인 가능하다. ping은 ICMP 프로토콜(네트워크 레이어)을 사용하기 때문에 포트 번호를 따로 작성하지 않는다.

ping [옵션] 목적지_IP
주요 옵션 설명
-c count ping을 보내는 패킷을 몇번 보낼 것인지 지정
-i interval 패킷을 보내는 시간 간격을 설정. 슈퍼 유저의 경우 0.2 이하로 설정 가능(기본 값 1초)
-I interface 패밋을 보낼 때, 출발지 IP를 지정. 실제 IP 값을 지정하거나 인터페이스 이름을 지정하면 출발지 주소가 변경됨. 기본 값은 라우팅 테이블에 의해 나가는 인터페이스의 IP 주소가 출발지 주소가 됨
-s packetsize 패킷 크기를 지정.기본 설정값은 56바이트(8바이트의 ICMP 헤더를 붙여 64바이트로 송신됨)

아래는 8.8.8.8(google dns)로 100바이트 크기의 ping 패킷을 2회 보내는 예제다.

ping

traceroute

패킷이 출발지부터 목적지까지의 네트워크 경로를 확인할 떄 사용할 수 있다. ping 보다 더 상세한 중간 경로의 정보를 얻을 수 있다. RTT(Rount Trip Time)가 높을 경우 어느 구간에서 오래 걸리는지 확인할 수 있다.

traceroute [옵션] 목적지_IP
주요 옵션 설명
-I, –icmp iCMP 기반으로 traceroute 수행
-T, –tcp TCP SYN으로 .traceroute를 수행. 기본 서비스 포트는 80
-n IP 주소를 도메인이 아닌 숫자 형식으로 표시(도메인 리졸브 미 수행)
-p port, –port=port 특정 포틀르 지정해 traceroute 수행
-s src_addr, –source=src_addr 패킷이 나가는 인터페이스가 아닌 별도 IP로 출발지 IP 지정

traceroute

arp(Address Resolution Protocol)

IP 정보로 통신할 때, 실제 서버의 위치를 알아내기 위해서는 MAC 주소가 필요하다. 이런 논리적 주소 IP를 통해 물리적 주소 MAC을 알기위해서 ARP 프로토콜을 사용한다. 먼저 ARP 캐시 테이블을 확인하고 만약 알 수 없는 IP라면 ARP 브로드캐스트로 요청을 보낸다. 요청을 수신한 장비들 중 자신의 IP에 해당하는 장비는 응답으로 MAC 주소를 보낸다. arp 명령을 통해 현재 ARP 캐시 테이블을 확인할 수 있다.

arp

telnet(tele network)

특정 서버의 서비스가 정상적으로 구동되었는지 확인할 때 사용할 수 있다. telnet은 평문으로 사용하므로 보안에 위험이 있을 수 있기 떄문에 서비스 구동여부 확인 용도로만 사용할 것을 권장한다. 원격지 접속 프로토콜로는 telnet대신 SSH을 사용하는 것이 좋다.

telnet 목적지_IP 목적지_Port

telnet

curl(Client Uniform Resource Locater)

FTP, HTTP, HTTPS, SMTP 등 여러가지 애플리케이션 레이어 프로토콜을 이용하여 요청을 보낼 수 있다.

curl [옵션] URL

curl

tcpdump

네트워크 인터페이스로 오가는 패킷을 캡처해 보는 기능을 가지고 있다. 패킷 분석이 필요할 때 사용할 수 있다.

tcpdump [옵션]
주요 옵션 설명
-i 인터페이스 패킷을 캡처할 인터페이스
src IP 주소 출발지 IP 주소를 지정해 필터링
dst IP 주소 목적지 IP 주소를 지정해 필터링
host IP 주소 출발지/목적지에 상관없이 IP 주소를 지정해 필터링
-n 이름으로 표기되는 호스트 네임을 실제 IP 주소로 표기(예: Localhost-> 127.0.0.1)
-nn 이름으로 표기되는 서비스 포트를 실제 포트 번호로 표기(예: http -> 80)
src port 포트 번호 출발지 포트를 지정해 필터링
dst port 포트 번호 목적지 포트를 지정해 필터링
port 포트 번호 출발지/목적지와 상관없이 tcp 포트를 지정해 필터링
tcp 또는 udp tcp 또는 udp만 필터링
-c 출력 수 tcpdump로 출력할 결과의 개수
-w 파일명 tcpdump의 결과를 화면에 출력하지 않고 파일명으로 저장
-r 파일명 파일로 저장한 tcpdump 파일을 화면에 출력

대표적인 예로 HTTP 서비스 패킷을 캡처하기 위해서는 아래와 같은 옵션을 지정할 수 있다.

tcpdump -i eth0 tcp port 80

nslookup(name server lookup)

도메인 관련 내용을 질의해 결과값을 전송받을 수 있는 명령어다. 특정 DNS 서버를 지정하여 전송받을 수 있기 때문에 특정 도메인이 DNS 서버에 잘 적용되었는지 확인할 떄 사용할 수 있다.

DNS 서버를 지정하지 않을 경우 운영체제에서 설정했던 기본 DNS 서버 주소로 질의를 보낸다.

    nslookup 도메인
    nslookup 도메인 DNS서버_IP

nslookup

정리

각 상황에따라 어떤 명령어를 사용할 수 있는지 정리해본다.

  • 호스트 간의 연결이 제대로 이루어져 있는지 확인
    • ping, traceroute(상세 정보)
  • 서버의 특정 포트가 정상적으로 동작하는지 확인
    • telnet
  • 애플리케이션 레이어 수준의 요청이 정상적으로 동작하는지 확인
    • curl
  • 특정 도메인이 DNS 서버에 잘 적용되었는지 확인
    • nslookup
  • 패킷 분석
    • tcpdump

참고 자료

  • IT 엔지니어를 위한 네트워크 입문 (고대성, 이상훈)

댓글남기기