infra
Platform

모듈 맵

[Network] ping과 ICMP 프로토콜을 이용한 초동 경로 진단

0 / 35 완료

펼치기
0 / 35 완료0%

네트워크 트러블슈팅 · 11 / 35

[Network] ping과 ICMP 프로토콜을 이용한 초동 경로 진단

ICMP 원리를 이해하고 ping으로 RTT와 Packet Loss를 분석합니다

🚨INCIDENT ALERT
HIGH

서버가 죽었다는 신고가 들어왔지만 HTTP만 실패하는지 네트워크 자체가 끊긴 건지 아직 모릅니다. 가장 먼저 ICMP로 왕복 가능성과 지연, 손실을 확인해야 합니다.

ping은 만능 진단 도구는 아니지만 첫 번째 분기점입니다. 성공과 실패가 의미하는 범위를 정확히 알아야 합니다.

ping과 ICMP — 네트워크 생사 확인

네트워크 문제가 발생했을 때 가장 먼저 실행하는 명령어는 ping입니다. 단 한 줄로 "저쪽 서버가 살아 있나?" 를 확인할 수 있기 때문입니다. 하지만 ping이 실패했다고 해서 서버가 죽은 것이 아닐 수 있고, ping이 성공했다고 해서 서비스가 정상인 것도 아닙니다. 이 챕터에서는 ICMP 프로토콜의 원리를 이해하고, ping 결과를 정확하게 해석하는 방법을 배웁니다.


ICMP 프로토콜 원리

이번 챕터에서 배울 것
  • 1ICMP 프로토콜이 OSI 3계층(네트워크 계층)에서 하는 역할을 설명할 수 있다
  • 2Echo Request(Type 8)와 Echo Reply(Type 0)의 ping 동작 원리를 이해할 수 있다
  • 3RTT(왕복 지연 시간) 수치를 기준치와 비교해 해석할 수 있다
  • 4Packet Loss와 mdev(지터)를 분석할 수 있다
  • 5ping의 한계인 ICMP 차단 케이스를 이해하고 L4/L7 확인 도구로 보완할 수 있다
  • 6클라우드 환경에서 ICMP 방화벽 정책을 처리할 수 있다
실습 환경 준비
기본 ping 테스트 (4회)
ping -c 4 8.8.8.8
도메인 이름으로 ping (DNS 확인 포함)
ping -c 4 google.com
패킷 크기 지정 ping (MTU 테스트)
ping -c 4 -s 1400 8.8.8.8

클라우드 환경(AWS 등)은 보안 그룹에서 ICMP를 명시적으로 허용해야 ping 응답이 가능

💡개념

ICMP란 무엇인가 — L3 진단 메시지 프로토콜

ping google.com이 안 됩니다. 그런데 curl https://google.com은 됩니다. AWS에서는 ping이 아무 응답도 없습니다. 네트워크가 문제인지, 보안 그룹이 문제인지, 프로토콜이 막힌 건지 알 수 없습니다. ICMP가 어떤 프로토콜이고 TCP/UDP와 어떻게 다른지 알아야 이런 상황에서 "ping 실패 = 네트워크 단절"이 아니라는 판단을 할 수 있습니다.

ICMP란 무엇인가 — L3 진단 메시지 프로토콜확대

**ICMP(Internet Control Message Protocol)**는 IP 네트워크에서 오류 보고와 진단 정보를 전달하기 위한 프로토콜입니다. TCP나 UDP처럼 애플리케이션 데이터를 운반하는 것이 아니라, 네트워크 계층의 상태를 알리는 제어 메시지를 전달합니다.

OSI 모델에서 ICMP의 위치

OSI 7계층에서 ICMP의 위치 — ping이 쓰는 ICMP는 IP와 같은 3계층(네트워크) 프로토콜확대

ICMP는 IP와 동일한 3계층에서 동작하며, IP 패킷 안에 캡슐화되어 전송됩니다. IP 헤더의 프로토콜 번호는 1입니다.

ICMP 주요 메시지 타입

타입 번호이름용도
0Echo Replyping 응답
3Destination Unreachable목적지 도달 불가
8Echo Requestping 요청
11Time ExceededTTL 초과 (traceroute에서 활용)

Echo Request / Echo Reply 흐름

ICMP Echo Request(Type 8)와 Echo Reply(Type 0)의 왕복 흐름 — 요청-응답 왕복 시간이 RTT확대

ping을 실행하면 내 컴퓨터는 **Echo Request(Type 8)**를 보내고, 상대방은 **Echo Reply(Type 0)**로 응답합니다. 이 한 쌍의 교환에서 RTT(Round-Trip Time)를 측정합니다.

ping이 실제로 하는 일 — Echo Request 한 발의 왕복 5단계

💡개념

ping 한 줄을 치면 실제로 무슨 일이 일어나나 — 패킷 발사부터 손실 판정까지 5단계

ping 8.8.8.8 한 줄. Enter를 누르면 잠시 뒤 64 bytes from 8.8.8.8: ... time=31.4 ms가 뜹니다. 이 짧은 순간에 내 커널은 ICMP Echo Request 패킷을 만들어 목적지까지 라우팅하고, 목적지 커널이 Echo Reply로 돌려주며, ping은 보낸 시각과 받은 시각의 차이로 RTT를 계산합니다. 이 흐름을 단계로 알면 "왜 100% 손실이지", "왜 간헐적으로만 빠지지"를 단계별로 좁혀 진단할 수 있습니다.

TEXT
[내 PC]  ping 8.8.8.8
   │
   ① ICMP Echo Request 생성            (Type 8, seq 번호·타임스탬프를 실음)
   │
   ② 라우팅 테이블 조회 → next-hop 결정  (같은 LAN이면 목적지, 아니면 게이트웨이)
   │    → next-hop MAC을 ARP로 해석(캐시 없으면 ARP 요청)
   │
   ③ 목적지까지 홉을 거쳐 전달           (라우터마다 TTL 1씩 감소)
   │
   ④ 목적지 커널이 Echo Reply 회신       (Type 0, 같은 seq·데이터 그대로)
   │    → 되돌아오는 경로도 홉을 거침
   │
   ⑤ 내 PC가 Reply 수신 → RTT 계산       (받은 시각 − 보낸 시각)
   ▼
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=31.4 ms

각 단계에서 무슨 일이 일어나고, 막히면 어떤 증상인가:

단계하는 일여기서 막히면
① Echo Request 생성커널이 ICMP Type 8 패킷에 순번(seq)과 보낸 시각을 실어 만든다로컬 방화벽이 outbound ICMP를 막으면 아예 못 나감 → 전량 손실
② 라우팅·ARP라우팅 테이블로 next-hop을 정하고 그 MAC을 ARP로 해석. 같은 서브넷이면 목적지 직접·아니면 게이트웨이ARP 실패(같은 LAN 상대 꺼짐)·게이트웨이 없음 → Destination Host Unreachable 또는 전량 손실
③ 홉 전달라우터를 지날 때마다 TTL이 1씩 줄며 목적지로 포워딩경로 없음·루프면 라우터가 Time to live exceeded(TTL exceeded) 회신 = 라우팅 루프 신호
④ Echo Reply 회신목적지 커널이 같은 seq·데이터로 Type 0 응답을 만들어 돌려보냄목적지·경로 방화벽이 ICMP 차단(가장 흔함) → 요청은 갔는데 응답 없음. 100% 손실이어도 서버는 살아있을 수 있음
⑤ 수신·RTT 계산돌아온 Reply의 seq를 맞춰 왕복 시간 측정, 안 온 seq는 손실로 집계일부 seq만 빠짐 = 간헐 손실(경로 혼잡·큐 넘침) / RTT가 들쭉날쭉 = 지터

ping 결과는 이 5단계 중 어디까지 갔는지를 읽는 것입니다. 전량 손실(100%)이면 대개 ④에서 막힌 것 — 요청은 나갔지만 경로나 목적지 방화벽이 ICMP를 버린 경우가 서버 다운보다 흔하므로, 같은 대상에 curl·telnet으로 L4를 함께 찔러 서비스 생사와 구분합니다. 간헐 손실이면 ⑤에서 일부 seq만 빠진 것이라 경로 혼잡을 의심해 mtr로 어느 홉인지 좁히고, Time to live exceeded가 뜨면 ③의 라우팅 루프입니다. 경로 자체를 눈으로 보려면 ping -R(Record Route, 경유 홉을 패킷에 기록 — 다만 많은 라우터가 무시)이나 traceroute로 넘어갑니다.

💡개념

RTT와 Packet Loss — ping 결과 수치 해석

ping google.com을 쳤더니 응답이 오긴 하는데 가끔 느립니다. 평균 RTT가 200ms인데 이게 정상인지 이상한지 모르겠습니다. Packet Loss 5%가 나왔는데 심각한 건지 일시적인 건지도 판단이 안 됩니다. ping 수치를 해석할 줄 알아야 "네트워크 느리다"는 막연한 증상을 구체적인 문제로 좁힐 수 있습니다.

RTT와 Packet Loss — ping 결과 수치 해석확대

RTT (Round-Trip Time)

RTT는 패킷이 출발지에서 목적지까지 갔다가 돌아오는 데 걸린 시간입니다. 단위는 **밀리초(ms)**입니다.

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=31.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=30.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=32.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=118 time=31.0 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 30.8/31.3/32.1/0.5 ms

각 항목의 의미:

항목의미
icmp_seq1, 2, 3, 4순서 번호 (빠지면 유실)
ttl118남은 홉 수 (64 또는 128로 시작)
time31.4 ms이 패킷의 RTT
rtt min/avg/max/mdev30.8/31.3/32.1/0.5최소/평균/최대/표준편차

RTT 기준치 해석

< 1ms    : 같은 L2 네트워크 (스위치 내부)
1~5ms    : 같은 데이터센터 내
10~30ms  : 국내 인터넷 (서울 ↔ 부산)
100ms~   : 해외 인터넷 (한국 ↔ 미국)
500ms~   : 심각한 지연, 사용자 체감 불편

Packet Loss

패킷 손실률은 전체 전송 패킷 대비 응답이 없는 패킷의 비율입니다.

4 packets transmitted, 3 received, 25% packet loss
  • 0%: 정상
  • 1~5%: 경미한 네트워크 불안정 (무선 환경에서 간헐적으로 발생)
  • 5% 이상: 의미 있는 네트워크 품질 문제
  • 100%: ICMP 차단 또는 목적지 완전 단절

mdev (평균 편차)가 중요한 이유

mdev가 크면 RTT가 불규칙하게 변동한다는 의미입니다. 평균 RTT가 낮아도 mdev가 크면 **네트워크 지터(jitter)**가 심한 것으로, 실시간 통신(VoIP, 게임) 품질에 문제를 일으킬 수 있습니다.


실습 — ping 분석

기본 ping 실행 및 결과 해석

가장 기본적인 ping 명령어로 외부 DNS 서버에 연결을 테스트합니다.

로컬 터미널
# 실습 디렉토리 준비
mkdir -p /tmp/networking/part3/exam_11 && cd /tmp/networking/part3/exam_11

# -c 4: 4개 패킷만 보내고 종료 (무한 루프 방지)
ping -c 4 8.8.8.8
🔍실행 후 확인할 것
  • packet loss — 먼저 확인0%: 정상. 1% 이하: 허용 범위(무선 환경). 5% 이상: 네트워크 품질 문제(즉시 조사). 100%: ICMP 차단 또는 목적지 단절.
  • RTT 판단 기준표루프백(127.0.0.1): 0.1ms 이하 / 같은 데이터센터·AZ: 1ms 이하 / 같은 리전(수백km): 5~20ms / 대륙 내(한국-일본): 20~50ms / 대륙 간(한국-미국): 150~200ms / 위성 연결: 600ms 이상.
  • mdev(표준편차) 판단mdev 1ms 이하: 안정적. mdev 10ms 이상: 지터 심함(VoIP, 게임 품질 저하). RTT 평균이 낮아도 mdev가 크면 실시간 서비스에 문제 발생.
  • DNS 분리IP ping 성공 + 도메인 ping 실패 → DNS 설정 문제(/etc/resolv.conf 확인). IP ping 실패 → L3 네트워크 문제로 DNS 불필요.
  • 조합 해석 — RTT 높음 + loss% 낮음물리적 거리 또는 네트워크 혼잡에 의한 정상적 지연입니다. 링크 품질 자체는 양호합니다.
  • 조합 해석 — RTT 높음 + loss% 높음링크 품질 문제입니다. 재전송과 지연이 복합적으로 발생합니다. mtr로 어느 홉에서 발생하는지 추적하세요.
  • 조합 해석 — RTT 매우 낮음(0.01ms 이하)루프백으로 응답하는 것입니다. 실제 목적지 서버까지 패킷이 도달하지 않았습니다. 라우팅 문제 또는 로컬호스트 설정 확인이 필요합니다.

예상 출력: 정상 응답 시 이런 형태로 출력됩니다.

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=31.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=30.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=31.5 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=118 time=31.1 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 30.9/31.1/31.5/0.2 ms

결과 체크리스트:

  • 0% packet loss 확인
  • time 값이 예상 범위인지 확인
  • icmp_seq 번호에 빈 칸이 없는지 확인 (순서 유실)

추가 옵션 실습: -c, -i, -s 옵션으로 ping 동작을 제어합니다.

로컬 터미널
# -i 0.2: 0.2초 간격으로 전송 (기본 1초)
ping -c 10 -i 0.2 8.8.8.8

# -s 1400: 패킷 크기 1400바이트 (MTU 테스트용)
ping -c 4 -s 1400 8.8.8.8

# -W 1: 응답 대기 시간 1초로 제한
ping -c 4 -W 1 192.168.1.1
도메인 이름으로 ping — DNS 해석 포함

IP 주소 대신 도메인 이름으로 ping을 실행하면 DNS 해석이 선행됩니다.

로컬 터미널
ping -c 4 google.com

예상 출력:

PING google.com (142.250.196.110) 56(84) bytes of data.
64 bytes from kix07s05-in-f14.1e100.net (142.250.196.110): icmp_seq=1 ttl=118 time=32.1 ms
...

중요 관찰 포인트: TTL과 응답 시간(ms)으로 네트워크 상태를 판단합니다.

ping google.com      → 성공 (DNS + ICMP 모두 정상)
ping 8.8.8.8         → 성공 / ping google.com 실패 → DNS 문제
ping 8.8.8.8         → 실패                         → L3 네트워크 문제

진단 흐름 정리: ping 결과 유형별로 다음 조치가 달라집니다.

IP ping 실패?
    YES → 라우팅/물리 연결 문제 (L1~L3 확인)
    NO  → 도메인 ping 실패?
              YES → DNS 설정 문제 (/etc/resolv.conf 확인)
              NO  → 서비스 포트 문제 가능성 (telnet/curl로 L4 확인)
ping으로 할 수 없는 것 — L4/L7 확인 방법

ping이 성공해도 서비스가 동작하지 않을 수 있습니다. 각 계층별 확인 도구를 사용해야 합니다.

로컬 터미널
# ping: L3 도달 가능성 확인
ping -c 2 192.168.1.100
# → 성공해도 HTTP 서비스가 죽어있을 수 있음

# telnet: TCP 포트 열려있는지 확인 (L4)
telnet 192.168.1.100 80
# → "Connected" 나오면 80 포트 열려있음
# → "Connection refused" 나오면 포트 닫힘

# curl: HTTP 응답 확인 (L7)
curl -v http://192.168.1.100/
# → HTTP 상태 코드 확인 (200, 404, 500 등)

# nc (netcat): 포트 스캔
nc -zv 192.168.1.100 80 443

계층별 진단 도구 정리: 문제 계층에 맞는 도구를 선택하면 진단 속도가 빨라집니다.

L3 (네트워크): ping, traceroute, mtr
L4 (전송):     telnet, nc, nmap
L7 (응용):     curl, wget, httpie

트러블슈팅

증상

웹 브라우저로 서버에 접속되고 SSH도 되는데, ping만 응답이 없습니다.

로컬 터미널
ping -c 4 my-server.example.com
# PING my-server.example.com (203.0.113.10): 56 data bytes
# Request timeout for icmp_seq 0
# Request timeout for icmp_seq 1
# Request timeout for icmp_seq 2
# Request timeout for icmp_seq 3
# --- my-server.example.com ping statistics ---
# 4 packets transmitted, 0 packets received, 100.0% packet loss

하지만 서비스는 살아있습니다:

로컬 또는 서버
curl -I http://my-server.example.com
# HTTP/1.1 200 OK
# ...

원인

ICMP 패킷이 방화벽이나 보안 정책에 의해 차단되고 있습니다.

클라우드 환경 (AWS 예시): AWS Security Group에서 ICMP를 명시적으로 허용해야 합니다.

AWS 보안 그룹 인바운드 규칙 확인:
- HTTP (80): 0.0.0.0/0 허용 ← 웹은 됨
- SSH (22): 내 IP 허용       ← SSH는 됨
- ICMP: (규칙 없음)          ← ping 안 됨!

리눅스 OS 방화벽 (iptables/firewalld): 호스트 자체 방화벽이 ICMP를 차단하는 경우입니다.

로컬 터미널
# 현재 iptables 규칙 확인
sudo iptables -L -n | grep icmp

# firewalld 확인
sudo firewall-cmd --list-all | grep icmp

해결책

AWS 보안 그룹에서 ICMP 허용: 보안 그룹 인바운드 규칙에 다음을 추가합니다:

  • 유형: All ICMP - IPv4
  • 소스: 0.0.0.0/0 (또는 특정 IP)

리눅스 iptables에서 ICMP 허용: 인바운드 ICMP echo-request를 허용하는 규칙입니다.

위험 명령어

이 명령은 방화벽 정책을 변경해 현재 접속 중인 세션이나 운영 트래픽에 즉시 영향을 줄 수 있습니다. 적용 전 허용 대상 IP·포트와 롤백 명령을 확인하세요.

로컬 터미널
# ICMP Echo Request 허용
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

firewalld에서 ICMP 허용: firewalld를 사용하는 RHEL 계열 설정 방법입니다.

위험 명령어

이 명령은 방화벽 정책을 변경해 현재 접속 중인 세션이나 운영 트래픽에 즉시 영향을 줄 수 있습니다. 적용 전 허용 대상 IP·포트와 롤백 명령을 확인하세요.

로컬 터미널
sudo firewall-cmd --add-icmp-block-inversion --permanent
sudo firewall-cmd --reload
# 또는 특정 존에만 허용
sudo firewall-cmd --zone=public --remove-icmp-block=echo-request --permanent

중요 원칙

ping 실패 ≠ 서버 다운
ping 성공 ≠ 서비스 정상

ping은 ICMP(L3) 도달 가능성만 확인합니다.
서비스 가용성은 해당 프로토콜(L4~L7)로 직접 확인해야 합니다.

증상

대부분의 ping은 성공하지만 간헐적으로 유실됩니다.

로컬 터미널
ping -c 20 192.168.1.1
# ...
# 20 packets transmitted, 17 received, 15% packet loss
# rtt min/avg/max/mdev = 0.5/2.3/45.2/9.8 ms

mdev가 9.8ms로 크고 최대 RTT가 45.2ms로 튀었습니다.

원인 분석

로컬 터미널
# 더 긴 시간 동안 모니터링
ping -c 100 -i 0.5 192.168.1.1

# mtr로 각 홉별 패킷 손실 위치 특정
mtr --report --report-cycles 20 8.8.8.8

mtr 출력 예시: 각 홉의 패킷 손실률과 지연 시간을 한 번에 볼 수 있습니다.

HOST: myserver              Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. 192.168.1.1             0.0%    20    0.6   0.7   0.5   1.1   0.2
  2. 10.0.0.1               0.0%    20    5.2   5.1   4.8   5.9   0.3
  3. 203.0.113.1            15.0%   20    8.3  12.4   7.1  45.2   9.8  ← 여기서 손실!
  4. 8.8.8.8                 0.0%    20   31.2  31.1  30.8  31.6   0.2

3번 홉에서 15% 손실이 발생하고 있습니다. 이 구간의 라우터나 링크에 문제가 있습니다.

해결 방향

  • ISP 구간 문제: 인터넷 서비스 제공업체에 장애 신고
  • 스위치/라우터 문제: 해당 장비의 인터페이스 에러 카운터 확인
  • 무선 환경: 채널 간섭, 신호 약화 확인 (iwconfig, iwlist)

심화 — mtr 중간 홉의 손실에 속지 마라

💡개념

심화: ICMP는 특별 대우를 받지 않는다 — 중간 홉 손실의 착시

mtr에서 경로 중간 홉에 빨간 손실이 뜨면 '저기가 범인'이라 결론짓기 쉽지만, 그 손실은 진짜 장애가 아니라 라우터가 ICMP를 홀대한 흔적일 때가 더 많습니다. ping·traceroute·mtr이 의존하는 ICMP가 라우터에서 어떻게 처리되는지 알아야 오진과 잘못된 ISP 신고를 피합니다.

  • 라우터는 통과 트래픽과 자기에게 온 트래픽을 다르게 처리한다: 데이터 포워딩은 하드웨어(빠른 경로)로 처리하지만, 자신을 목적지로 하는 ICMP(에코, TTL 만료 응답)는 CPU(제어 평면, 느린 경로)로 올려 처리하고 rate-limit을 겁니다.
  • 그래서 중간 홉 손실·지연은 과장된다: mtr 중간 홉의 손실률·RTT는 '그 라우터가 ICMP 응답을 얼마나 후순위로 미뤘나'를 반영할 뿐, 실제 데이터 포워딩 성능이 아닙니다.
  • 진짜 손실을 구별하는 규칙: 중간 홉에서 손실이 보여도 그 다음 홉·최종 목적지의 손실이 0이면 무시해도 됩니다(ICMP 홀대). 반대로 손실이 어떤 홉부터 끝까지 계속 이어지면 그 지점이 진짜 문제입니다.
  • 목적지(끝 홉)의 손실만이 서비스 품질을 말한다: 최종 홉의 손실률·지터가 실제 사용자 경험과 직결됩니다. 중간 홉 숫자에 휘둘리지 마세요.

즉 mtr을 읽을 때는 '어느 홉이 빨간가'가 아니라 '손실이 목적지까지 전파되는가'를 봐야 합니다.

상황

특정 서비스가 느리다는 신고에 mtr을 돌렸더니 경로 중간(3번 홉)이 20% 손실로 빨갛게 표시됩니다. "저 홉이 범인"이라며 ISP에 신고하려는데, 정작 그 아래 홉들과 최종 목적지는 손실 0%입니다.

원인

3번 홉 라우터가 자신을 향한 ICMP(TTL 만료 알림)를 제어 평면에서 rate-limit한 것입니다. 통과하는 실제 데이터는 하드웨어 빠른 경로로 정상 포워딩되므로, 그 뒤 홉과 목적지에는 손실이 없습니다. 3번의 20%는 '그 라우터가 ICMP 응답을 후순위로 미룬 흔적'이지 데이터 손실이 아닙니다.

진단

로컬 터미널
# 표본을 늘려 손실이 지속되는지, 산발적인지 확인
mtr --report --report-cycles 100 8.8.8.8

손실이 특정 홉에서만 반짝하고 다음 홉부터 0으로 돌아오면 착시입니다. 진짜 손실이라면 문제 홉부터 최종 목적지까지 손실이 이어집니다.

해결

중간 홉 손실이 목적지로 전파되지 않으면 정상으로 판단하고, 다른 원인(애플리케이션·L4/L7)을 찾습니다. 목적지까지 손실이 이어질 때만 그 첫 손실 홉을 근거로 경로·ISP 문제를 제기합니다. ICMP를 홀대하는 홉을 '장애'로 오인해 엉뚱한 곳에 신고하지 않는 것이 핵심입니다.


실무 맥락

💼
실무 맥락
현업 패턴

장애 대응 시 첫 번째 확인

서버 모니터링 알람이 울렸을 때 인프라 엔지니어의 첫 번째 행동은 ping입니다.

로컬 터미널
# 1단계: 네트워크 도달 가능성 확인
ping -c 4 prod-web-01.internal
# → 실패하면 네트워크/전원 문제
# → 성공하면 서비스 레이어 문제

# 2단계: 서비스 포트 확인
curl -s -o /dev/null -w "%{http_code}" http://prod-web-01.internal/health
# → 200이면 서비스 정상
# → 타임아웃이면 애플리케이션 문제

# 3단계: 여러 서버 동시 확인 (배시 루프)
for host in web-01 web-02 web-03; do
    ping -c 1 -W 1 ${host}.internal > /dev/null 2>&1 \
        && echo "${host}: UP" \
        || echo "${host}: DOWN"
done

SLA 모니터링에서의 RTT

클라우드 서비스에서는 리전 간 레이턴시가 SLA에 영향을 줍니다.

로컬 터미널
# 서울 → 도쿄 리전 레이턴시
ping -c 10 ap-northeast-1.aws.example.com
# 약 30~35ms가 정상

# 서울 → 버지니아 리전 레이턴시
ping -c 10 us-east-1.aws.example.com
# 약 180~200ms가 정상

모니터링 시스템에서의 ICMP 활용

Prometheus + Blackbox Exporter를 사용하면 ping을 지속적으로 모니터링하고 알람을 설정할 수 있습니다.

YAML
# blackbox.yml 예시
modules:
  icmp_check:
    prober: icmp
    timeout: 5s
    icmp:
      preferred_ip_protocol: ip4

현업에서 알아두면 좋은 것들

  1. 클라우드 환경에서 ICMP는 기본 차단: AWS, GCP, Azure 모두 보안 그룹에서 명시적으로 허용해야 ping이 됩니다.
  2. ping 성공 = 서비스 가용성이 아님: 장애 원인 파악은 L4~L7까지 계층별로 내려가야 합니다.
  3. 대용량 트래픽 경고: 프로덕션 서버에 ping -f(flood ping)는 절대 사용하지 마세요. 네트워크 부하를 유발합니다.
  4. 방화벽 정책 문서화: ICMP 허용/차단 정책을 팀 Wiki에 명확히 기록해두면 장애 시 빠른 판단이 가능합니다.

정리

이 챕터에서 배운 핵심 내용입니다.

ICMP (L3 프로토콜)

  • Echo Request (Type 8): ping 보내기
  • Echo Reply (Type 0): ping 응답
  • 기타: Destination Unreachable, Time Exceeded

ping 결과 해석

  • RTT: 왕복 지연 시간 (낮을수록 좋음)
  • Packet Loss: 유실률 (0%가 정상)
  • mdev: 지터 (낮을수록 안정적)

ping 한계

  • ICMP 차단 = ping 실패 ≠ 서버 다운
  • ping 성공 ≠ L4/L7 서비스 정상

계층별 진단 도구

  • L3: ping, traceroute, mtr
  • L4: telnet, nc, nmap
  • L7: curl, wget

명령어·단축키 빠른 참조

이 모듈에서 다룬 ping·ICMP 경로 진단 명령을 실전 옵션과 함께 모았습니다. "예" 열의 조합을 그대로 써도 됩니다.

명령어/옵션용도자주 쓰는 예
ping -c <N>지정 횟수만 보내고 종료(무한 방지)ping -c 4 8.8.8.8
ping -i <초>전송 간격 조절(촘촘히 관찰)ping -c 10 -i 0.2 8.8.8.8
ping -s <바이트>패킷 크기 지정(MTU 테스트)ping -c 4 -s 1400 8.8.8.8
ping -W <초>응답 대기(타임아웃) 제한ping -c 4 -W 1 192.168.1.1
mtr --report홉별 손실·지연 위치 추적mtr --report --report-cycles 100 8.8.8.8
traceroute <host>목적지까지 경로(홉) 추적traceroute 8.8.8.8
telnet <host> <port>포트 열림(L4) 확인 — ping 보완telnet 192.168.1.100 80
nc -zv <host> <ports>데이터 없이 포트 스캔(L4)nc -zv 192.168.1.100 80 443
curl -I <url>서비스 응답(L7) 확인curl -I http://my-server.example.com
iptables … --icmp-type echo-request호스트 방화벽에서 ICMP 허용sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
firewall-cmd --list-allfirewalld의 ICMP 차단 여부 확인sudo firewall-cmd --list-all | grep icmp

관련 모듈로 더 깊이:

다음 챕터에서는 traceroute를 사용하여 패킷이 목적지까지 어떤 경로를 거치는지 추적하는 방법을 배웁니다.

지식 확인

퀴즈 — 8문제

Q1

웹 서버(port 443)에 접속이 안 된다는 장애 신고가 들어왔습니다. `ping <서버IP>`는 정상 응답합니다. 이 결과로 확인된 것과 아직 확인되지 않은 것은 무엇입니까?

Q2

ping 명령어를 실행했을 때 'Request timeout'이 발생했습니다. 이 결과만으로 확실하게 알 수 있는 사실은 무엇입니까?

Q3

`ping -c 4 8.8.8.8` 결과에서 '4 packets transmitted, 3 received, 25% packet loss'가 표시되었습니다. 이 상황을 올바르게 해석한 것은?

Q4

클라우드 AWS EC2 인스턴스에서 웹 서비스가 정상 동작 중인데도 ping이 응답하지 않습니다. 가장 먼저 확인해야 할 것은?

Q5

ping으로 확인할 수 없는 것은 무엇입니까?

Q6

ping -c 10 결과에서 RTT(왕복 시간, 예: min/avg/max/mdev = 1.2/45.0/210/60 ms)를 해석할 때 무엇을 봐야 하나?

Q7

[심화] mtr에서 경로 중간 홉에 큰 패킷 손실이 보이는데 최종 목적지는 손실이 0이다. 이 현상의 가장 흔한 원인은?

Q8

[심화] mtr 결과에서 진짜 문제 구간과 ICMP 홀대로 인한 착시를 구별하는 기준은?

0 / 8 답변

🧪 실습으로 확인하기

포트는 열렸다는데 왜 안 되지? — ss/netstat/telnet으로 TCP 진단

초급

"포트 8080 열었는데요?"와 "왜 안 돼요?" 사이의 간극을 메우는 실습. ss로 바인딩 상태를 확인하고, telnet/nc으로 원격 연결을 테스트하고, iptables 방화벽을 진단하고, 바인딩 주소(0.0.0.0 vs 127.0.0.1)까지 수정하는 4단계 TCP 포트 진단 플로우를 완성한다.

35📋 4단계💻 직접 환경
실습 시작하기 →

이것도 배워보세요