본문 바로가기

네트워크, 보안

네트워크 기초 - ICMP

1. ICMP

ICMP (Internet Control Message Protocol : 인터넷 제어 메시지 프로토콜)

출처 : https://www.logsign.com/blog/what-is-icmp/

IP 네트워크에서 사용하는 가장 기본적인 프로토콜입니다.

이 프로토콜은 일반적으로 네트워크 트러블슈팅(문제진단, 해결)에 가장 많이 사용되는데, 대표적으로 명령 프롬프트 창에서 사용하는 명령어인 ping, tracert/traceroute 명령어가 ICMP를 사용합니다. ARP를 설명할때도 썼었죠.

 

기억력이 좋으시다면 이전 OSI 7계층을 정리한 포스팅에서 ICMP가 3계층(Network Layer, Internet Layer) 에서 동작하는 프로토콜이라고 적어 두었던 것을 기억하실 수도 있겠습니다. 때문에 이 ICMP는 IP와 같이 사용됩니다.

 

IP(Internet Protocol)에는 제어 메시지나 오류 메시지를 보내는 내장 매커니즘이 없습니다. 따라서 ICMP와 같은 프로토콜을 사용하여 오류를 제어합니다. 또한, 오류 발생시 메시지를 응답받기 위해 연결이 보장되어야 합니다. (IP는 비연결 지향 프로토콜입니다. 패킷이 확실히 전송된다는 것을 보장하지 않습니다.)

 

 

ICMP 헤더 구조

8바이트 구성이며 Type에 따라 패킷의 종류를 구분하고, Code에서 더 자세히 구분합니다. Checksum은 코드에 오류가 있는지 확인하는 용도의 필드입니다. Type의 종류에 따라 메시지의 길이가 변할 수 있습니다.

 

 

ICMP 주요 TYPE의 종류와 설명 

TYPE Message Description
0 Echo reply Echo 메시지 응답 (ping 응답)
3 Destination unreachable 도달 불가 Error (Code에 자세한 사유)
4 Source quench congestion control의 용도 (사용되지 않음)
5 Redirect 더 빠른 경로가 있다는것을 알림
8 Echo request Echo 메시지 요청 (ping 요청)
11 Time exceeded TTL 초과된 경우
30 Traceroute 해당 라우터까지의 경로 체크
15~18 정보 주고받기 관련 DHCP가 이 역할을 대신함

 

 

2. ICMPv6

IPv6에서 동작하는 ICMP입니다. IPv6 체계에서는 ARP, IGMP와 같은 프로토콜이 존재하지 않고, ICMP가 대체하게되어 중요도가 조금 더 높아졌습니다. IPv6 패킷에 의해 전달되고 패킷유형과 타입은 아래 링크에서 자세히 확인하실 수 있습니다.

 LINK  https://ko.wikipedia.org/wiki/ICMPv6

 

 

3. Ping

출처 : https://latesthackingnews.com/2017/08/02/what-is-a-ping/

해당 장비에 접속 가능한지를 확인하는 용도로 사용되며 ping 명령어는 위 사진과 같은 동작 방식을 가집니다. ping echo라고 칭하는 이유는 메시지가 메아리치듯 송신측으로 되돌아오기 때문입니다. 명령어 형식은 대부분의 장치에서 ping [destination_IP] 형태를 가지며, 이 ping 테스트를 통해 노드의 연결상태를 비롯해 간단한 네트워크 장애를 진단할 수 있습니다. 

 

ping은 일반적으로 IPv4를 기본으로 사용하지만, IPv6도 가능합니다. 명령어 옵션은 운영체제마다 다르니 -h, help, ? 등을 통해 파악하고 테스트 가능합니다.

Window 10 ping 옵션

 

 

4. Trace route

출처 : https://blog.paessler.com/what-you-need-to-know-about-traceroute

해당 장비까지 가는 경로를 추적하는 용도로 사용되며 TTL[각주:1]을 사용하여 time exceeded 메시지를 통해 라우터의 IP 주소를 알아내어 경로를 나타냅니다. TTL = 1, 2, 3, 4, 5 ... 으로 증가시키며 패킷을 송신합니다.

 

출처 : https://blog.paessler.com/what-you-need-to-know-about-traceroute

윈도우 기반의 traceroute는 UDP, 리눅스는 ICMP 기반입니다. 

 

 

5. 보안취약점

ping, traceroute는 공격할 대상을 검색하는 용도로 사용되거나 패킷 자체를 무수히 많이 보내서 공격에 직접적으로 이용되기도 하므로 PC나 서버의 경우 보안문제로 인해 핑에 응답하지 않는 경우가 많습니다.

 

보시다시피 네이버와 같은 규모가 어느정도 있는곳도 ping에 응답하지 않는 것을 확인하실 수 있습니다. traceroute 역시 마찬가지로 보안을 위해 time exceeded를 보내지 않도록 설정하는 경우가 많으며 이 경우에는 * 의 형태로 출력하고 ping timeout 처리를 하게 됩니다.


  1. Time To Live. 패킷의 유효기간을 나타내는 값. 무한루프 방지를 위한 기능으로 255까지의 값을 가지며 라우터를 거칠 때 마다 1씩 차감되어 0이되면 패킷이 폐기됨. [본문으로]