네트워크핵심 · 17분 읽기

ICMP 메시지 구조와 ping·경로·MTU 해석

Type·Code·Identifier·Sequence와 오류 안에 인용된 원래 패킷을 해석한다. Echo와 traceroute가 알려 주는 범위, PMTUD의 크기 계산과 오류 응답이 없는 조건을 분리한다.

개념부터 찾아보기

정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.

이 노트에서 설명할 수 있게 되는 것

  1. Type과 Code로 ICMP 메시지를 구분한다.
  2. ping과 traceroute가 입증하는 범위를 설명한다.
  3. 작은 패킷 성공·큰 패킷 실패를 MTU와 연결한다.
먼저 알면 좋은 개념IPv4 헤더·서브넷 계산·조각화

01ICMP는 IP의 결과를 보고한다

  • ICMPv4는 IP 전달 중의 오류나 제어 정보를 호스트와 라우터 사이에 전달한다. Protocol 필드 값 1로 구분되며 나 포트를 사용하지 않는다.
    • 메시지를 운반하는 바깥 IP 패킷은 존재하므로 “IP 없이 동작한다”는 뜻도 아니다.
    • ICMPv6는 별도의 메시지 유형과 Next Header 58을 사용한다.
  • 가 IP의 비신뢰성을 신뢰적인 연결로 바꾸는 것은 아니다. 도 유실·차단될 수 있고 모든 실패에 오류를 반환하지 않으며 자체적으로 원래 IP 패킷을 재전송하지 않는다.
    • 오류 보고·상태 진단과 재전송·순서 복구는 별개이며 후자는 나 응용이 담당한다.

02공통 헤더와 종류별 나머지 필드

  • ICMPv4의 공통 시작은 1바이트, 1바이트, Checksum 2바이트이다. 가 2바이트가 아니라는 점에 주의한다.
    • 다음 4바이트의 의미는 메시지 유형에 따라 달라지며 그 뒤에 데이터가 온다.
    • Echo에서는 Identifier 2바이트와 Sequence 2바이트이고, Fragmentation Needed에서는 다음 홉 가 관련되며, Parameter Problem에서는 문제 위치를 가리키는 pointer가 들어간다.
  • Checksum은 메시지 전체를 대상으로 하는 16비트 1의 보수 오류 검사이다. 바깥 헤더 체크섬과 검사 범위가 다르다.
    • 데이터가 손상되었는지 검출하기 위한 값이지 송신자의 신원을 인증하는 서명은 아니다.
    • 만 같다고 동일 의미로 처리하지 말고 와 뒤의 필드를 함께 읽어야 한다.
메시지 / 주요 의미
/ Reply8/0, 0/0식별자·순서 번호·데이터 대응
Network / Host Unreachable3/0, 3/1경로 또는 호스트 도달 불가
Port Unreachable3/3 수신 포트 부재 등의 오류
Fragmentation Needed3/4 때문에 다음 링크에 맞게 조각낼 수 없음
11/0전달 중 TTL 만료
Reassembly timeout11/1수신지 조각 재조립 시간 초과
Parameter Problem12/0IP 헤더 필드 문제 위치 보고

03Echo Request와 Reply의 대응

  • ping은 를 보내고 Reply를 기다린다. 8인 요청에서 Identifier와 Sequence를 정해 여러 요청을 구별하며 응답은 0으로 해당 식별 정보와 데이터를 돌려준다.
    • 캡처 도구가 big-endian과 little-endian 해석을 함께 보여줄 수 있으므로 두 가지 표기를 서로 다른 세션으로 세지 않는다.
    • 실제 프로토콜 바이트와 도구 표시를 구분해야 한다.
  • 는 포트가 아니지만 가 여러 내부 단말의 Echo를 나누기 위해 이 값을 대응시킬 수 있다. Reply의 IP 출발지는 보통 시험 대상이고 목적지는 요청자이다.
    • 반면 오류 메시지의 발신자는 중간 라우터일 수 있다.
    • Ping 출력의 “응답한 주소”와 “시험한 주소”가 다른 경우는 요청의 도착과 중간 실패 보고를 구별하는 단서이다.

04오류 메시지 안에는 원래 패킷이 인용된다

  • 이나 의 바깥 IP는 오류를 만든 장비→원래 송신자이다. 본문에는 오류를 일으킨 원래 IP 헤더와 데이터 일부가 들어가 어느 요청에 대한 실패인지 연결한다.
    • RFC 792의 기본 형식은 원래 IP 헤더와 그 뒤 최소 8바이트를 포함하며, 후속 과 확장에 따라 더 많은 원래 패킷 내용이 실릴 수 있다.
  • 예를 들어 요청이 포트 33434로 나갔다가 중간 TTL이 만료되면 본문에서 원래 목적지와 포트를 읽어 해당 probe를 찾을 수 있다. 캡처에서 헤더가 두 번 보인다고 반드시 IP-in-IP 터널은 아니다.
    • 바깥은 오류 운반용, 안쪽은 실패한 원래 패킷의 인용본이라는 구조를 먼저 확인한다.
원리 심화

05ICMP 오류 안에서 원래 전송을 식별하는 방법

  • 오류 메시지의 바깥 IP 출발지는 오류를 보고한 장비다. 그 안에 인용된 IP 헤더의 출발지·목적지는 실패한 원래 데이터그램을 나타내므로 두 주소쌍을 구분한다.
  • 전통적인 ICMPv4 오류 형식은 원래 IP 헤더와 데이터의 처음 8바이트를 인용한다. 옵션이 있으면 인용된 IHL로 원래 전송 계층 헤더 시작을 계산해야 한다.
  • 헤더는 8바이트이므로 최소 인용만 있어도 출발지·목적지 포트, 길이와 체크섬을 볼 수 있다. 응용 거래 ID는 더 많은 데이터가 인용되어야 볼 수 있다.
  • 의 처음 8바이트에는 양쪽 포트와 Sequence Number가 들어간다. 최소 인용만으로는 ACK 번호·Flags·윈도우까지 읽을 수 없으므로 없는 필드의 값을 추정하지 않는다.
  • 의 는 Network·Host·Port·Fragmentation Needed 등의 원인을 구분한다. 같은 =3이라도 경로 부재와 서비스 포트 부재는 처리할 계층이 다르다.

06Ping 성공과 실패가 증명하는 범위

  • Echo 성공은 해당 시각·출발지·크기의 요청과 응답이 오갔음을 뜻한다. 웹 서버의 인증, 포트, 해석 또는 대용량 전송까지 검증한 것은 아니다.
    • loopback ping은 로컬 IP 스택을, gateway ping은 인접 경로를, 원격 목적지 ping은 그 목적지까지의 Echo 왕복을 각각 제한된 범위에서 보여준다.
  • 응답 TTL은 응답 패킷이 돌아오며 남은 값이다. 상대의 초기 TTL을 모르면 홉 수를 정확히 계산할 수 없고, 초기값의 흔한 패턴만으로 운영체제를 확정할 수도 없다.
    • RTT는 요청·응답 왕복과 종단·제어 처리 시간이 합쳐진 관측값이며 경로 길이나 순수 전파 지연 하나와 같지 않다.
    • 실패 시 “장비가 꺼졌다” 대신 timeout·unreachable·local error 등 관찰된 형태를 적는다.

07Traceroute의 TTL 증가와 응답

  • 전통적 는 높은 목적지 포트와 최종 Port Unreachable을 이용한다. tracert는 Echo를 사용하며 probe 도구도 있다.
  • 각 줄은 해당 probe에 응답한 주소와 RTT다. 제한·ECMP·비대칭 귀환 때문에 고정된 서비스 왕복 경로 지도와 같지는 않다.
  • 중간 홉이 별표여도 뒤 홉이 응답하면 중간 장비의 전달 중단을 뜻하지 않는다. 한 홉만 RTT가 크면 제어 응답 처리 지연도 고려한다.
  1. 첫 probe를 TTL=1로 보낸다. 첫 라우터가 TTL을 소모해 폐기하고 를 보낼 수 있다.
  2. 송신자는 오류 응답과 원래 probe를 연결해 응답 주소·왕복 시간을 기록한다. 응답이 없으면 제한 시간 후 미응답으로 표시한다.
  3. TTL을 2, 3으로 늘리면 더 먼 라우터에서 만료된다. 각 TTL의 probe와 응답을 별도로 대응시킨다.
  4. 선택한 probe 방식의 최종 응답을 받으면 목적지 도달을 판정한다. 중간 응답과 목적지의 응용 서비스 성공은 별도다.
LEARN THROUGH PRACTICE

실습: ping 0/5와 라우팅 테이블 함께 읽기

Echo 응답 부재를 호스트 다운으로 단정하지 않고 목적지 경로부터 검증한다.

실습 구성과 전제

  • R1이 10.128.0.2로 Echo를 보내는 자료다. 화면에는 다른 10 대역의 Connected·Static 경로가 있다.
  • 표 일부만으로 전체 기본 경로까지 확정하지 않는다. 재현에서는 목적지별 조회도 남긴다.
  1. 목적지 포함 여부 계산

    • 10.128.0.2는 10.128.0.0/14에 속한다. 표의 10.192.0.0/14와 10.200.0.0/15는 같은 10으로 시작해도 목적지를 포함하지 않는다.
    • 최장 일치는 실제 목적지를 포함하는 후보들끼리 비교한다.
    text
    show ip route 10.128.0.2
    show ip route

    실습 흐름을 재구성한 명령 예시. 장치·인터페이스 이름은 구성에 맞춰 사용한다.

    경로 부재 시 처리 · 시나리오 1. 내 라우팅 테이블에 IP 대역이 없을 경우 (송신) (1)원본 크기로 보기 ↗
    • Connected와 Static 경로가 섞여 있다.
    • 사진에 나열된 프리픽스에는 10.128.0.0/14가 보이지 않는다.
    확인 기준

    목적지별 조회가 선택한 경로 또는 경로 없음 상태를 확인한다.

  2. 실패 출력의 관찰 사실 기록

    • 100바이트 Echo 5개를 보내고 0/5로 끝났다. 점 표시는 시간 안에 응답을 얻지 못했다는 결과다.
    • 이 결과만으로 목적지 도착·차단·반환 경로 중 무엇이 원인인지 확정할 수 없다. 먼저 로컬 을 확인한다.
    text
    ping 10.128.0.2

    실습 흐름을 재구성한 명령 예시. 장치·인터페이스 이름은 구성에 맞춰 사용한다.

    경로 부재 시 처리 · 시나리오 1. 내 라우팅 테이블에 IP 대역이 없을 경우 (송신) (2)원본 크기로 보기 ↗
    • do ping 10.128.0.2와 Sending 5, 100-byte ICMP Echos가 보인다.
    • Success rate is 0 percent (0/5)로 끝난다.
    확인 기준

    대상과 실패율을 기록하고 다른 대상의 성공으로 대신하지 않는다.

  3. 경로 수정 후 동일 조건으로 재시험

    • 실습 기록은 목표 프리픽스를 등록한 뒤 ping 성공을 확인한다. 정확한 next hop은 연결 구성에서 선택하며 사진에 없는 주소를 만들어 넣지 않는다.
    • 같은 목적지 경로·인터페이스·ping을 재조회한다. 다른 설정까지 동시에 바꾸면 성공 원인을 한 조치에 귀속하기 어렵다.
    text
    show ip route 10.128.0.2
    show ip interface brief
    ping 10.128.0.2

    구성에 맞게 경로를 등록한 뒤 반복하는 검증

    확인 기준

    새 경로와 왕복 Echo를 확인한다. 사진에 없는 성공 횟수는 결과로 꾸미지 않는다.

실습에서 확인한 동작 원리

  • ping 실패는 원인이 아니라 결과다. 경로·주소 해석·차단·반환을 나누어 본다.
  • 같은 목적지의 변경 전후를 비교해야 조치 효과를 설명할 수 있다.

설정·출력 추가로 확인하기 1장

아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.

실습 화면 묶음 01 1장
ICMP 응답의 운영체제 설정 · 선생님 보충원본 크기로 보기 ↗
  • 학습 원본 · ICMP 응답의 운영체제 설정의 선생님 보충에 수록된 화면·도식이다.
동작·명령 참고 문서

08DF와 다음 홉 MTU로 크기를 줄이는 절차

  • 에서 =1인 패킷이 출력 링크 보다 크면 라우터는 이를 임의로 조각낼 수 없다. 적절한 조건에서 3 4와 다음 홉 를 돌려보낸다.
    • 송신자는 이 정보를 바탕으로 경로 추정을 낮추어 다시 전송한다.
    • 정보가 없는 오래된 피드백에 대한 처리와 현대의 Packetization Layer 등 확장은 기본 예와 별도로 이해한다.
  • 라우터는 전달 중 조각화를 하지 않으며 ICMPv6 을 사용한다. 작은 SYN과 작은 요청은 통과하지만 큰 데이터만 멈추는 현상은 PMTU 피드백이 사라지는 의 단서가 될 수 있다.
    • 단, 패킷 크기와 ·재전송·를 확인하지 않은 채 모든 대용량 장애를 로 단정하지 않는다.

설명과 함께 보는 보조 도식

메시지 순서

MTU를 넘은 패킷의 피드백

DF를 설정한 IPv4 송신의 개념적 흐름.

송신자라우터수신자1. 큰 패킷2. 조각화 필요3. 크기 조절4. 정상 전달5. 응답 관찰
전체 단계를 한 번에 읽기
  1. 01

    큰 패킷

    DF=1인 패킷이 다음 링크 MTU보다 크다.

  2. 02

    조각화 필요

    라우터는 전달하지 못한 이유와 MTU 정보를 알린다.

  3. 03

    크기 조절

    송신자가 더 작은 전송 단위를 선택한다.

  4. 04

    정상 전달

    다음 링크가 수용할 수 있는 크기로 전달된다.

  5. 05

    응답 관찰

    상위 서비스의 왕복 결과까지 확인한다.

학습용 메시지 흐름 모식도. 재전송과 구현별 선택 동작은 축약했다.

09Ping payload·IP 길이·MSS의 계산

  • ping의 -l은 데이터 크기이고 -f는 에서 를 설정한다. 옵션이 없을 때 데이터 1472+ 8+ 20=1500이다.
    • 그러므로 1500 경로에서 1472는 이 형식의 대표 시험값이다.
    • 터널이나 더 작은 링크가 있으면 허용되는 값은 낮아지며 이 수치를 설정값으로 무조건 복사하는 것이 아니다.
  • 의 는 payload 크기에 관한 협상 값이다. · 기본 헤더 각 20바이트인 단순 예에서는 1500에 1460을 연결할 수 있지만 옵션과 IP 확장 조건도 계산에 반영한다.
    • 조정은 ·나 모든 터널 문제를 대신 해결하지 않는다.
    • 인터페이스 , 경로 , ping 데이터, 는 측정 대상이 서로 다르다.
text
ping -4 -n 4 203.0.113.20
ping -4 -n 4 -f -l 1472 203.0.113.20
tracert -4 -d 203.0.113.20

Wireshark display filter:
icmp
icmp.type == 3 && icmp.code == 4
icmp.type == 11

의 문서용 시험 예. 허가된 격리 토폴로지의 주소를 가정하며 여기서 실행하지 않는다.

예제로 추적

10MTU 1400 경로에서 IPv4 PMTUD 크기 추적

  1. 헤더 20바이트, Echo 헤더 8바이트, Echo 데이터 1472바이트를 =1로 보낸다고 하자. 전체 IP 크기는 1500바이트다.
  2. 출구 가 1400인 라우터는 이 패킷을 그대로 내보낼 수 없고 때문에 단편화도 할 수 없다. 원래 패킷을 버리고 =3, =4 오류를 보낼 수 있다.
  3. 오류의 Next-Hop =1400을 읽고 인용된 원래 주소·식별자·프로토콜이 내 탐색 패킷과 맞는지 확인한다. 다른 흐름의 오류를 이번 탐색 결과로 섞지 않는다.
  4. 같은 · 헤더 조건이면 Echo 데이터 한계는 1400−20−8=1372바이트다. 1373바이트는 IP 길이 1401이므로 같은 경로· 조건에서 한계를 넘는다.
  5. 큰 패킷이 실패하고 작은 패킷이 성공해도 =4를 못 받았다면 는 후보일 뿐이다. 크기별 정책·수집 손실을 구분하고 경로 변화가 없는 조건에서 재현성을 본다.

11오류에 오류를 되돌리지 않는 조건

  • ICMPv4 오류 메시지를 받은 결과에 다시 오류를 생성하면 오류가 무한 증폭할 수 있으므로 오류에 대한 오류는 보내지 않는다. 이는 Echo 같은 정보 메시지에 대한 모든 오류를 일괄 금지한다는 뜻과 다르다.
    • 라우터의 규칙에는 IP 또는 링크 브로드캐스트·멀티캐스트로 받은 패킷, 첫 조각이 아닌 fragment, 유효하지 않은 출발지 등의 오류 억제 조건도 있다.
  • 장비의 오류 응답 속도 제한과 보안 정책도 추가로 작용한다. 따라서 “잘못된 패킷마다 반드시 하나”라는 모델은 틀리다.
    • 운영 정책 역시 전체 차단·전체 허용이라는 이분법보다 Echo, PMTU 오류, 경로 진단과 ND 등 메시지의 기능을 구분해야 한다.
    • 에는 필요한 메시지와 예외가 달라 억제 규칙을 그대로 옮기면 안 된다.

12실습을 패킷 순서로 다시 읽기

  • 허브·스위치 실습에서 Request→Reply가 선행하고 이어 →Reply가 나타나는 것은 주소 해석과 도달성 시험이 연결된 흐름이다. 다만 캐시가 있으면 가 생략된다.
    • 캡처의 Discover·Offer를 의 D·O 메시지라고 부르면 안 된다.
    • 는 응용이고 는 별개의 IP 프로토콜이다.
  • 분석 기록에는 probe 종류·출발지·목적지·크기·시각, /, 원래 패킷 인용, 어느 위치에서 응답이 관측되었는지를 남긴다.
    • 두 캡처 지점과 장비 출력으로 작은 패킷 성공·큰 패킷 실패의 경계를 재현하면 단순 ping 성공 화면보다 경로와 에 대한 기술 설명이 구체적이 된다.
검증·예외

13오류 메시지가 보장하는 것과 보장하지 않는 것

  • TTL 만료를 보고한 라우터까지 원래 탐색이 도달했고 오류가 돌아왔다는 증거다. 그 라우터가 이후 모든 트래픽을 처리하지 못한다는 의미는 아니다.
  • 대상 호스트 또는 정책 장비가 해당 포트를 사용할 수 없다고 응답한 상황과 연결된다. 응답 주체와 인용된 프로토콜을 확인하며 RST와 같은 패킷으로 취급하지 않는다.
  • Echo 응답 정책과 실제 서비스 정책은 다를 수 있다. ping 실패만으로 443 서비스까지 단절됐다고 결론내리지 않는다.
  • 오류에 대한 추가 오류나 특정 브로드캐스트·단편 상황에서는 오류 생성이 제한된다. 오류가 없다는 사실만으로 패킷이 정상 처리됐다고 역추론할 수 없다.
  • 오류 메시지는 원래 송신자까지 별도의 경로로 돌아온다. 순방향의 특정 홉이 응답하지 않는 현상에는 반환 경로 손실과 rate limit도 포함될 수 있다.
학습 확인

이해했는지 확인하기

  • ping 결과가 실제로 증명하는 범위를 설명할 수 있는가?
  • 중간 홉의 무응답과 최종 목적지 실패를 구분했는가?
  • 작은 요청과 큰 전송의 결과가 다른지 확인했는가?

함께 확인할 공식 자료