티스토리 뷰

Study/Network

[Network] ICMP Service Model

생각많은 소심남 2018. 1. 24. 00:35

 Internet Control Message Protocol(ICMP)는 보통 Error를 report 하거나 Network Layer상에서 발생한 문제에 대해 진단하는 역할을 한다. 아마 알다시피 IP 자체에는 data가 전달되거나 문제가 발생했을 때에 대한 매커니즘이 없기 때문에 ICMP를 통해서 어디에 문제가 발생했는지에 대한 근거를 찾을 수 있다. 

 보통 Network Layer를 구성하는 요소로는 크게 세가지 매커니즘이 있다.

1) Internet Protocol (IP)
: 우리가 보통 data라고 표현하는 IP datagram을 생성하고 이걸 end-to-end 방식으로 전달하는 역할을 한다.

2) Routing Tables
: 사실 end-to-end 방식으로 전달하는 개념만 있지 IP datagram이 통과할 router들은 어떤 통로로 datagram을 보내야 효율적으로 목적지까지 도달할지에 대한 정보가 있어야 한다. 이 정보를 표현한 알고리즘들을 Routing Table이라고 한다.

3) Internet Control Message Protocol (ICMP)
: 이번 포스트에서 다룰 주제이며 보통 end host와 router간에 주고 받는 Network Layer Information을 전달하고, 앞에서 소개한 바와 같이 Error Condition이나 problem에 대해 파악할 수 있는 근거를 제공한다.

 ICMP는 Network Layer의 상위인 Transport Layer에서 동작하며 만약 end host가 보내고자 하는 목적지에 ICMP를 이용해서 error message를 보내고자 하면 이 transport layer에서 생성된 ICMP Payload에 해당 정보가 담겨 Network Layer로 내려간다. 그러면 Encapsulation과정을 거치면서 하나의 IP Datagram을 형성하게 된다.

ICMP가 쓰이는 한가지 예를 들어보면 다음과 같다.

위에서 Source쪽에 있는 Application이 http를 통해서 Destination에 data를 전달하고자 한다. 물론 해당 data가 destination까지 전달되기 위해서는 중간중간에 router를 거칠 것이고, 해당 router 는 정상적인 routing table을 가지고 있어야 한다. 하지만 위와 같이 (1)을 수행하는 과정에서 처음 전달받은 Router가 정상적인 routing table을 가지고 있지 않은 경우, ICMP를 통해 source쪽으로 error message를 보내게 된다. 위와 같은 경우에는 "Destination Network Unreachable" 이란 내용이 담긴 ICMP message가 전달된다.(2) 참고로 ICMP내에는 ICMP Type과 Code field가 있어서 각 조합별로 Message의미를 표현할 수 있다. 
(해당 내용이 궁금한 사람은 RFC 752 규약을 살펴보면 전체적인 구성을 알 수 있다.)

 보통 Error가 발생했을 때 생기는 ICMP message의 형태는 다음과 같다.

문제가 발생할 경우, 처음 Router로 전달된 IP Datagram의 data중 하위 8byte를 떼고 기존의 header와 ICMP type과 code를 조합한 새로운 data를 생성한다. 여기에 다시 되돌려보낼 Header가 조합될텐데 이때 당연히 보내는 쪽은 문제가 발생한 router가 될 것이고, 받는 쪽은 본래 이 IP datagram을 보낸 source가 될 것이다. 그렇기 때문에 이 message를 받은 쪽에서는 ICMP type과 code를 통해 어떤 문제가 발생했고, 받은 header를 통해 어디서 발생하고, data의 일부를 통해 어떤 data에 문제가 발생했는지를 알수 있다. 여기서 알수 있는 것처럼 ICMP Service Model은 스스로 포함된 message를 통해서 error를 파악할수 있는 특성을 가지고 있다.(Reporting Message) 그런데 이런 message는 단순히 error를 reporting하는 용도이지, 이걸 받는 쪽에서 못받았다고 해서 다시 보내거나 그런 특성은 가지고 있지 않다.즉 신뢰성이 없다는 것이다.(Unreliable)

 가장 흔하게 볼수 있는 ICMP가 쓰이는 케이스가 바로 ping이다. 이 ping이 ICMP message를 이용해서 전달이 되며 이때 ICMP message로는 echo request (ICMP type 8, code 0)을 담게 된다. 이 message를 받은 destination은 다시 source쪽으로 ICMP message를 실어서 보내는데 이때는 echo reply (ICMP type 0, code 0) 담기게 된다. 이밖에도 traceroute tool을 쓸 때 출력되는 message 또한 ICMP를 통해서 Time-To-Live(TTL)을 계산하는 형태이기도 하다.

출처 : CS144, Introduction to Networking (Stanford University)

'Study > Network' 카테고리의 다른 글

[oFono] Overview  (0) 2017.11.17
[Networking] UDP service model  (0) 2016.09.06
[Networking] TCP service model (3)  (0) 2016.08.30
[Networking] TCP service model (2)  (0) 2016.08.30
[Networking] TCP service model (1)  (0) 2016.08.30
[Network] Nash Equilibrium 문제  (0) 2015.03.02
[Network] End-to-end Principle  (2) 2014.02.06
댓글