CS/Computer network

ICMP (Internet Control Message Protocol Version 4)

ys_cs17 2022. 5. 27. 10:06
반응형

네트워크에 무슨일이 생겨 router에 packet을 전달하지 못하는 상황이 생기면, 이를 보고하는 역할이 필요하게 된다.

이 역할을 ICMP가 진행한다.

Source-A-B-C-Destination 순서로 전달이 된다고 가정하자. 알파벳은 router이다.

만약 B와 C 사이에서 연결이 끊겼을 때는 B에서 source로 이 상황을 알려줘야한다. source에 알려주기 위해서는 IP가 필요한다.

이러한 이유로 ICMP는 IP header가 필요하고, ICMP에는 error에 대한 종류를 적고 source의 IP 주소를 IP header에 넣어서 전송한다.

위 테이블은 ICMP의 message에 대한 유형별 정리이다.

크게 Error-reporting message, Query message로 나뉜다.

ICMP의 header는 위와 같이 구성되어 있고, Type에는 위 table에 있는 type을 넣는다. type과 code를 통해 어떤 error가 발생했는 지 알 수 있다.

실질적으로 위와 같이 구성이 된다. 빨간색 상자 부분이 ICMP packet이고, header와 data로 구성이 된다. IP header부터 8바이트 부분이 data이다.

IP header와 TCP header에서 조금씩 가지고 와서 ICMP header를 만들어서 error 종류를 넣는다. 맨 위에 있는 8바이트에는 port num, seq num이 들어 간다.

맨 아래 왼쪽에 존재하는 IP header에는 아까 예로 설명했던 B -> source에 해당하는 주소가 들어간다.

이를 통해 어디서 error가 발생하였는 지 알 수 있고, ICMP를 통해 error 종류, 오른쪽 IP header를 통해 원래 어디에 보내려고 했는지를 알 수 있다.

 

이제 error message에 대해 살펴보자.

 

Error-reporting messages

(1) Destination unreachable

 

도착지에 도착하지 못한 경우에 대한 에러이다. 가장 아래 내용에 대한 코드를 보내주면 어떤 패킷이 오류가 났는지 알 수 있다.

code 0: 목적지 네트워크로 가는 경로가 없는 경우, 디폴트 라우트가 없는 경우

code 3: 목적지 호스트에서 특정 포트 번호가 사용될 수 없는 경우

등등 다양한 코드가 존재 한다.

하지만 패킷이 없어졌다고 해도 network가 100% 탐지할 수 있는 것은 아니다. 그 이유는 IP 프로토콜에서는 혼잡, 흐름 제어 기법이 없기 때문이다.

 

(2) Source quench

혼잡 때문에 패킷을 버릴 때 알려 주는 역할을 한다.

혼잡이 발생하면 패킷을 천천히 보내야한다. 혼잡 제어는 처음 TCP에서 구현이 되었는데, network layer에서는 구체적으로 구현이 되지 않았다. 혼잡 때문에 버려질 때 message를 source에게 보낸다.

router를 이동하는 동안 time-to-live를 하나씩 빼주는데, 0이 되면 버린다. 하지만 그냥 버르는 것이 아니라 source에게 알려주고 버린다.

또한 fragmentation 된 packet을 마지막 목적지에서 재조합하는데, timer가 만료되어 버리게 될 때 source에게 알려준다.

 

(3) Time exceeded

TTL이 만료될 때는 code: 0, fragmentation이 다 도착을 하지 않아 버릴 때는 code: 1을 통해 알려주는 message를 time exceeded message이라고 한다.

 

(4) Parameter problem

Router가 packet을 받을 때 header에 있는 값이 말도 안되는 것으로 지정되어 있거나, 변경 되었을 때 packet을 버리고 source에게 알려 준다.

 

(5) Redirection

A에서 B로 packet이 이동할 때 default router 정도만 set-up을 한 후 보낼 준비를 한다. R1으로 보내고 router table을 찾았더니 R2로 가는 것을 알게 될 수 있다. 근데 만약 IP 주소를 알면 network, host address를 알게 될 텐데, R1, R2가 같은 network라면 굳이 R1에 먼저 보내지 않고 바로 R2에게 보내는 것이 더 효율적이다.

이때 A에게 알려주는 것이 Redirection message이다.

반응형