일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- 네트워크
- pagp
- Packet Tracer
- 패킷 필터링
- 오블완
- Ansible
- campus network
- 하프오픈
- pvst+
- eigrp
- ansible playbook
- STP
- vlan
- Cisco
- 헬스 체크
- LACP
- ospf
- gns3
- port aggregation protocol
- 네트워크 설계
- SQL
- 티스토리챌린지
- 방화벽
- 네이티브 vlan
- 연결선 수
- BPDU
- junos os
- Network Design
- 비대칭 경로
- Today
- Total
Doctor Pepper
[네트워크 계층] ICMP(Internet Contral Metssage Protocol) 본문
1. ICMP(Internet Contral Metssage Protocol)
ICMP는 TCP/IP 프로토콜 스택의 네트워크 계층에서 동작하며, 오류 보고, 진단, 테스트 등을 수행하기 위해 설계된 제어 메시지 프로토콜이다. IP는 비신뢰성(Best-Effort)과 비연결형(Connectionless) 특성을 가지므로, 자체적으로 발생한 문제를 보고할 수 없다는 한계를 갖는다. 이를 보완하기 위해 ICMP가 도입되었다.
- IP와 ICMP의 관계
- ICMP는 IP 프로토콜의 보조 프로토콜로, IP 통신 중 발생한 문제를 보고하거나 필요한 정보를 제공하는 역할을 한다.
- RFC 791이 IP 프로토콜을 정의한 문서라면, RFC 792는 ICMP를 정의한 문서로, 두 프로토콜은 밀접하게 연결되어 있다.
- RFC 792에 따르면, "ICMP는 네트워크 계층의 일부로, 모든 IP 모듈에 필수적으로 구현되어야 하며, IP가 자체적으로 문제를 보고할 때 반드시 사용되어야 한다"고 정의되어 있다.
- ICMP 메시지의 유형
에러 보고 메시지 (Error Report Message) |
- IP 계층에서 발생한 지속적인 문제를 보고합니다. ex) 잘못된 목적지 IP 주소로 인해 패킷이 전달되지 않을 때 에러 메시지를 발신지로 전송. |
정보 제공 메시지 (Query Message) |
- 네트워크 상태를 확인하거나 정보를 제공하기 위해 사용됩니다. ex) ping 명령에서 사용되는 에코 요청(Echo Request) 및 에코 응답(Echo Reply). |
- ICMP 메시지의 전송 및 처리
전송 | - 대부분의 ICMP 메시지는 라우터가 생성하지만, 호스트도 메시지를 발생시킬 수 있음 - 일부 메시지(예: Redirect)는 라우터 전용으로 설계되었음 |
처리 | - 수신한 ICMP 메시지는 메시지 유형에 따라 다른 방식으로 처리됨 · IP 관련 메시지: IP 소프트웨어가 처리. · 포트 관련 메시지: 상위 전송 계층(TCP/UDP)이 처리. · 대부분의 에러 메시지는 상위 계층 프로토콜로 전달되어 응용 프로그램이 문제를 인지하고 통신을 중단하도록 함 |
- 주요 특성
구속력 없는 권고사항 | ICMP 메시지는 수신 시스템이 반드시 처리해야 하는 의무가 없음. 이는 네트워크 상태를 알려주는 보조적인 역할로 설계되었기 때문임. |
라우터와 호스트 모두 사용 | ICMP 메시지는 라우터와 호스트 모두가 생성 가능하며, 특정 유형은 라우터에서만 사용됨. |
2. ICMP 에러 메시지 전송 제한
ICMP 에러 메시지는 네트워크 자원(대역폭)을 절약하고 불필요한 제어 메시지의 남용을 방지하기 위해 신중히 전송되어야 한다. 이를 위해 ICMP 에러 메시지 생성에는 몇 가지 제한 규칙이 적용된다.
ICMP 에러 메시지에 응답하여 ICMP 에러 메시지를 생성할 수 없음 |
- ICMP 에러 메시지의 루프를 방지하기 위해, ICMP 에러 메시지에 대해 추가적인 ICMP 에러 메시지를 생성하지 않음. - 예외: ICMP 요청 메시지(Echo Request)에 대한 응답으로 에러 메시지 생성은 허용됨 |
브로드캐스트 또는 멀티캐스트 주소로 전송된 패킷에 대해 에러 메시지 생성 금지 |
- 목적지 주소가 브로드캐스트(예: 255.255.255.255) 또는 멀티캐스트 주소(예: 224.0.0.0~239.255.255.255)일 경우 ICMP 에러 메시지를 생성하지 않음. - 이는 네트워크 상의 불필요한 트래픽 증가를 방지하기 위함임 |
단편화된 패킷의 첫 번째 단편 외에는 에러 메시지 생성 금지 |
- IP 패킷이 단편화된 경우, 첫 번째 단편에만 ICMP 에러 메시지를 생성함. - 나머지 단편에 대해 에러 메시지를 생성하지 않음으로써 불필요한 네트워크 부하를 줄임. |
라우팅 불가능한 주소에 대해 에러 메시지 생성 금지 |
- 라우팅이 불가능한 주소(예: 모두 0으로 설정된 주소, 루프백 주소 127.0.0.0/8 등)에 대해 ICMP 에러 메시지를 생성하지 않음. - 이는 비정상적인 패킷으로 인한 네트워크 오버헤드를 방지하기 위한 조치임. |
3. ICMP 구조 및 메시지 종류
ICMP 패킷은 에러 상황 보고 메시지(에러 보고)와 추가 정보를 제공하는 메시지(정보 제공)로 구분된다. ICMP 헤더는 공통된 구조를 가지며, 패킷 처음 32비트는 다음과 같이 구성된다.
필드 | 크기 | 설명 |
타입(Type) | 1바이트 | ICMP 메시지 타입을 식별하는 필드로 사용됨. 0이면 에코 응답(Echo reply), 8이면 에코 요청(Echo request), 3이면 '목적지 도달 불가(Destination Unreachable)' |
코드(Code) | 1바이트 | ICMP 메시지의 타입에 따른 하위 타입 정보를 표현하는데, 타입 3의 코드 0일 경우에는 타입 3인 '목적지 도달 불가' 타입에서 코드 0인 '네트워크 도달 불가'를 나타냄 |
체크섬(Checksum) | 2바이트 | 16비트의 체크섬 필드로 IP와 유사하게 헤더의 에러 유무를 판단하기 위해 이용됨 |
헤더의 나머지 (Rest of the Header) |
4바이트 | ICMP 타입에 따라 사용 여부가 결정됨 |
데이터(Data) | 가변 | ICMP 타입에 따라 가변 길이의 데이터 부분이 포함됨 에러 보고 메시지의 경우 데이터 부분에 에러를 유발한 수신 패킷의 IP 헤더 전체와 데이터 부분인 상위 UDP 또는 TCP 헤더의 첫 8 바이트를 포함함. 따라서 ICMP 메시지 내에는 UDP, TCP의 출발지와 목적지 포트 번호가 포함됨 |
(1) ICMP 메시지 종류
ICMP 메시지는 에러 보고 메시지와 질의/정보 제공 메시지로 나뉜다.
Error Report(에러 보고) | Query(질의, 정보 제공) | ||
타입 | 메시지 이름 | 타입 | 메시지 이름 |
3 | Destination Unreachable (목적지 도달 불가) |
0 8 |
Echo reply(에코 응답) Echo Request(에코 요청) |
4 | Source Quench(발신지 억제) | 9 10 |
Router Advertisement(라우터 광고) Router Soliciation(라우터 권유) |
5 | Redirection(재지정) | 13 14 |
Timestamp Request(타임스탬프 요청) Timestamp Reply(타임스탬프 응답) |
11 | Time exceeded(시간 초과) | 17 18 |
Address Mask Request(주소 마스크 요청) Address Mask Reply(주소 마스크 응답) |
12 | Parameter problem (파라미터 문제) |
(2) 에러 보고 메시지 세부 내용
- 목적지 도달 불가 (Destination Unreachable)
라우터나 호스트가 패킷을 처리할 수 없을 경우, 패킷을 폐기하고 출발지 호스트에 "목적지 도달 불가" 메시지를 전송한다.
- 타입 3, 하위 코드 0~15를 통해 상세 원인을 나타낸다.
코드 | 메시지 하위 타입 | 설명 |
0 | Network Unreachable (네트워크 도달 불가) |
라우터에 라우팅 정보가 누락되는 경우 등의 라우팅 문제로 인해 발생하며, 간혹 잘못된 주소의 문제일 수 있음 |
1 | Host Unreachable (호스트 도달 불가) |
목적지 네트워크로는 전달됐지만 목적지 호스트로는 전달이 불가한 상태를 알림 |
2 | Protocol Unreachable (프로토콜 도달 불가) |
목적지 호스트에 유효한 프로토콜이 동작하지 않고 있음 |
3 | Port Unreachable (포트 도달 불가) |
목적지 호스트에 유효한 서비스 포트(TCP/UDP)가 듣지 않고 있음. 즉, 서비스 데몬이 실행되고 있지 않음 |
4 | Fragmentation Needed and DG set (DF 설정으로 분할 불가) |
라우터가 패킷 전달 중 단편화돼야 하지만 IP 헤더에 DF(Don't Fragment) 필드가 1로 설정돼 있어 단편화할 수 없어 폐기함을 알림. 이 에러 메시지는 다중 링크를 사용하는 경우의 링크 MTU를 찾기 위해 사용됨 |
5 | Source Route Failed (발신지 라우팅 실패) |
IP 패킷옵션에 발신지 라우팅이 정의돼 있지만 라우터가 정의된 경로로 패킷을 전달할 수 없음을 알림 |
7 | Destination Host Unknown (알 수 없는 목적지 호스트) |
목적지 호스트를 알 수 없음을 목적지의 라우터가 알리며, 대부분 잘못된 IP 주소가 원인임 |
- 에러 메시지는 일반 ICMP 헤더 구조를 따르며, 헤더의 나머지(Rest of the Header) 필드는 모두 0으로 설정된다.
- 발신지 억제(Source Quench)
ICMP는 IP의 흐름 제어 기능을 보완하기 위해 발신지 억제(Source Quench) 메시지를 사용한다. 송신자가 라우터로 보내는 데이터가 과도하여 링크의 트래픽이 혼잡해지고, 라우터의 버퍼가 가득 찬 경우 이 메시지를 통해 혼잡 상황을 알린다.
구조 | - 타입(Type) : 4 - 코드(Code) : 0 (하위 타입 없음) - 헤더 구성 : '헤더의 나머지(Rest of the Header)' 필드는 32비트 0으로 채워짐 - 데이터 : 에러를 유발한 IP 패킷의 전체 헤더와 상위 계층 데이터 8바이트 포함 |
제한 사항 | - 발신지 억제 메시지는 혼잡 상황을 알릴 뿐, 혼잡의 구체적인 원인이나 해결 여부를 제공하지 않음. - 따라서 수신자는 메시지를 통해 자신이 혼잡의 원인인지 판단하기 어려움. |
- 재지정(Redirection)
ICMP 재지정 메시지는 라우터가 더 나은 경로를 가진 다른 라우터의 존재를 통보할 때 사용된다. 이를 통해 최적의 라우팅 경로를 제공한다.
코드 | 메시지 하위 타입 | 설명 |
0 | Network or Subnet (네트워크, 서브넷 재지정) |
메시지를 살생시킨 목적지 주소와 목적지 네트워크로 향하는 모든 패킷을 재지정할 것을 권고함 |
1 | Host(호스트 재지정) | 메시지를 발생시킨 목적지 호스트 주소로 향하는 모든 패킷을 재지정할 것을 권고함 |
타입 5를 사용하는 재지정 메시지의 코드는 0부터 3까지 정의되어 있으나, 코드 2는 IP 필드의 TOS(Type of Service)와 관련되어 사용이 금지되었고, 코드 3은 TOS 필드가 거의 선택적으로 사용되기 때문에 일반적으로 제외된다.
- 시간 초과(Time Exceeded)
TTL(Time to Live) 만료는 IP 패킷이 라우터를 경유할 때 TTL 값이 1씩 감소하다가 0이 되어 폐기된 경우를 알리는 상황이며, 단편화 타이머 만료는 단편화된 IP 패킷이 지정된 시간 내에 재조합되지 못해 수신 시스템이 대기 중인 단편을 모두 폐기하고 이를 알린다.
구조 | - 타입(Type) : 11 - 코드(Code) · 0 : TTL 만료 · 1 : 단편화 타이머 만료 - 헤더 구성 : '헤더의 나머지(Rest of the Header)' 필드는 32비트 0으로 채워짐 - 데이터 : 에러를 유발한 IP 패킷의 전체 헤더와 상위 계층 데이터 8바이트 포함 |
작동 원리 | - TTL 만료 : IP 패킷이 네트워크를 통과하면서 TTL 값이 1씩 감소. 값이 0이 되는 라우터에서 패킷 폐기 후 메시지 생성. - 단편화 타이머 만료 : 수신자가 단편화된 패킷을 재조합하지 못한 경우 타이머 만료 후 메시지 생성. |
(3) ICMP 재지정 동작
두 호스트 Host 1과 Host 2 간의 Ping 통신에서 ICMP 재지정 메시지가 어떻게 동작하는지를 설명한다. 재지정 메시지는 라우팅 경로를 변경하거나 권장하는 기능을 한다. 이를 이해하려면, 목적지 MAC 주소의 변화와 ICMP 타입 5 재지정 메시지에서의 게이트웨이 주소 부분을 주목해야 한다.
초기 설정과 Ping 패킷 전송 |
- Host 1은 no ip routing과 default-gateway 설정을 통해 호스트로 동작하게 설정되었음. - Host 1은 Host 2와의 통신을 위해, R1(기본 게이트웨이)을 향해 Ping 패킷을 전송함. - 이때 Host 1은 패킷의 목적지 MAC 주소를 R1의 MAC 주소로 설정하여 전송함. |
R1의 라우팅 결정 | - R1은 Host 1이 보낸 패킷을 수신한 후, 라우팅 테이블을 확인하여 목적지 서브넷에 대해 자신이 받은 인터페이스와 동일한 서브넷이므로 더 나은 경로가 없다고 판단함. - R1은 ICMP 재지정 메시지(타입 5)를 Host 1으로 보냅니다. 이 메시지에는 "다음 홉"으로 R2의 IP 주소(10.2.99.98)와 MAC 주소(00:10:7B:81:3C:66)가 포함됨. |
ICMP 재지정 메시지와 패킷 포워딩 |
- ICMP 타입 5의 재지정 메시지에는 게이트웨이 주소 10.2.99.98이 포함됨. 이는 Host 1이 이후 Host 2와의 통신을 위해 R2를 사용해야 함을 알려주는 메시지임. - 또한, R1은 Host 1으로부터 받은 패킷을 R2로 포워딩함. 이때 패킷의 MAC 주소는 R1의 MAC 주소(S_MAC: 00:10:7B:81:43:E3)에서 R2의 MAC 주소(D_MAC: 00:10:7B:81:3C:66)로 변경됨. |
Host 1의 후속 동작 | - Host 1은 ICMP 재지정 메시지를 수신한 후, 이후의 통신에서 R2를 통해 패킷을 전송함. 따라서 다음 패킷의 목적지 MAC 주소는 R2의 주소로 설정됨. |
Host 1 # show ip route Default gateway is 10.2.99.99 Host Gateway Last Use Total Uses Interface ICMP redirect cache is empty Host 1 # ping 10.3.71.7 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.3.71.7, timeout is 2 seconds: ! ! ! ! ! Success rate is 100 percent (5/5), round-trip min/avg/max = 20/446/1092 ms Host 1 # show ip route Default gateway is 10.2.99.99 Host Gateway Last Use Total Uses Interface 10.3.71.7 10.2.99.98 0:11 8 FastEthernet0/0 |
(4) ICMP 재지정 동작 조건
ICMP 재지정이 동작하려면 다음 4 가지 조건을 모두 만족해야 한다.
입력 인터페이스와 출력 인터페이스가 동일해야 함 | 라우터에서 패킷이 들어오고 나가는 인터페이스가 동일해야 재지정이 가능함. |
출발지와 다음 홉 네트워크 주소가 동일해야 함 | 출발지 IP 주소의 네트워크와 재지정될 다음 홉 IP 주소의 네트워크가 일치해야 함. |
발신지 라우팅 패킷은 제외됨 | 발신지 라우팅이 적용된 패킷은 ICMP 재지정 대상이 아님. |
시스템 커널이 ICMP 재지정을 지원해야 함 | 라우터 및 호스트 시스템의 커널에서 ICMP 재지정 기능이 활성화되어 있어야 함. |
(5) 질의 및 정보 제공 메시지
ICMP는 라우터나 호스트로부터 시스템 상태를 질의하거나, IP 시스템 동작을 점검하고 테스트하는 데 사용되는 메시지를 전달한다. 이러한 메시지는 네트워크의 동작 상황을 진단하고 문제를 확인하는 데 중요한 역할을 한다.
- 에코 요청/응답(Echo Request/Reply)
에코 요청/응답은 IP 프로토콜의 동작을 검사하는 데 사용된다. 이 메시지를 통해 시스템 간의 연결 상태를 확인할 수 있으며, 이를 기반으로 하는 ping 명령은 다수의 에코 요청과 응답 메시지를 전송하고, 이에 대한 통계 정보를 제공한다.
- ICMP 메시지 포맷
필드 | 설명 |
Type(타입) | 1바이트로 구성도며, ICMP 메시지의 타입을 식별함 에코 요청은 8, 에코 응답은 0의 값이 사용됨 |
Code(코드) | 에코 요청/응답에는 사용되지 않으며, 0으로 설정됨 |
Checksum(체크섬) | ICMP 헤더의 에러 체크를 위한 체크섬 필드 |
Identifier(식별자) | 요청 프로세스의 ID를 표시해 에코 요청/응답 메시지를 매칭하는 식별자 필드 |
Sequence Number (순서 번호) |
일련의 메시지 그룹에서 특정 에코 요청/응답 메시지를 매칭하는 순서 번호 필드 |
- Cisco 장비에서의 ping 테스트 결과
Cisco 라우터 또는 백본에서 ping 테스트 결과로 표시되는 기호들은 다음과 같다.
기호 | 설명 |
! | 각 느낌표는 Ping 요청(echo request)에 대한 응답 수신을 나타냄 |
. | 각 마침표는 응답을 기다리는 동안의 네트워크 서버 시간 만료를 나타냄 |
U | 목적지 도달 불가(Destination Unreachable)을 수신함 |
Q | 발신지 억제(Source Quench)를 수신함 |
M | 단편화되지 못해 폐기됐음을 수신함 |
? | 알지 못하는 패킷 타입임을 수신함 |
& | TTL 값이 0이 돼 폐기됐음을 수신함 |
- 발신지 억제(Source Quench) 메시지
발신지 억제 메시지는 "목적지 서버가 너무 바빠서 자원을 할당할 수 없다"는 의미로 해석할 수 있다. 이 메시지는 일반적으로 ping 테스트에서 Q 기호로 나타나며, 네트워크 성능 문제를 알리기 위해 발생하지만, Telnet이나 FTP와 같은 서비스에는 대부분 영향을 미치지 않는다. 즉, 과도하게 민감하게 반응할 필요는 없다.
- Tracert와 Traceroute의 동작
Traceroute는 ICMP와 IP 헤더의 TTL(Time To Live) 필드를 사용하여 경로를 추적한다. TTL 필드는 IP 패킷이 무한 루프에 빠지지 않도록 생존 시간을 설정하며, 라우터는 패킷을 전송하면서 TTL 값을 하나씩 감소시킨다. TTL이 0이 되면 라우터는 패킷을 폐기하고 송신자에게 ICMP 시간 초과(Time Exceeded) 메시지를 보낸다.
Traceroute의 핵심은 패킷이 지나간 라우터의 IP 주소를 ICMP 에러 메시지를 통해 확인하는 것이다. 이 정보를 통해 송신자는 목적지까지 거치는 경로를 추적할 수 있다.
- 윈도우 계열의 Tracert 동작 : 윈도우에서는 ICMP 에코 요청 메시지를 TTL을 1로 설정하여 전송하고, 각 라우터가 TTL이 0이 되면 시간 초과(ICMP Time Exceeded) 메시지를 응답한다. TTL을 1씩 증가시키며 각 라우터를 거쳐가는 경로를 추적하고, 목적지에 도달하면 ICMP 에코 응답을 받으며 경로 추적이 종료된다.
- 유닉스/리눅스 계열의 Traceroute 동작 : 유닉스/리눅스에서는 UDP 패킷을 사용하여 목적지 포트 번호가 사용되지 않을 가능성이 큰 값을 선택해 송신하고, 각 라우터에서 TTL이 초과하면 ICMP 시간 초과 메시지를 응답한다. 최종 목적지에서 ICMP 포트 도달 불가 메시지를 수신하며 경로 추적이 종료된다.
- Traceroute 결과 기호
기호 | 내용 |
nn msec | 각 노드에 대해 테스트 순서 번호에 대한 라운드 트립(round-trip) 시간을 표시 |
* | 테스트 시간 만료 |
A | 관리자에 의해 제한된(예를 들어 ACL에 적용됨) |
Q | 발신지 억제(SourceQuench)를 수신함(목적지 시스템이 너무 바쁨) |
I | 사용자에 의해 중단된(interrupted) 테스트 |
U | 포트 도달 불가 |
H | 호스트 도달 불가 |
N | 네트워크 도달 불가 |
P | 프로토콜 도달 불가 |
T | 타임아웃 |
? | 알지 못하는 패킷 타입 |
'네트워크 > 네트워크 계층' 카테고리의 다른 글
[네트워크 계층] VRRP & HSRP (2) | 2024.12.05 |
---|---|
[네트워크 계층] 라우팅(Routing) (3) (2) | 2024.12.04 |
[네트워크 계층] 라우팅(Routing) (2) (1) | 2024.11.23 |
[네트워크 계층] 3계층 네트워크 구성 (1) | 2024.11.11 |
[네트워크 계층] 인터넷 프로토콜(Internet Protocol, IP) (3) | 2024.11.06 |