✔️ ICMP (Internet Control Message Protocol)란 ?
3계층 (Network Layer)의 IP 프로토콜은 오로지 패킷을 목적지에 도달시키기 위한 내용들로만 구성되어 있다.
IP 패킷 경로에 문제가 있거나, dst 호스트에 문제가 있는 경우 패킷 전달을 의뢰한 src 호스트에 이러한 사실을 알려야 하지만 IP에는 에러에 대한 처리 방법이 명시되어 있지 않다.
즉, IP는 전송 상태에 대한 관리가 이루어지지 않는 신뢰할 수 없는 프로토콜이다.
이러한 IP 프로토콜의 단점을 보완하기 위한 프로토콜이 ICMP 프로토콜이다.
✔️ ICMP 기능
ICMP는 IP 프로토콜을 이용해
- IP 패킷 전송 중 에러가 발생하면 에러 발생 원인을 알려주며 해결 가능한 힌트 제공
- Error-Reporting Message : 전송 중 오류 발생 시 에러 메세지를 생성해 응답
- 네트워크 상태를 진단 및 전달하는데 사용
- Query Message : 네트워크 상태를 진단하기 위한 쿼리 요청 및 응답메시지 생성
ICMP 사용(활용) 명령어
1. Ping 명령어 : 상대방 호스트의 작동 여부 및 응답시간 측정하는데 사용
- Echo Request (ICMP 질의메세지 요청)
- Echo Reply (ICMP 응답메세지 요청)
2. Tracert명령어 : 목적지까지의 라우팅 경로 추적을 하기 위해 사용
- Time Exceeded 확인 가능
✔️ ICMP 패킷 구조
ICMP 메세지는 메세지의 유형을 의미하는 Type 필드와 유형별 세부 내용을 담고있는 Code 필드로 구성된다.
필드 | 내용 |
ICMP Type | ICMP의 메세지를 구별 |
ICMP Code | 메세지 내용에 대한 추가 정보 (즉, ICMP Type에 대한 상세 정보) |
ICMP Checksum | ICMP의 값의 변조 여부를 확인 |
IMCP 메세지1, 2 | ICMP Type에 따라 가변적으로 들어가는 내용 |
✔️ 주요 ICMP Error Reporting 메세지
1. Destination Unreachable (Type 3)
- 해당 목적지에 도달할 수 없음을 의미
- 목적지 도달 불가 사유에 따라 다양한 Code로 구성되어 있다.
Code 0(Network Unreachable) : Network 도달 불가 (Network ID 문제 - Core router가 판단 가능)
Code 1(Host Unreachable) : 최종 단계의 라우터가 목적지 호스트로 패킷 전송에 실패한 경우 (Host ID 문제)
Code 2(Protocol Unreachable) : 목적지 호스트에서 특정 프로토콜을 사용할 수 없는 경우 (Protocol 타입 문제)
Code 3(Port Unreachable) : 목적지 호스트에 해당 UDP포트가 열려있지 않는 경우 (포트 넘버가 잘못됨)
(TCP의 경우에 포트가 열려있지 않으면 TCP RST 패킷을 반환한다)
Code 4(Fragmentation needed and don't fragment was set) : IP 패킷의 단편화가 반드시 필요하지만 IP 헤더의 Don't fragment 플래그가 설정되어 단편화할 수 없는 경우 라우터에 의해 반환된다. (Path MTU 발견 및 수정 정보 전송)
2. Redirection (Type 5)
- default router가 현재의 라우팅 경로가 잘못됨(또는 최적의 경로가 아님)을 알 때 새로운 경로를 이전 경유지 또는 호스트에게 알려주는 메세지 (더 나은 게이트웨이를 알려준다.)
- ICMP Redirection 공격 시 이용하는 메세지이다.
3. Time Exceeded (Type 11)
- 타임아웃이 발생하거나(TTL이 0이 됨) Fragment 중 하나가 손실되어 다시 조합할 수 없을 경우 IP 패킷이 폐기되었음을 알리는 메세지이며 타임아웃 사유는 Code를 통해 알 수 있다.
Code 0(Time To Live exceeded in Transit) : IP 패킷이 최종 목적지에 도달하기 전에 TTL값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지이다.
Code 1(Fragment reassembly time exceeded) : IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지. 일반적으로 IP 데이터그램의 일부 단편이 전송과정에서 손실될 경우 재조합 과정에서 실패하여 발생한다.
✔️ 주요 ICMP Query 메세지
Echo Request (Type 8) Echo Reply (Type 0)
- ping 테스트에 사용되는 메세지로 End node 간에 네트워크 및 호스트 상태 진단을 목적으로 사용
- 별도의 Code가 없고 이외의 쿼리 타입들은 거의 사용되지 않는다.
✔️ IP datagram에 문제가 있으나 ICMP 에러가 보내지지 않는 경우
ICMP 에러 타입 메세지도 Error의 정보는 전달해주지만, source의 문제가 아닌 이상 보내지지 않는다.
- ICMP Error 메세지의 Error일 때
- Checksum Error일 때 - checksum Error는 source가 고칠 수 있는 경우가 아니므로
- multicast/broadcast 전송의 에러일 경우 - 너무 많은 Error 가 전달될 수 있기에
- Source 0.0.0.0 으로부터 온 경우 - 인터페이스가 아직 IP주소를 모른다, DHCP
- killed IP source가 fragment 를 나르는 중이었을 경우 - 2번째 fragment부터는 헤더에 대한 정보가 없고 data만 있다.
🔗참고
'CS > 네트워킹' 카테고리의 다른 글
OSI 7 Layer - 데이터 플로 계층 (1) | 2022.09.27 |
---|---|
[네트워킹] SSH (Secure Shell Protocol) (1) | 2022.03.22 |
[네트워킹] FTP (File Transfer Protocol) (0) | 2022.03.22 |
[네트워킹] Proxy (프록시)란 ? (0) | 2022.03.18 |
[네트워킹] NAT (Network Address Translation) (0) | 2022.03.10 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!