IT/통신프로토콜 실습&연습문제

통신프로토콜(ICMP)(1)

뚱늉 2016. 12. 17. 07:00

1. cmd 창에서 ping 명령어를 입력하여 ICMP 패킷 수집 실습

 

  cmd창에서 ping명령어를 통하여 ICMP Request Message와 ICMP Reply Message를 발생 시켯다. ICMP는 Internet Control Message Protocol의 약자이다. ICMP Message는 패킷을 송신 할 때 송신 도중 패킷에 문제(라우터에서 버려지는 경우 혹은 목적지 단말에서 문제가 발생하는 경우)가 생기는 경우나 네트워크가 정상 작동 하는지 알아 볼 때 발생 하는 Message로 임의의 단말이 정상 작동 중인지 확인 하기 위하여 임의로 ping 명령어를 통하여 ICMP Request Message와 ICMP Reply Message를 발생 시킨 것이다.

 

 ⦁ ICMP Request/Reply 패킷 비교

- Request 패킷

 

 Source 측은 ping명령어를 실행한 컴퓨터의 ip주소이며 Destination은 ping을 받는 대상의 컴퓨터의 ip주소이다. 밑에 ICMP 정보를 보여주는 Internet Control Message Protocol영역을 살펴보면 Type과 Code가 있는데 이 2개의 정보가 ICMP Message에서 가장 핵심이 되는 정보이다. Type은 ICMP Message의 Error의 종류를 나타내며 Code는 Type에 따뜬 Error의 정보를 제공 하여 준다. 위의 ICMP Request Meesage의 Type은 8이며, Code는 0이다, 이 Type 8 Code 0 가 뜻하는 것은 Echo Request를 뜻하는 것으로 상대 단말이 죽었는지 살았는지 물어볼 때 발생하는 ICMP Message이다.

 

 

- Reply 패킷

ICMP Reply Message는 해당하는 ICMP Request Message에 응답하는 Message로써 Source 에는 ICMP Request측에서의 Destination의 ip가 들어가며 Destination은 ICMP Request측에서의 Source의 ip가 들어가는 것을 알 수 있다.

이 ICMP Reply Message는 Type과 Code는 0이다. 이 Type과 Code로 알 수 있듯이 ICMP Reply Message는 Type과 Code를 0의 값이 들어가며 이 것이 뜻하는 것은 Echo Request에 응답하는 Echo Reply라는 것을 알 수 있다.

 

 2. time exceeded ICMP 패킷 수집 실습

-명령어 ex) tracert kr.yahoo.com

 

- tracert명령어는 송신측과 목적지 사이의 라우터에 대한 정보와 목적지의 정보를 나열하여 주는 명령어이다. tracert명령어를 사용하여 나열되는것을 볼 수 있는데 만약 1 ~ 21까지 나열 되면  21번째를 보면 목적지인 kr.yahoo.com에 대한 정보가 있는 것을 알 수 있다. 이것으로 보아 송신측에서 kr.yahoo.com까지 가는데 총 20개의 라우터를 거치고 21번째에 kr.yahoo.com에 도착한 것을 알 수 있다.

- 처음 CMD창에서 알 수 있었던 정보들을 위의 패킷들을 보면 더욱 알기가 쉽다. 패킷들을 위에서부터 살펴보면 처음 ICMP Request Message의 TTL의 값은 1이 되어 있다. 그 후 Time Exceeded Message가 발생한 뒤의 ICMP Request Message의 TTL의 값은 2가 되어 있다. 쭉 살펴보면 Time Exceeded Message가 발생한 후의 ICMP Request Message의 TTL의 값은 이전의 ICMP Request Message의 TTL값에서 +1한 값이 들어가게 되는 것을 알 수 있고 목적지 도달한 21번째에는 ICMP Request Message가 발생한 후 Time Exceeded Message가 발생하지 않고 ICMP Reply Message가 발생 하는 것을 알 수 있다.- Tracert는 처음 송신측에서 ICMP Request Message를 보내는데 이때 이 ICMP Request Message 패킷의 TTL(라우터를 거칠 때 마다 –1을 한다.) 은 1로 넣어둔다. 이 ICMP Request Message가 라우터에 도착하게 되면 TTL값은 –1을 하게 되고 0이 되면 목적지가 아님에도 불구하고 패킷을 버리게 된다. 라우터에서 패킷을 버리게 되면 목적지는 패킷을 받지 못하기 때문에 ICMP Message를 보내게 되는데 이때 발생하는 ICMP Message를 Time Exceeded Message라고 부른다. 이 Time Exceeded Message는 위에서 말했다 시피 패킷의 TTL값이 0이 되어 패킷을 버려지는 경우에 발생하는 ICMP Message이다. 라우터에서 이 Time Exceeded Message가 발생하면 이 패킷의 Source의 정보는 라우터에 해당하는 ip주소가 들어가게 되고 Destination의 정보는 송신측의 ip가 들어가게 된다. 이 Time Exceeded Message를 송신측에서 수신을 하게 되면 다시 송신측은 ICMP Request Message를 발생하게 되는데 이 때 TTL의 값은 이전에 보냈던 패킷의 TTL값에서 +1을 하여 보내 게 된다. 그러면 라우터를 하나 거칠 때 마다 TTL의 값은 –1이 되고 결국 TTL의 값이 0이 되면 또 다시 Time Exceeded Meessage가 발생 하게 되고 송신측은 TTL의 값을 +1을 또 한다. 이렇게 반복적으로 ICMP Request Message의 TTL값을 늘리고 Time Exceeded Message를 발생시키면서 라우터를 거치게 되어 결국 목적지 단말에 도착하게 되면 목적지 단말은 Time Exceeded Message가 아닌 ICMP Reply Message를 송신측에 보내게 되고 송신측은 이 ICMP Reply Message를 수신 받게 되면 더 이상 ICMP Request Message를 보내지 않게 된다.

 

 

⦁ Tracert와 ping의 ICMP 패킷과의 차이

 

-ICMP

 

ping명령어는 해당 네트워크가 살아있는지 죽었는지 확인하기 위하여 임의적으로 ping을 보내어 ICMP Request Message를 발생시킨 후 목적지 단말에서 수신하게 되면 ICMP Reply Message를 송신측에 송신하여 수신하는 방법으로 단순히 목적지 단말이 살아있는지 죽었는지 확인하기 위하여 사용 하는 명령어이다. 이 명령어를 사용하여 수집되는 ICMP Request Message의 패킷의 Source측은 ping명령어를 실행 시키는 컴퓨터의 ip주소가 적혀 있으며 Destination측은 목적지 단말의 ip주소가 적혀 있다. 그리고 위에서 말했다 시피 ICMP Request Message의 Type과 Code는 각각 8과 0이다. 그리고 ICMP Reply Message의 Source측은 목적지 단말의 ip주소가 적혀있으며 Destination측은 송신측의 ip가 적혀 있다. 이렇게 하여야지 송신측은 목적지 단말이 ICMP Request Message를 잘 받은 것을 확인 하고 살아있는 것을 알 수 있기 때문이다.

 

-Tracert

 

Tracert명령어는 ping처럼 목적지단말에 ICMP Request Message를 보낸다. 하지만 이 Tracert명령어에서 보내는 ICMP Request Message는 ping명령어로 발생되는 ICMP Request Message와 다르게 TTL값을 정한 후 ICMP Request Message를 송신하게 된다. 이 TTL값은 처음 ICMP Request Message가 발생할 때 1로 설정하여 보내게 된다. 송신된 이 패킷은 라우터를 거치면서 TTL의 값을 –1한다. 만약 이 값이 0이 되면 이 ICMP Request Message는 버려지게 되고 라우터는 ICMP Request Message를 버린 것을 알려주기 위해 Time Exceeded Message를 발생 시킨다. 이 Time Exceeded Message는 Source측은 ICMP Request Message를 버린 라우터의 ip가 저장되며 Destination측에는 송신측의 ip가 적히게 된다. 이렇게 Time Exceeded Message를 통하여 송신측과 목적지 단말사이의 라우터의 정보를 알 수 있게 된다. 그리고 송신측은 Time Exceeded Message를 수신받은 송신측은 위에서 설명하였다 시피 ICMP Request Message를 발생시키는데 이때 TTL값을 +1하여 발생시킨다. 이렇게 발생한 패킷은 라우터를 거치게 되고 처음 ICMP Request Message를 버린 라우터를 거쳐 다음 라우터에 가면 TTL값이 0이 되므로 그 해당 라우터의 정보를 다시 알 수 있게 된다. 반복적으로 이런 작업을 하다가 결국 목적지 단말에 도달하면 더 이상 Time Exceeded Message를 발생시키지 않고 ICMP Reply Message를 발생시켜 송신측이 더 이상 ICMP Request Message를 발생시키지 않게 하고 ICMP Reply Message를 통하여 목적지 단말의 정보를 알 수 있게 된다.

 

=> 이렇게 Tracert는 ping과 다르게 Request, Reply Message외에 Time Exceeded Message가 발생하고 여기서 Request Message의 TTL의 값은 ping과는 다르게 송신측에서 값을 정하여 송신한다.