ICMP: Difference between revisions
From IT Wiki
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
IP 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜로 IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공한다. | IP 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜로 IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공한다. | ||
== 계층 == | == 기능 == | ||
* 3계층과 4계층 사이 | |||
** TCP/IP가 계층화가 제대로 이루어지지 않았다는 예시로 언급되는 프토로콜 | * 오류보고 : IP가 데이터그램을 폐기할 경우 최초 발신지에게 통보 (수정은 안함) | ||
* IP와 같은 3계층 보단 상위 계층이나 [[라우터]]와 같은 3계층 장비에서 처리 가능하여 3계층으로 보기도 함 | * 질의 : 라우터나 다른 호스트로부터 간단한 상태 정보 획득 | ||
==계층== | |||
*3계층과 4계층 사이 | |||
**TCP/IP가 계층화가 제대로 이루어지지 않았다는 예시로 언급되는 프토로콜 | |||
*IP와 같은 3계층 보단 상위 계층이나 [[라우터]]와 같은 3계층 장비에서 처리 가능하여 3계층으로 보기도 함 | |||
== 문제점 == | |||
* 명확하지 않은 계층 | |||
* 신뢰성이 없는 비연결형 데이터그램 방식 (Best Effort) | |||
* 오류제어 메커니즘의 부재. 오로지 폐기만 할 뿐 다른 대응을 하지 않는다. | |||
** 목적지를 찾지 못하면 폐기 | |||
** 타임아웃(TTL==0)이 될 경우 폐기 | |||
** 재조합 타이머가 만료되면 모든 fragment 폐기 | |||
* 라우터나 다른 호스트의 상태정보 수집 불가 | |||
==[[ICMP 메시지]]== | |||
전체 메시지 정보는 [[ICMP 메시지]] 문서 참조 | |||
=== 메시지 포맷 === | |||
{| class="wikitable" | |||
!Type (8bit) | |||
메세지 종류 | |||
!Code (8bit) | |||
오류 원인 코드 | |||
!Checksum (16bit) | |||
자기 자신에 대한 오류 검출 Checksum | |||
|- | |||
! colspan="3" rowspan="1" |Rest of the header | |||
|- | |||
! colspan="3" rowspan="1" |Data section | |||
|} | |||
=== 메시지 종류 === | |||
'''ICMP Error Report Message''' | |||
{| class="wikitable" | |||
!메세지 이름 | |||
!주요목적 | |||
!Type | |||
|- | |||
|Destination unreachable | |||
|목적지 도달 불가 | |||
|3 | |||
|- | |||
|Source quench | |||
|혼잡으로 인한 데이터그램 폐기 | |||
|4 | |||
|- | |||
|Time exceeded | |||
|Timeout 또는 TTL == 0 | |||
|11 | |||
|- | |||
|Parameter problem | |||
|IP 패킷이나 헤더 오류 | |||
|12 | |||
|- | |||
|Redirection | |||
|경로 재지정 필요 | |||
|5 | |||
|} | |||
'''Destination unreachable message''' | |||
* 코드 필드엔 데이터그램을 전달 할 수 없었던 이유를 명시한다. | |||
* ex) 0 : 하드웨어 고장, 2 : 상위 프로토콜 도달 불가, 4 : 단편화 불가 (Don't fragment) | |||
{| class="wikitable" | |||
|Type : 3 | |||
|Code : 0 to 15 | |||
|Checksum | |||
|- | |||
| colspan="3" rowspan="1" |Unused (All 0) | |||
|- | |||
| colspan="3" rowspan="1" |IP header and front 8 bytes of datagram data | |||
|} | |||
'''Source Quench Message''' | |||
* IP는 흐름제어 기능이 없기 때문에 발신자 쪽에서 데이터를 너무 빨리 보내면 오버플로우가 발생할 수도 있고, 이럴 경우 데이터그램을 그냥 폐기 | |||
* ICMP는 이를 발신자에게 통보하여 송신을 억제 | |||
** (ICMP의 한계) 어느 발신자가 혼잡을 유발하는지 알 수 없다. 따라서 엉뚱한 발신자가 희생될 수도 있다. | |||
* 혼잡이 해결된 후 속도를 회복시키는 메커니즘이 없다 | |||
* Source quench 메세지는 딱 한번만 보내진다. | |||
** 그 뒤로 데이터그램이 계속 날아오더라도 다시 보내지 않고 그냥 데이터그램을 폐기시켜 버린다. | |||
'''Time Exceeded Message''' | |||
두가지 경우가 있다. | |||
* Code = '0' 인 경우, Time to live필드가 0이 되어 데이터그램이 폐기 된 경우 | |||
* Code = '1' 인 경우, 단편이 지정된 시간내에 도착하지 않아 재조립에 실패한 경우 | |||
'''Parameter Problem Message''' | |||
데이터그램의 헤드에 에러가 있거나 부족한 부분이 있을 경우 | |||
* Code = '0' 인 경우, 필드 중에 불명료하거나 빠진 것이 있는 경우이다. | |||
* Code = '1' 인 경우, 옵션의 요구사항이 빠져 있는 경우이다. | |||
** 아래 Pointer 필드에 문제가 있는 바이트의 위치가 들어간다. | |||
{| class="wikitable" | |||
|Type : 12 | |||
|Code : 0 or 1 | |||
|Checksum | |||
|- | |||
|Pointer | |||
| colspan="2" |Unused (All 0) | |||
|- | |||
| colspan="3" rowspan="1" |IP header and front 8 bytes of datagram data | |||
|} | |||
'''Redirection Message''' | |||
* 라우터가 봤을때 자신이 아닌 다른 라우터를 경유 하는게 최종 목적지로 가는데 유리 할 경우 올바른 경로를 알려 준다. | |||
* ICMP가 전달하는 메세지 중 특별한 경우이다. IP 데이터그램을 폐기시키지 않고 그냥 메세지만 전달한다. | |||
{| class="wikitable" | |||
|Type : 5 | |||
|Code : 0 to 3 | |||
|Checksum | |||
|- | |||
| colspan="3" rowspan="1" |IP address of the target router | |||
|- | |||
| colspan="3" rowspan="1" |IP header and front 8 bytes of datagram data | |||
|} | |||
'''ICMP Query Message''' | |||
{| class="wikitable" | |||
|Type | |||
|메세지 이름 | |||
|주요목적 | |||
|- | |||
|8 / 0 | |||
|Echo request / reply | |||
|IP 프로토콜 점검, 호스트의 도달 가능성 검사 | |||
|- | |||
|13 / 14 | |||
|Timestamp request / reply | |||
|두 호스트간 IP 데이터그램의 왕복시간 측정 | |||
|- | |||
|17 / 18 | |||
|Address mask request / reply | |||
|네트워크 마스크를 모를 경우 라우터에 신청 (거의 안씀) | |||
|- | |||
|10 / 9 | |||
|Router solicitation / advertise | |||
|라우터 주소와 동작 상태 체크 | |||
|} | |||
'''Echo Request / Reply''' | |||
{| class="wikitable" | |||
|Type : 8 / 0 | |||
|Code : 0 | |||
|Checksum | |||
|- | |||
| colspan="2" |'''Identifier''' | |||
어떤 Request 인지 | |||
어떤 Request 에 대한 reply 인지 | |||
|'''Sequence number''' | |||
몇 번째 Request 인지 | |||
몇 번째 Request 에 대한 reply 인지 | |||
|- | |||
| colspan="3" rowspan="1" |'''Optional data''' | |||
메시지를 포함시켜 보낼 경우 똑같은 메세지가 돌아오게 된다. | |||
|} | |||
'''Address Mask Request / Reply''' | |||
디스크가 없는 호스트가 구동될 때 사용되는 것으로, 현재는 거의 안쓰인다 | |||
'''Timestamp Request / Reply''' | |||
{| class="wikitable" | |||
|Type : 13 / 14 | |||
|Code : 0 | |||
|Checksum | |||
|- | |||
| colspan="2" |'''Identifier''' | |||
어떤 Request 인지 | |||
어떤 Request 에 대한 reply 인지 | |||
|'''Sequence number''' | |||
몇 번째 Request 인지 | |||
몇 번째 Request 에 대한 reply 인지 | |||
|- | |||
| colspan="3" rowspan="1" |Original timestamp (보내는 시간) | |||
|- | |||
| colspan="3" rowspan="1" |Receive timestamp (응답 메시지에만 기록된다. 발신 메시지에선 그냥 여백) | |||
|- | |||
| colspan="3" rowspan="1" |Transmit timestamp (응답 메시지에만 기록된다. 발신 메시지에선 그냥 여백) | |||
|} | |||
== PING == | == PING == | ||
*ICMP를 사용한 대표적인 프로그램(또는 명령) | |||
*ICMP Echo Reply를 이용 | |||
[[분류:네트워크]] | [[분류:네트워크]] | ||
[[분류:프로토콜]] | [[분류:프로토콜]] |
Revision as of 11:28, 10 October 2021
Internet Control Message Protocol, RFC 792
IP 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜로 IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공한다.
기능
- 오류보고 : IP가 데이터그램을 폐기할 경우 최초 발신지에게 통보 (수정은 안함)
- 질의 : 라우터나 다른 호스트로부터 간단한 상태 정보 획득
계층
- 3계층과 4계층 사이
- TCP/IP가 계층화가 제대로 이루어지지 않았다는 예시로 언급되는 프토로콜
- IP와 같은 3계층 보단 상위 계층이나 라우터와 같은 3계층 장비에서 처리 가능하여 3계층으로 보기도 함
문제점
- 명확하지 않은 계층
- 신뢰성이 없는 비연결형 데이터그램 방식 (Best Effort)
- 오류제어 메커니즘의 부재. 오로지 폐기만 할 뿐 다른 대응을 하지 않는다.
- 목적지를 찾지 못하면 폐기
- 타임아웃(TTL==0)이 될 경우 폐기
- 재조합 타이머가 만료되면 모든 fragment 폐기
- 라우터나 다른 호스트의 상태정보 수집 불가
ICMP 메시지
전체 메시지 정보는 ICMP 메시지 문서 참조
메시지 포맷
Type (8bit)
메세지 종류 |
Code (8bit)
오류 원인 코드 |
Checksum (16bit)
자기 자신에 대한 오류 검출 Checksum |
---|---|---|
Rest of the header | ||
Data section |
메시지 종류
ICMP Error Report Message
메세지 이름 | 주요목적 | Type |
---|---|---|
Destination unreachable | 목적지 도달 불가 | 3 |
Source quench | 혼잡으로 인한 데이터그램 폐기 | 4 |
Time exceeded | Timeout 또는 TTL == 0 | 11 |
Parameter problem | IP 패킷이나 헤더 오류 | 12 |
Redirection | 경로 재지정 필요 | 5 |
Destination unreachable message
- 코드 필드엔 데이터그램을 전달 할 수 없었던 이유를 명시한다.
- ex) 0 : 하드웨어 고장, 2 : 상위 프로토콜 도달 불가, 4 : 단편화 불가 (Don't fragment)
Type : 3 | Code : 0 to 15 | Checksum |
Unused (All 0) | ||
IP header and front 8 bytes of datagram data |
Source Quench Message
- IP는 흐름제어 기능이 없기 때문에 발신자 쪽에서 데이터를 너무 빨리 보내면 오버플로우가 발생할 수도 있고, 이럴 경우 데이터그램을 그냥 폐기
- ICMP는 이를 발신자에게 통보하여 송신을 억제
- (ICMP의 한계) 어느 발신자가 혼잡을 유발하는지 알 수 없다. 따라서 엉뚱한 발신자가 희생될 수도 있다.
- 혼잡이 해결된 후 속도를 회복시키는 메커니즘이 없다
- Source quench 메세지는 딱 한번만 보내진다.
- 그 뒤로 데이터그램이 계속 날아오더라도 다시 보내지 않고 그냥 데이터그램을 폐기시켜 버린다.
Time Exceeded Message
두가지 경우가 있다.
- Code = '0' 인 경우, Time to live필드가 0이 되어 데이터그램이 폐기 된 경우
- Code = '1' 인 경우, 단편이 지정된 시간내에 도착하지 않아 재조립에 실패한 경우
Parameter Problem Message
데이터그램의 헤드에 에러가 있거나 부족한 부분이 있을 경우
- Code = '0' 인 경우, 필드 중에 불명료하거나 빠진 것이 있는 경우이다.
- Code = '1' 인 경우, 옵션의 요구사항이 빠져 있는 경우이다.
- 아래 Pointer 필드에 문제가 있는 바이트의 위치가 들어간다.
Type : 12 | Code : 0 or 1 | Checksum |
Pointer | Unused (All 0) | |
IP header and front 8 bytes of datagram data |
Redirection Message
- 라우터가 봤을때 자신이 아닌 다른 라우터를 경유 하는게 최종 목적지로 가는데 유리 할 경우 올바른 경로를 알려 준다.
- ICMP가 전달하는 메세지 중 특별한 경우이다. IP 데이터그램을 폐기시키지 않고 그냥 메세지만 전달한다.
Type : 5 | Code : 0 to 3 | Checksum |
IP address of the target router | ||
IP header and front 8 bytes of datagram data |
ICMP Query Message
Type | 메세지 이름 | 주요목적 |
8 / 0 | Echo request / reply | IP 프로토콜 점검, 호스트의 도달 가능성 검사 |
13 / 14 | Timestamp request / reply | 두 호스트간 IP 데이터그램의 왕복시간 측정 |
17 / 18 | Address mask request / reply | 네트워크 마스크를 모를 경우 라우터에 신청 (거의 안씀) |
10 / 9 | Router solicitation / advertise | 라우터 주소와 동작 상태 체크 |
Echo Request / Reply
Type : 8 / 0 | Code : 0 | Checksum |
Identifier
어떤 Request 인지 어떤 Request 에 대한 reply 인지 |
Sequence number
몇 번째 Request 인지 몇 번째 Request 에 대한 reply 인지 | |
Optional data
메시지를 포함시켜 보낼 경우 똑같은 메세지가 돌아오게 된다. |
Address Mask Request / Reply
디스크가 없는 호스트가 구동될 때 사용되는 것으로, 현재는 거의 안쓰인다
Timestamp Request / Reply
Type : 13 / 14 | Code : 0 | Checksum |
Identifier
어떤 Request 인지 어떤 Request 에 대한 reply 인지 |
Sequence number
몇 번째 Request 인지 몇 번째 Request 에 대한 reply 인지 | |
Original timestamp (보내는 시간) | ||
Receive timestamp (응답 메시지에만 기록된다. 발신 메시지에선 그냥 여백) | ||
Transmit timestamp (응답 메시지에만 기록된다. 발신 메시지에선 그냥 여백) |
PING
- ICMP를 사용한 대표적인 프로그램(또는 명령)
- ICMP Echo Reply를 이용