'ICMP'에 해당되는 글 1건

  1. 2008.08.29 ref_icmp
2008. 8. 29. 17:34

ref_icmp



  ICMP(Internet Control Messages Protocol)



1. ICMP?
IP 프로토콜의 문제점을 해결하기 위해 생성된 프로토콜로 데이터 전송시 제어 정보 전달
을 위한 프로토콜을 의미한다.

[Ref.] IP 프로토콜의 문제점
송신자 시스템이 수신자 시스템에게 데이터그램을 전송할때 비 연결성에 주안점을 둔 IP
프로토콜은 오류제어와 같은 메커니즘이 없으므로 이로 인해 다음과 같은 데이터 그램 전
송시 문제가 생길수 있다.
- 최종 목적지 도달불가나 호스트 사용불가를 탐지 불가능
- 경로 설정 루프의 오류로 인한 TTL 매캐변수 만료 전달 불가능
- 데이터그램 단편의 사라짐으로 인한 데이터그램이 전달되지 않을 가능성
- 단편화가 혀용되지 않고 데이터그램 크기가 중간 네트워크에 비해 너무 커서 데이터 그
  램을 발송 불가능
- 라우터에서 네트워크 혼잡으로 인한 수신 데이터그램을 처리 할 수 없을 경우가 발생



2. ICMP의 주요 기능
- 모든 IP 구현은 ICMP를 동반해야 한다.
- ICMP는 IP 패킷과 함께 실행된다. 즉 ICMP는 비록 IP 모듈에서 구현되지만 IP의 클라이언
  트라고 할 수 있다.
- ICMP는 오류보고나 제어 목적이지 IP 데이터 패킷을 신뢰할 수 있는 전송을 가능하게 하
  는 것은 아니다.
- ICMP는 첫번째 IP 데이터그램 단편화에 대해서만 오류를 보고한다. 즉, 단편 오프셋 필
  드가 0(zero)으로 설정된 IP 데이터그램 단편만을 보고한다는 의미이다. 나머지 데이터
  그램 단편에 대해 ICMP 메세지를 보내지 않게 하는 것이다.
- ICMP는 IP 데이터그램에 관한 오류보고 메커니즘이지 데이터그램 문제에 관한 오류 메시
  지는 생성하지 않는다.


[Ref.] ICMP 프로토콜 사용시 오류보고를 할수 없는 상황
- ICMP 메시지의 경로 설정 또는 전달시
  ICMP 오류메시지 생성시 메시지 개수가 늘고 네트워크 트래픽 발생 우려가 있다.
- IP 동보전송 또는 다중 전송 데이터그램 전송시
  동보전송이나 다중 전송시 발생하는 ICMP 오류메시지는 브로드캐스팅, 멀티캐스팅 데이터
  그램을 수신하는 각 노드가 ICMP 메시지를 생성하여 네트워크 트래픽 발생 우려
- 데이터링크 계층 동보전송 또는 다중 전송시
  위의 경우와 같음
- 루프백 주소 127.x.x.x 나 0.0.0.0과 같은 고유 IP 노드를 식별하지 않는 출발지 주소
  또는 네트워크 접두어가 0인 주소를 가진 데이터그램 전송시



3. ICMP 구조

송신 시스템에게 IP 전달에 대한 다양한 메시지를 전달하기 위한 프로토콜이다.


(1). 메시지 종류

오류보고 메시지(Error Reporting Messages)
 Type 3 : 목적지 도달 불가
 Type 4 : 발신지 억제
 Type 5 : 경로 재지정
 Type 11: 시간 초과
 Type 12: 매개변수 문제

질의 메시지(Query Messages)
 Type 8 : Echo Request
 Type 0 : Echo Reply
 Type 9 : Router 광고
 Type 10: Router 요청
 Type 13: Timestamp Request
 Type 14: Timestamp Reply
 Type 15: IP 정보 요구(구형)
 Type 16: IP 정보 응답(구형)
 Type 17: 주소마스크 요구
 Type 18: 주소마스크 응답


(2). 메시지 형식

총 8Bytes 헤더로 구성되어 있으며 처음 4Bytes는 모든 ICMP에서 동일하며 나머지 4Bytes
는 조금씩 다르게 구성되어 있다.


+------------+------------+---------------------------------+
|   Type     |    Code    |    Checksum                     |
+-----------------------------------------------------------+
|                Type 별로 다른 부분                        |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                   [그림] ICMP 메시지 형식


(3). ICMP & IP 상관 관계

ICMP는 TCP/IP 모델 중 Internet 계층에 속하며 IP 모듈 내 ICMP 모듈이 포함된 형태의 관
계성을 갖는다.

-------------------------------------------
Application Layer        (예) ping 명령어

-------------------------------------------
Transport Layer                |
                               V
-------------------------------------------
Internet Layer               ICMP
                             IP
-------------------------------------------
Network Interface Layer      Packet

-------------------------------------------
Hardware Layer               Signal

-------------------------------------------


(3-1) ICMP 캡슐화

ICMP 메시지는 인터넷과 라우터를 거쳐서 운반되어야 하므로 IP에 의해 캡슐화 되어 진다.
즉, IP가 없으면 상위 계층 프로토콜 데이터는 라우터 경계에 도달할 수 없게 된다. 이는
ICMP 메시지가 IP 데이터 그램의 데이터 부분에 포함된다는 것을 의미한다.

(특징) ICMP는 IP 데이터그램의 일부에 포함
       IP 헤더 중 프로토콜 종류 번호는 1로 명시


                  +-------------------------------------------+
                  |         ICMP 데이터         |
                  +-------------------------------------------+
                                                            
         +--------+-------------------------------------------+
         | IP헤더 |         IP 데이터그램        |
         +--------+-------------------------------------------+
                                                            
+--------+----------------------------------------------------+
|DataLink|                  프레임 데이터        |
|Header  |                      (MTU)                         |
+--------+----------------------------------------------------+

                    [그림] ICMP Encapsulation


(4). ICMP 유형


■ ICMP 유형 8, 0
에코 요청/응답(Echo Request/Reply Header)


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=8   |   Code=0   |    Checksum                     |
+-----------------------------------------------------------+
|       Identifier        |    Sequence Number              |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                [그림] ICMP Echo Request

Identifire 필드와 Sequence Number 필드는 프로토콜에 의해 전형적으로 정의되지는 않았
으며 송신자에 의해 임의로 사용될 수 있음.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=0   |   Code=0   |    Checksum                     |
+-----------------------------------------------------------+
|       Identifier        |    Sequence Number              |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                [그림] ICMP Echo Reply


■ ICMP 유형 3
목적지 미도달(Destination Unreachable)

IP패킷은 최적의 경로를 통해 목적지에 도착하려고 하지만 모든 패킷이 전달되지는 않는다.
일반적인으로 이 경우 패킷이 전달되지 않은 라우터에서 탐지되고 ICMP 유형 3을 출발지
호스트에게 전달한다.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=3   | Code=0~15  |    Checksum                     |
+-----------------------------------------------------------+
|                       Not Used                            |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                [그림] Network Unrereachable Messages


코드(Code)는 다음표를 참고하자.

[표] 코드 유형(Code)
----------------------------------------------------------------------------------
Code Description
----------------------------------------------------------------------------------
0 - 하드웨어 고장등의 이유로 네트워크에 도달할 수 없음. 라우터만 생성가능
1 - 호스트에 도달할 수 없음. 라우터에 의해서만 생성 가능
2 - 프로토콜에 도달할 수 없음. 즉, IP 데이터그램이 도착했으나 상위 TCP 프로토
   콜이 수행되지 않고 있다면 이 메시지가 보내짐. 목적지 호스트만 생성 가능
3 - 포트에 도달할 수 없음. 데이터그램이 향하고 있는 응용프로세스가 수행되지
   않고 있음. 목적지 호스트만 생성 가능함.
4 - 단편화가 필요하나 데이터그램의 DF 필드가 설정되어 있음. 즉 다른 네트워크로
   보내기 위해서는 데이터그램을 잘라야 하는데 자를 수 없음.
5 - 발신지 라우팅이 수행될수 없음. 발신지 라우팅 옵션에 정의된 한개 이상의 라
   우터를 방문 할 수 없음(엄격한 소스 라우팅이 설정된 경우에 발생)
6 - 목적지 네트워크가 알려져 있지 않음. 0번과는 다르게 목적지 네트워크에 대한
   정보를 가지고 있지 않은 경우 발생.
7 - 목적지 호스트가 알려져 있지 않음. 0번과는 다르게 목적지 호스트의 존재를 라
   우터가 알고 있지 못하는 경우 발생.
8 - 발신지 호스트가 고립되어 있음.
9 - 목적지 네트워크와의 통신이 관리상의 이유로 금지되어 있음.
10 - 목적지 호스트로의 통신이 관리상의 이유로 금지되어 있음.
11 - 명시된 서비스 유형에 대해 네트워크에 도달할 수 없음.
12 - 명시된 서비스 유형에 대해 호스트에 도달할 수 없음.
13 - 관리자가 필터를 유형에 대해 호스트에 도달할 수 없음.
14 - 호스트 우선순위가 위반되었기 때문에 호스트에 도달할 수 없음. 요청된 우선순
   위가 목적지를 향해서는 허용되지 않을 경우 발생.
15 - 우선순위가 충분히 높지 않아서 호스트에 도달할 수 없음. 네트워크 관리자가
   네트워크의 운용을 위해 우선 순위의 최소값을 설정하였는데 데이터그램의 우선
   순위가 최소값보다 낮을때 발생.
----------------------------------------------------------------------------------


■ ICMP Type 4
출발지 억제(Source Quench)

라우터 집중?

송신시스템이 100Mbps급 이더넷을 통해 라우터로 패킷을 보내지만 라우터 외부 이더넷 인
터페이스가 1.544Mbps 밖에 되지 않는다면 일시적으로 라우터 버퍼는 더 이상 송신 시스템
에서 보내온 패킷을 받지 못한 상태에 빠지게 된다. 이것을 라우터 집중이라고 한다.


해결책

집중현상을 보이고 있는 라우터가 송신자 시스템에게 버퍼가 가득차 더 이상 패킷을 받을
수 없다는 메시지를 보냄으로써 해결할 수 있으며, 이는 ICMP 유형 4를 사용하여 전달하면
된다.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=4   |   Code=0   |    Checksum                     |
+-----------------------------------------------------------+
|                       Not Used                            |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                [그림] Route Source Quench



■ ICMP Type 5
라우트 재지정(Route Redirection)

라우터간에 서로 경로 설정표를 주고 받음으로써 경로 설정에 관한 최적의 정보 또는 최
적에 가까운 정보를 갖게 되지만 호스트는 최소한 경로 설정 정보를 갖도록 설계 된다.
이 때 호스트는 데이터그램을 전달하도록 하기 위해 라우터에서 제공하는 최적의 경로로
데이터그램을 전달하도록 하기 위해 라우터에서 제공하는 최적의 경로로 데이터그램을 전
달하려고 하며 라우터가 자기 구간의 부하나 트래픽으로 인해 다른 라우터에게 데이터그
램을 전송하기 위해 생성되는 메시지이다.

라우터가 송신하고자 하는 데이터그램을 좀 더 좋은 경로로 보내기 위해 다수 라우터 중
최적의 라우터를 탐지할 경우 이를 알리고자 위해서다.


                                RIP/OSPF
Internet -------- Router1 ------------------ Router2 --------- Internet
               172.16.8.254       |        172.16.0.1
                                  |
                            HOSTA(172.16.8.XXX)

- RIP(Routing Information Protocol)
- OSPF(Open Shortest Path First)


■ ICMP Type 9
라우터 광고(Route Advertisement)

ICMP 유형 9, 10은 호스트들이 직접 연결된 네트워크의 모든 라우터를 동적으로 발견할
수 있게 해 주는 ICMP 라우터 발견 메커니즘을 구현하기 위해서 사용한다. 라우터가 사용
하는 설정 프로토콜과 상관없이 모든 라우터를 찾을 수 있다.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=9   |   Code=0   |        Checksum                 |
+-----------------------------------------------------------+
| Number of  | Address    |        Life Time                |
| Address    | Entry Size |                                 |
+-----------------------------------------------------------+
|             Router Address 1                              |
+-----------------------------------------------------------+
|             Router Preference 1                           |
+-----------------------------------------------------------+
|             Router Address 2                              |
+-----------------------------------------------------------+
|             Router Preference 2                           |
+-----------------------------------------------------------+
|             .....                                         |
+-----------------------------------------------------------+

                [그림] Route Advertisement


한 세그먼트에 존재하는 호스트들은 기본 게이트웨이 IP 주소를 구성할 필요가 없다. 라우
터는 ICMP 유형 9를 이용하여 매 7분 ~ 10분 간격으로 세그먼트내에 존재하는 시스템에게
메시지를 송부한다.


■ ICMP Type 10
라우터 선택 메시지(Route Solicitation)

ICMP 유형 10 즉, 라우터 선택 메시지는 호스트 시스템이 지역에 존재하는 IP 주소를 획득
하기 위해 사용되어 진다. 호스트가 라우터의 주소를 발견하기 위해 사용한다. 호스트는
같은 세그먼트내에 존재하는 라우터를 발견하기 위해 ICMP 유형 10을 브로드캐스트나 멀
티게스트를 이용하여 전송한다. 그럼 라우터는 이 메시지를 받고, 라우터는 ICMP 유형 9
(라우터 광고 메시지)를 통해 응답한다. 이 때 호스트는 매 7분 ~ 10분 간격으로 부터
ICMP 유형 9 메시지를 받게 된다.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=10  |   Code=0   |    Checksum                     |
+-----------------------------------------------------------+
|       Identifier        |    Sequence Number              |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                [그림] ICMP Echo Reply


■ ICMP Type 11
시간 초과(Time Exceeded)

(a) ICMP 시간 초과 메시지 생성 상황(1)
TTL 필드의 원래 설정값이 너무 낮거나 데이터그램의 여행 경로가 너무 길거나 무한 루프
가 발생한 경우에 생성된다.

(b) ICMP 시간 초과 메시지 생성 상황(2)
데이터그램이 단편화 되어 있음에도 불구하고 단편화된 데이터그램이 모두 도달하지 않아
재조립이 불가능한 경우에 생성된다. 특정 데이터그램이 단편화 되면 최종 호스트는 단편
화된 데이터그램에 대해 재조립에 책을을 져야 한다. 단편화된 데이터그램은 개별적으로
라우터를 통과하여 목적지까지 여행을 하게 된다. 만약 특정 단편화된 데이터그램이 경로
여행 중 없어진다면 호스트는 데이터그램을 재조립할 수 없으므로 전체 데이터그램을 삭
제하게 된다.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
|   Type=11  |  Code=0~1  |    Checksum                     |
+-----------------------------------------------------------+
|                       Not Used                            |
+-----------------------------------------------------------+
|                          데이터                           |
+-----------------------------------------------------------+

                [그림] Time Exceeded

Code 0 : TTL 만료로 인한 시간 초과
Code 1 : 데이터그램의 미도착으로 인한 시간 초과


■ ICMP Type 13, 14
시간 요청, 응답(Timestamp Request / Reply)

IP 노드는 자체의 시계를 유지하고 있다. ICMP 유형 13과 14 메시지는 원격 IP 노드로 부
터 시간을 알아 보기 위해 사용된다. 이는 NTP라는 프로토콜이 존재하지만 가장 단순화된
IP 노드의 시간을 동기화 한다.


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
| Type=13,14 |   Code=0   |    Checksum                     |
+-----------------------------------------------------------+
|       Identifier        |    Sequence Number              |
+-----------------------------------------------------------+
|                 Original Timestamp                        |
+-----------------------------------------------------------+
|                 Receive Timestamp                         |
+-----------------------------------------------------------+
|                 Transmit Timestamp                        |
+-----------------------------------------------------------+

                [그림] Timestamp Request / Reply


Type 필드 13 : 시간 요청
Type 필드 14 : 시간 응답
협정 시계시(UT) 자정으로 부터 계산함. 밀리초 단위로 계산
시작 시간(Original Timestamp)은 송신 호스트에서 지정
수신 시간(Receive Timestamp)은 수신 호스트에서 지정
변화 시간(Transmit Timestamp)은 ICMP 응답 메시지가 출발하는 시점의 시간을 지정


■ ICMP Type 15, 16
정보 요청, 응답(Information Request, Reply)

ICMP 요청 15는 요청 호스트의 IP 주소를 알아내기 위한 거이며, 유형 16은 응답을 되돌려
주기 위해 사용된다. 더이상 사용치 않고 있으며 RFC 1122에서 사용하지 말것 을 권장하고
있다. RARP, BOOTP 또는 DHCP를 사용할 것을 권장하고 있다.

- ICMP 유형 15 : 요청한 호스트 IP 주소를 알기 위함
- ICMP 유형 16 : 요청한 호스트 IP 주소에 대한 응답


■ ICMP Type 17, 18
주소 마스크 요청, 응답(Address Mask Request / Reply)

ICMP 유형 17, 18은 특정 호스트가 요청한 서브넷 마스크를 획득하고 사용하기 위해 생성
된다. 메시지가 생성되는 위치는 호스트이다. 디스크 없는 워크스테이션과 같은 자체 구성
시스템이 부트 할 때 자체의 서브넷 마스크를 발견할 수 있도록 하기 위함.

- ICMP 유형 17 : 요청한 호스트의 서브넷 마스크를 알아 보기 위함
- ICMP 유형 18 : 요청한 호스트의 서브넷 마스크에 대한 응답


    1Bytes       1Bytes                  2Bytes
|<---------->|<---------->|<------------------------------->|
+------------+------------+---------------------------------+
| Type=17,18 |   Code=0   |    Checksum                     |
+-----------------------------------------------------------+
|       Identifier        |    Sequence Number              |
+-----------------------------------------------------------+
|                     Address Mask                          |
+-----------------------------------------------------------+

                [그림] ICMP Address Mask