리눅스 ping 명령어 완벽 가이드

ping 명령어 기본 구조

ping [옵션] 목적지

ping 명령어는 ICMP 프로토콜을 사용해 ECHO_REQUEST(에코 요청) 데이터그램을 네트워크 호스트로 전송하고, ECHO_RESPONSE(에코 응답)을 수신하여 네트워크 연결 상태를 진단합니다. 전송되는 패킷은 IP 헤더와 ICMP 헤더, 타임스탬프, 그리고 패딩(pad) 바이트로 구성됩니다.

주요 옵션 설명

옵션 설명
-b 브로드캐스트 주소로 ping 전송을 허용
-c count 지정된 횟수(count)만큼 ECHO_REQUEST 패킷을 전송. -w 옵션과 함께 사용 시, deadline 전에 count만큼 응답을 기다림
-d 사용 중인 소켓에 SO_DEBUG 옵션 설정. 리눅스 커널에서는 이 옵션이 실질적으로 사용되지 않음
-f 플러드(flood) 모드. 패킷 전송마다 점(.)을 출력하고, 응답 수신 시 백스페이스(Backspace)를 출력하여 손실률을 실시간 확인. 기본 간격은 0이며, 루트 권한 필요
-i interval 패킷 전송 간격(초). 기본값은 1초, 플러드 모드에서는 대기 없음. 0.2초 미만 간격은 루트만 설정 가능
-I interface 소스 주소를 특정 인터페이스 주소로 설정. IPv6 링크로컬 주소 ping 시 필수
-l preload 응답을 기다리지 않고 미리 전송할 패킷 수(preload) 지정. 3 이상은 루트만 가능
-n 숫자 출력 모드. 호스트 이름을 조회하지 않고 IP 주소만 표시
-p pattern 최대 16바이트의 패딩 패턴 지정. 예: -p ff는 패킷 전체를 0xFF로 채움
-q 조용한(quiet) 모드. 시작 및 종료 시의 요약 정보만 출력
-r 라우팅 테이블을 무시하고 직접 연결된 인터페이스를 통해 전송. 대상이 직접 연결 네트워크에 없으면 에러 반환
-R 라우트 기록(record route) 옵션 활성화. IP 헤더는 최대 9개 라우트 정보만 저장 가능
-s packetsize 전송할 데이터 바이트 수 지정. 기본 56바이트 (ICMP 헤더 8바이트와 합쳐 총 64 ICMP 데이터 바이트)
-t ttl IP TTL(Time To Live) 값 설정
-v 상세(verbose) 출력
-w deadline 종료 시간(초) 지정. deadline이 도래하거나 count 완료, 또는 네트워크 오류 발생 시 종료. 패킷 응답 시간 제한이 아님에 주의

사용 예제

브로드캐스트 주소 ping

$ ping 192.168.1.255
Do you want to ping broadcast? Then -b. If not, check your local firewall rules.

$ ping -b 192.168.1.255
WARNING: pinging broadcast address
PING 192.168.1.255 (192.168.1.255) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.521 ms
64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.812 ms (DUP!)
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.95 ms (DUP!)
^C
--- 192.168.1.255 ping statistics ---
1 packets transmitted, 1 received, +3 duplicates, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.521/0.956/1.951/0.617 ms

지정 횟수만큼 ping (예: 구글 DNS)

$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=28.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=28.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=28.3 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=118 time=28.9 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 28.342/28.594/28.931/0.236 ms

전송 간격 조정 (0.3초)

$ ping -c 3 -i 0.3 example.com
PING example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34: icmp_seq=1 ttl=50 time=52.1 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=50 time=51.8 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=50 time=52.4 ms

--- example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 600ms
rtt min/avg/max/mdev = 51.821/52.121/52.411/0.295 ms

네트워크 계층 구조 이해

네트워크 통신에서 데이터는 계층별로 캡슐화(encapsulation)됩니다. 각 계층의 PDU(Protocol Data Unit) 명칭은 다음과 같습니다.

  • 데이터 링크 계층: 프레임(Frame) — MAC 헤더, LLC 헤더, IP 패킷, FCS(Frame Check Sequence) 포함
  • 네트워크 계층: 패킷(Packet) — IP 헤더 + TCP 세그먼트 또는 UDP 데이터그램
  • 전송 계층: 세그먼트(Segment, TCP) 또는 데이터그램(Datagram, UDP) — 전송 계층 헤더 + 상위 데이터
  • 응용 계층: 메시지(Message) — 최상위 사용자 데이터

데이터 캡슐화 과정: 상위 계층 데이터 → 전송 계층 헤더 추가 → 네트워크 계층 헤더 추가 → 데이터 링크 계층 헤더와 트레일러 추가 → 비트 스트림으로 변환

소켓과 SO_DEBUG

소켓(Socket)은 IP 주소와 포트 번호의 조합으로 네트워크 통신 엔드포인트를 추상화한 것입니다. TCP 소켓에서 SO_DEBUG 옵션을 활성화하면 커널이 해당 소켓을 통해 송수신되는 모든 패킷의 상세 추적 정보를 링 버퍼에 저장하며, 이는 trpt 프로그램으로 확인 가능합니다.

ICMP 프로토콜

ICMP(Internet Control Message Protocol)는 IP 호스트와 라우터 간 제어 메시지(네트워크 장애, 호스트 도달 가능성, 라우팅 문제 등)를 교환하기 위한 프로토콜입니다. 사용자 데이터를 직접 전송하지는 않지만, IP 통신의 신뢰성을 유지하는 데 필수적입니다.

TTL(Time To Live)

TTL 필드는 IP 패킷이 네트워크에서 무한히 순환하는 것을 방지하기 위해 설정된 최대 홉(hop) 수입니다. 패킷이 라우터를 통과할 때마다 1씩 감소하며, 0이 되면 해당 패킷은 폐기되고 발신자에게 "Request time out" 메시지가 전송됩니다. 최대 TTL 값은 255입니다.

태그: ping ICMP linux 네트워크 진단 TTL

6월 22일 01:04에 게시됨