본문 바로가기

컴퓨터네트워크

네트워크층: 데이터전송 - ICMPv4

728x90
반응형

인터넷 제어 메시지 프로토콜 버전4 (ICMPv4, Internet Control Message Protocol version 4)는 IPv4 프로토콜의 a) 오류 보고와 오류 수정 기능 그리고 b) 호스트와 관리 조회를 위한 매커니즘이 없다는 2가지 단점을 보완하기 위해 설계되었다.

ICMP는 IP 프로토콜을 돕는 네트워크층 프로토콜이다. 

하지만 데이터 링크층으로 바로 전달되지 않으며 메시지는 하위 계층으로 전달되기 전에 IP 데이터그램에 캡슐화된다.

IP 데이터그램이 ICMP 메시지를 캡슐화할 때, 프로토콜 필드 값은 IP를 사용하는 프로토콜이 ICMP 메시지임을 나타내는 1로 설정된다.

 

메시지들

ICMPv4 메시지는 오류 보고(error-reporting) 메시지와 조회(query) 메시지로 나눌 수 있다.

a) 오류 보고 메시지는 라우터(목적지)나 호스트가 IP 패킷을 처리하는 도중 발생하는 문제를 보고한다.

b) 조회 메시지는 쌍(요청과 응답))으로 생성되며 호스트 혹은 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해 사용한다.

조회 메시지는 인터넷에서 호스트나 라우터가 잘 동작하고 있는지를 알아보거나, 두 장치 사이의 IP 데이터그램이 단방향 시간이나 왕복시간을 알아낸다. 또는 두 장치 클록이 동기화되었는지 여부를 확인한다.

ICMP 프로토콜 형식

8바이트 헤더와 가변 길이 데이터 부분으로 되어 있다. 

헤더의 일반 형식은 각 메시지별로 다르지만 처음 4바이트는 전부 공통이다.

type 필드는 메시지의 유형을 나타낸다.

code 필드는 특정 메시지 유형의 이유를 나타낸다.

checksum 필드는 메시지의 오류 여부를 확인하는 검사합 필드이다.

 

ICMP 프로토콜 종류

 

Error-reporting message에서 데이터 영역(Data section)은 오류를 가지고 있는 원폰 패킷을 찾기 위한 정보를 전달한다.

Query messages에서 데이터 영역(Data section)은 조회의 유형(type)을 기반으로 하는 추가적인 정보를 전달한다.

IP 전달 과정에서 발생한 오류가 발생하면, 일반적으로 그 패킷을 폐기한 후, 그 패킷의 송신자에게 오류 발생을 통보한다.

ICMP Error Reporting

 

오류 보고 메시지들

IP가 신뢰성 없는 프로토콜이기 때문에 ICMP의 주된 임무 중 하나는 IP 데이터그램의 프로세싱 동안 발생하는 오류를 보고하는 것이다. ICMP는 오류를 정정하지 못하며 정정은 상위 계층 프로토콜에게 맡긴다.

오류 메시지는 언제나 최초의 발신지로 보내진다.

 

오류 보고 과정을 단순화하기 위한 규칙

a) 현재 호스트 또는 루프백(loopback)과 같은 특수 주소나 멀티캐스트 주소를 가지는 데이터그램에 대해서 오류 메시지가 생성되지 않는다.

b) ICMP 오류 메시지를 전달하는 데이터그램에 대한 응답으로 ICMP 오류 메시지가 생성되지 않는다. 즉, 중복 오류 메시지를 발생시키지 않는다.

c) 처음 단편이 아닌 단편화된 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다. 즉, 첫 번째 단편에 대해서만 오류 메시지가 발생한다.

모든 오류 메시지의 데이터 영역에는 원래 데이터그램의 IP 헤더와 이 데이터그램의 데이터 가운데 처음 8바이트가 포함된다는 것에 유의해야한다.

ICMP 오류 메시지 인캡슐레이션

 

Error-reporting types

목적지 도달 불가(Type: 3)

가장 널리 사용되는 오류 메시지는 목적지 도달 불가(destination unreachable, Type:3)이다.

이 메시지는 왜 데이터그램이 최종 못적지에 도착하지 못했는지에 대한 오류 메시지의 유형을 나타내기 위해 0부터 15까지 서로 다른 코드를 사용한다.

 

발신지 억제(Type: 4)

이 메시지는 송신자에게 네트워크에 충돌이 발생해서 데이터그램이 폐기되었음을 알리는 메시지이다.

 

재지정 메시지(Type: 5)

재지정 메시지는 발신자가 메시지를 전송하기 위해 잘못된 라우터를 사용할 때 사용되는 메시지이다.

 

시간경과(Type: 11)

TTL값이 0이 되면, 데이터그램은 방문한 라우터에 의해 폐기된다. 시간경과 메시지를 데이터그램이 폐기되었다는 것을 알기기 위해 발신지에게 전송한다.

 

매개변수 문제(Type: 12)

매개변수 문제 메시지는 데이터그램의 헤더에 문제가 있거나 어떤 옵션이 없거나 옵션의 의미를 알 수 없는 경우에 전송될 수 있다.

 

Query message types

ICMP에서 조회 메시지는 데이터그램 안에 전달자로 캡슐화되어 IP 데이터그램과 연관성 없이 독립적으로 사용할 수 있다.

ICMP Query 캡슐화

에코 요청(echo request, Type: 8) & 에코 응답(echo reply, Type: 0)

쌍으로 다른 호스트나 라우터가 활성화되었는지 여부를 테스트하기 위해 호스트나 라우터가 사용한다.

에코 요청 메시지를 전달받은 호스트나 라우터가 살아있다면, 에코 응답 메시지들로 응답한다. 핑(ping)과 트레이스루트(traceroute)와 같은 디버깅 도구에서 에코 요청과 에코 응답 메시지 쌍을 확인할 수 있다.

 

타임스탬프 요청(timestamp request, Type: 13) & 타임스탬프 응답(timestamp reply, Type: 14)

두 장치 사이의 왕복시간을 확인할 때나 두 장치 사이의 클록이 동기화 되었는지 확인할 때 사용된다.

타임스탬프 요청 메시지는 시간이 정의되어 있는 32비트 메시지로 전송된다.

 

디버깅 도구들

핑(Ping)

호스트가 잘 동작하고 있는지와 응답이 가능한지를 알아보기 위해 핑(ping) 프로그램을 사용한다.

발신지 호스트는 ICMP 에코 요청 메시지를 전송한다. 목적지가 살아있다면, ICMP 에코 응답 메시지로 응답한다. 핑은 왕복 시간을 계산할 수 있으며 메시지의 데이터 여역에 전송 시간을 삽입한다.

패킷이 도착하면, 왕복 시간(RTT)을 구하기 위해 도착 시간에서 출발 시간을 뺀다. (arrival time - request time)

 

Traceroute(유닉스) 또는 Tracert(윈도우즈)

발신자에서 목적지까지 패킷의 경로를 추적할 수 있다. 경로를 지나는 동안 방문하게 되는 모든 라우터의 IP 주소를 찾을 수 있다.

프로그램은 항상 방문하는 최대 30홉(라우터)에 대해 확인하도록 설정된다.

인터넷에서 홉 수는 일반적으로 이것보다 적다.

유닉스와 윈도우즈에서 서로 다르게 동작한다.

 

ICMP Checksum

전체 메시지(헤더와 데이터)에 대해 계산된다.

기존 IP헤더 checksum과 동일한 방법을 사용한다. 다만, ICMP는 전체 ICMP 헤더와 데이터에 대한 checksum을 수행

 

ICMP checksum

 

반응형