본문 바로가기

TCP/IP Protocol

TCP / IP 프로토콜 - 3 ( ICMP 분석 )

★ ICMP에 대해서..


IP 프로토콜은 오류 보고와 오류 수정 기능이 없다. 만약 오류가 생기면 이를 원래의 호스트에게 통보할 수 없는 것이다.

호스트는 라우터나 다른 호스트가 동작하고 있는지 확인해야 할 경우가 있고, 네트워크 관리자는 다른 호스트나 라우터로부터 정보를 획득할 필요가 있다. 그러나 IP 프로토콜은 관리 질의를 위한 메커니즘도 없다.

ICMP는 위의 두 가지 단점을 보완하기 위해서 설계되었으며 직접 데이터 링크 계층으로 전달되지 않고 위와 같이 IP 데이터그램 내에 캡슐화 된다.

 IP 데이터가 ICMP 메시지임을 알리기 위해 IP 데이터그램의 프로토콜 필드의 값은 1이 된다.

★ ICMP 오류 메시지에 대한 중요 사항..

- ICMP 오류 메시지를 전달하는 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다.
- 처음 단편이 아닌 단편화된 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다.
- 멀티캐스트 주소를 가진 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다.
- 127.0.0.0 // 0.0.0.0 과 같은 특별한 주소를 가진 데이터그램에 대해서는 오류 메시지가 생성되지 않는다.

★ ICMP 오류 메시지 // (위의 그림 참조)
- 모든 오류 메시지의 데이터 부분에는 원래 데이터그램의 IP 헤더와 데이터 중 처음 8 바이트가 포함되어있다.
- 헤더는 오류 메시지를 받는 원래 발신지에게 정보를 제공하기 위해 더해졌다.   
- 처음 8 바이트는 TCP, UDP 의 포트번호 TCP의 순서 번호에 관한 정보를 제공하며 이 정보는 TCP, UDP에 오류 상황을 알리기 위해서 필요하다.
- ICMP는 오류 패킷을 생성하고 IP 데이터그램내에 캡슐화 된다.



아래의 그림은 ICMP ( Internet Control Message Protocol )Header 부분이다.


★ Type ( 8bit )
- ICMP Message 의 종류
- Type 은 0 ~ 255까지 있으나 아래의 타입들이 주로 사용된다.

- 모든 타입을 알고 싶다면 아래 TXT 문서 다운로드 ~

파일 다운로드
 

Type                     Message
-----                       ------------------------------------------
  0                        에코 응답 (Echo Reply)
  3                        수신처 도달 불가능 (Destination Unreachable)
  4                        발신 제한 (Source Quench)
  5                        라우트 변경 (redirect)
  8                        에코 요구 (Echo Request)
11                        시간 초가 (Time Exceeded)
12                        파라미터 불량 (Parameter Problem)
13                        타임스탬프 요구 (Timestamp Request)
14                        타임스탬프 응답 (Timestamp Reply)
15                        정보 요구 (Information Request)
16                        정보 응답 (Information Reply)
17                        주소 마스크 요구 (Address Mask Request)
18                        주소 마스크 응답 (Address Mask Reply)



★ Code ( 8bit )
- Code 2, 3의 목적지 도달 불가 메세지는 목적지 호스트에 의해서만 생성될 수 있다.
- 나머지 Code 도달 불가 메시지는 라우터에 의해서만 생성될 수 있다.
- Code는 Type에 대한 부가적인 설명 정도로 이해하면 되겟다.
- 3번 Type에 대한 Code를 가장 많이 알고 있으나 다른 Type에 대한 Code 값도 존재한다.

- 모든 타입에 관한 Code 알고 싶다면 아래 TXT 문서 다운로드 ~

파일 다운로드
 

Type    Name                                  Codes           
-------    --------                                  --------
  3       Destination Unreachable         0  Net Unreachable                            
                                                      1  Host Unreachable                           
                                                      2  Protocol Unreachable                       
                                                      3  Port Unreachable                           
                                                      4  Fragmentation Needed and Don't Fragment was Set                           
                                                      5  Source Route Failed                        
                                                      6  Destination Network Unknown               
                                                      7  Destination Host Unknown                   
                                                      8  Source Host Isolated                      
                                                      9  Communication with Destination Network is Administratively Prohibited    
                                                     10  Communication with Destination Host is Administratively Prohibited
                                                     11  Destination Network Unreachable for Type of Service
                                                     12  Destination Host Unreachable for Type of  Service
                                                     13  Communication Administratively Prohibited 
                                                     14  Host Precedence Violation                  
                                                     15  Precedence cutoff in effect               



★ Checksum ( 16bit ) // T.O.S
* 송신자
    - 송신자는 1의 보수 연산을 사용
    - 검사합 필드를 0으로 만든다.
    - 헤더와 데이터에 대해 16bit 단어의 합을 구한다.
    - 합의 보수를 취하여 검사합을 구한다.
    - 검사합을 검사합 필드에 저장한다.
* 수신자
    - 수신자는 1의 보수 연산을 사용
    - 헤더와 데이터에 대해 16bit 단어의 합을 구한다.
    - 합의 보수를 구한다.
    -  전 단계의 결과가 16개의 0이면 메시지는 받아들여지고 그렇지 않으면 거절한다.