본문 바로가기

컴퓨터 사이언스/네트워크

[모바일 컴퓨팅] ICMP (Internet Control Message Protocol)

Error/Status Reporting

- 라우터가 만나는 에러의 상황

1. 라우터가 패킷을 어디로 보내야 할지 모를 때

2. 패킷의 TTL(hop count) 값이 만료되었을 때

3. 패킷이 링크레이어 라우터가 처리할 수 있는 크기를 넘어섰을 때 (don't fragment bit set)

- 이와 같은 상황에 라우터는 respond를 보내 줄 필요가 없다.

Best Effort는 에러 컨트롤을 하지 않기 때문이다. Not guaranted

때문에, IP는 조용히 패킷을 드롭한다.

- 하지만 silent failure(silent drop)가 이루어진 것을 end-host가 진단하는 일은 매우 어렵다.

 

ICMP (Internet Control Message Protocol)

- ICMP는 IP의 에러 리포팅, 간단한 쿼리(ex. ping)를 도와주기 위한 프로토콜이다.

- ICMP 메시지는 IP 데이터그램으로 캡슐화된다.

- ICMP는 IP 위에서 동작한다. TCP/UDP와 같은 레벨이지만, transport layer는 아니다. 3.5

- IP packet이 time exceeded or destination unreachable 문제에 직면했을 때, trigger 된다.

- ICMP 패킷은 에러 메시지와 오리지널 패킷의 (IP header) + (8+ byte)를 source IP address로 전송된다.

- Surce Host는 ICMP packet을 받으면, excerpt(오리지널 패킷의 (IP header) + (8+ byte))를 진단해 소켓을 확인한다.

- 문제가 생긴 ICMP 패킷에 대해서는 ICMP를 보내지 않는다.

 

ICMP format

- Type (1 byte): ICMP 메시지의 타입

- Code (1 byte): subtype

- checksum (2 bytes): ICMP 메세지 전체의 checksum

- 추가적인 데이터가 없으면 4 bytes가 0으로 set 된다. -> ICMP message는 최소 8 bytes

- Data section

1. Error Message (28 bytes excerpt)

2. Query Message (쿼리 종류에 따라 extra info)

 

ICMP Error message

- ICMP 에러 메시지가 보내지지 않는 상황

1. ICMP error message를 포함하는 데이터그램 (ICMP 에러에 대해서 다시 ICMP 에러를 보내지 않는다.)

2. fragment된 데이터그램의 첫 번째 fragment가 아닐 때 (첫 fragment만 보내주고, 나머지 fragment는 보내지 않는다.)

3. 데이터그램이 broadcast/multicast address를 가지고 있을 때 (어디로 보내야 할지 모르기 때문에)

4. 데이터그램이 127.0.0.0 or 0.0.0.0과 같은 특별한 주소를 가지고 있을 때 (loopback interface)

- Destination unreachable

IP datagram이 forward 되지 못하고 드롭되었다. code field가 상세 이유를 포함

- Redirect

alternative route에 대한 정보를 알리고 라우팅 테이블을 업데이트시킨다.

code field가 route change의 이유를 설명

- Time exceeded

TTL filed가 0이 되었거나 세그먼트 재조립에 대한 시간이 초과되었다.

- Parameter problem

IP header가 유효하지 않거나,  IP header option이 누락되었다.

 

Destination Unreachable

- Protocol is unreachable과 Port is unreachable의 ICMP는 호스트에서 만들어진다.

나머지는 라우터

- Destination에서 해당하는 프로토콜 모듈, 프로세스 포트가 not active 하다면 host가 ICMP를 보내기 때문

 

ICMP query message

- 네트워크 문제를 진단하기 위해

 

Echo Request and Reply

- Ping은 커널에서 직접적으로 다뤄진다.

- 각 ping은 ICMP Echo Request로 변환된다.

- 핑을 받은 호스트는 ICMP Echo Reply를 보내준다.

 

ICMP Timestamp

- 시스템이 다른 시스템에게 현재 시간을 묻는다.

- 시간은 현재 날짜의 UTC 자정 이후의 밀리 초로 측정된다.

 

네트워크 경로 찾기

- ICMP는 라우터가 end-host와 대화할 수 있게 해 준다.

- PMTU(Path Maximum Transfer Unit) Discovery

네트워크를 통해 fragmentation 없이 보낼 수 있는 가장 큰 패킷의 크기를 알아낼 수 있다.

- Traceroute

패킷이 네트워크를 통과할 때, 통과하는 라우터들이 무엇인지 알아낼 수 있다.

 

PMTU Discovery

- MTU = Maximum Transmission Unit (링크가 받을 수 있는 가장 큰 IP 패킷)

- PMTU = minimum end-to-end MTU

- 적절한 크기의 패킷을 DF를 설정해 보내고, Need Fragmentation ICMP가 오면 더 작게 해서 보내고..

 

DIscovering Routing Path

- TTL을 1부터 하나씩 올리며, 각 라우터에게 Time Exceeded ICMP를 받는다.

 

Ping

- 라우터는 ping을 전달해주기 때문에 인터넷 어느 장치든 ping을 보낼 수 있다.

- 각 장치(라우터 포함)는 ping에 reply, forward하지 않도록 설정될 수 있다.