인터넷 제어 메시지 프로토콜(ICMP, Internet Control Message Protocol)은 오류 보고와 오류 수정 기능, 호스트와 관리 질의를 위한 메커니즘을 보완하기 위해 설계되었다.
ICMP는 네트워크 계층 프로토콜이지만 메시지가 직접 데이터링크 계층으로 전달되지 않는다. 대신 하위 계층으로 가기 전에 IP 데이터그램 내에 캡슐화된다.
메시지 유형
ICMP 메시지는 오류 보고(error-reporting) 메시지와 질의(query) 메시지로 나눌 수 있다.
- 오류 보고 메시지 : 라우터나 (목적지) 호스트가 IP 패킷을 처리하는 도중 탐지하는 문제를 보고한다.
- 질의 메시지 : 질의 메시지는 쌍으로 생성되는데 호스트나 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해 사용한다.
메시지 형식
- Type 필드 : 메시지의 유형을 나타낸다.
- Code 필드 : 특정 메시지 유형의 이유를 지정한다.
- Checksum 필드 : 검사합 필드이다.
오류 보고 메시지
ICMP의 주 임무는 오류를 수정하는 것이 아니고 보고하는 것이다. 오류 수정은 상위 계층 프로토콜에 맡긴다. 데이터그램으로부터 알 수 있는 경로에 대한 정보는 발신지와 목적이뿐이기 때문에 오류 메시지는 언제나 최초의 발신지에 보내진다. 오류 유형에는 목적지 도달 불가능, 발신지 억제, 시간 경과, 매개변수 문제 및 재지정이 있다.
ICMP 오류 메시지에 대한 중요한 사항
- ICMP 오류 메시지를 전달하는 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다.
- 처음 단편이 아닌 단편화된 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다.
- 멀티캐스트 주소를 가진 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다.
- 127.0.0.0이나 0.0.0.0과 같은 특별한 주소를 가진 데이터그램에 대해서는 오류 메시지가 생성되지 않는다.
목적지 도달 불가
라우터가 데이터그램을 전달할 수 없거나 호스트가 데이터그램을 배달할 수 없을 때 데이터그램을 폐기되고 라우터나 호스트는 데이터그램을 시작했던 발신지 호스트에게 목적지 도달 불가(destination unreachable) 메시지를 보낸다.
코드 필드 내용
- Code 0 : 하드웨어 고장 등의 이유로 네트워크에 도달할 수 없다.
- Code 1 : 호스트에 도달할 수 없다. (하드웨어 고장 때문일 수 있다.)
- Code 2 : 프로토콜에 도달할 수 없다.
- Code 3 : 포트에 도달할 수 없다.
- Code 4 : 단편화가 필도하나 데이터그램의 DF(do not Fragment) 필드가 설정되어 있다.
- Code 5 : 발신지 라우팅이 수행할 수 없다.
- Code 6 : 목적지 네트워크가 알려져 있지 않다. 라우터가 목적지 네트워크에 대해 정보를 가지고 있지 않다.
- Code 7 : 목적지 호스트가 알려져 있지 않다. 라우터가 목적지 호스트의 존재에 대해 알고 있지 않다.
- Code 8 : 발신지 호스트가 고립되어 있다.
- Code 9 : 목적지 네트워크와 통신이 관리상의 이유로 금지되어 있다.
- Code 10 : 목적지 호스트와 통신이 관리상의 이유로 금지되어 있다.
- Code 11 : 명시된 서비스 유형에 대해 네트워크에 도달할 수 없다.
- Code 12 : 명시된 서비스 유형에 대해 호스트에 도달할 수 없다.
- Code 13 : 관리자가 필터를 설치하여 호스트에 도달할 수 없다.
- Code 14 : 호스트 우선순위가 위반되었기 때문에 호스트에 도달할 수 없다.
- Code 15 : 우선숭위가 충분히 높지 않아서 호스트에 도달할 수 없다.
코드 2와 3의 목적지 도달 불가 메시지는 목적지 호스트에 의해서만 생성될 수 있다. 나머지 목적지 도달 불가 메시지는 라우터에 의해서만 생성될 수 있다. 라우터는 패킷의 배달을 방해하는 모든 문제를 발견할 수 없다.
발신지 억제
ICMP의 발신지 억제(source quench) 메시지는 IP에 흐름 제어와 혼잡 제어 기능과 유사한 기능을 추가하기 위하여 설계되었다. 혼잡으로 인해 데이터그램을 폐기하면, 라우터나 호스트는 데이터그램의 송신자에게로 발신지 억제 메시지를 보낸다.
발신지 억제 메시지의 목적
- 데이터그램이 폐기되었음을 발신지에게 알린다.
- 경로 상에서 혼잡이 일어났고 발신지는 송신 과정을 천천히(또는 억제) 하여야 한다는 것을 발신지에게 경고한다.
발신지 억제에 대한 추가 설명
- 혼잡을 겪고 있는 라우터나 목적지 호스트는 폐기되는 데이터그램 하나 당 발신지 억제 메시지 하나를 발신지 호스트에 보내야 한다.
- 발신지는 더 이상의 발신지 억제 메시지가 수신되지 않을 때까지 송신 속도를 낮추어야 한다.
- 일-대-일 통신에서는 발신지 억제 메시지가 매우 도움될 수 있으나 다-대-일 통신에서는 별로 유용하지 않다.
시간 경과
시간 경과(time exceeded) 메시지가 생성되는 경우
- 라우터가 데이터그램의 수명 필드를 감소한 후 이 값이 0이 되면 데이터그램을 폐기하고 시간 경과 메시지를 원 발신지에게 보낸다.
- 최종 목적지가 정해진 시간 내에 모든 단편을 받지 못했으면 이미 수신된 단편은 폐기하고 원래의 발신지로 시간 경과 메시지를 보낸다.
- Code 0 : 수명 필드의 값이 0이 되었음을 알리기 위해 라우터에 의해 사용
- Code 1 : 모든 단편이 지정된 시간 내에 도착하지 않았음을 알리기 위해 목적지 호스트에 의해 사용
매개변수 문제
라우터나 목적지 호스트가 데이터그램의 필드에서 불명확하거나 빠진 값을 발견하게 되면 데이트그램을 폐기하고 매개변수 문제(parameter problem) 메시지를 발신지에게 보낸다.
- Code 0 : 헤더 필드 중에서 불명료하거나 빠진 것이 있다. 이 경우 포인터 필드의 값은 문제가 있는 바이트를 가리킨다.
- Code 1 : 옵션의 요구되는 부분이 빠졌다는 것이다. 이 경우 포인터는 사용되진 않는다.
재지정
보통 호스트의 라우팅 테이블은 디폴트 라우터 한 개의 IP 주소를 알고 있을 때가 많다. 이러한 이유로 다른 네트워크로 가는 데이터그램을 보낼 때 호스트는 틀린 라우터에게 보낼 수 있다. 이러한 경우 데이터그램을 받은 라우터는 데이터그램을 올바른 라우터에게 전송하고, 이때 호스트의 라우팅 테이블을 갱신하기 위해 호스트에게 재지정(redirection) 메시지를 보낸다.
호스트는 일반적으로 작은 라우텅 테이블로 시작하지만 점진적으로 증가되거나 갱신된다. 이러한 일을 수행하는 도구 중의 하나가 재지정 메시지이다.
- Code 0 : 네트워크 지정 경로를 위한 재지정
- Code 1 : 호스트 지정 경로를 위한 재지정
- Code 2 : 특정한 서비스 유형에 기초한 네트워크 지정 경로를 위한 재지정
- Code 3 : 특정한 서비스 유형에 기초한 호스트 지정 경로를 위한 재지정
재지정 메시지는 라우터로부터 같은 네으퉈크에 있는 호스트로 전달된다.
질의 메시지
ICMP는 오류 보고 외에 네트워크 문제를 진단할 수도 있다. 5쌍의 메시지가 설계되었지만 현재는 에코 요청과 응답, 타임스탬프 요청과 응답의 두 쌍만 사용되고 있다. 이 유형의 ICMP 메시지는 노드가 메시지를 보내면 목적지 노드가 특정한 형식에 따라 응답한다.
에코 요청과 응답
에코 요청과 응답(echo request and reply) 메시지는 고장 진단의 목적으로 설계되었다.
에코 요청 메시지는 호스트나 라우터에 의해 보내질 수 있다. 에코 요청 메시지를 받은 호스트나 라우터는 에코 응답 메시지를 보낸다.
에코 요청과 에코 응답 메시지는 네트워크 관리자가 IP 프로토콜의 동작을 검사하기 위하여 사용할 수 있다.
에코 요청과 에코 응답 메시지는 호스트의 도달 가능성(reachablilty)을 검사할 수 있다. 이것은 ping 명령을 수행함으로써 이루어진다.
식별자(identifier)와 순서 번호(sequence number) 필드는 프로토콜에 의해 정형적으로 정의되어 있지는 않고 송신자에 의해 임의로 사용될 수 있다.
타임스탬프 요청과 응답
두 시스템(호스트나 라우터)은 타임스탬프 요청과 응답(timestamp request and reply) 메시지를 이용하여 IP 데이터그램이 이 둘 사이를 지나가는데 필요한 왕복 시간(round-trip time)을 결정할 수 있다.
각각의 타임스템프 필드에는 세계 표준시(Universal Time) 자정으로부터의 시간을 milliseconds 단위로 표현한 값이 저장된다.
발신지는 타임스탬프 요청 메시지를 생성한다. 발신지는 출발시간에서의 자신의 시계 값을 원래 타임스탬프(original timestamp) 필드에 삽입한다. 다른 두 필드는 0으로 채워져있다.
목적지는 타임스탬프 응답 메시지를 생성한다. 목적지는 요청 메시지에 있는 원래 타임스탬프 값을 응답 메시지의 같은 필드에 복사한 후 수신 타임스탬프(receive timestamp) 필드에 요청이 수신된 시점에서의 자신의 시계 값을 삽입한다. 마지막으로 전달 타임스탬프(transmit timestamp) 필드에는 응답 메시지가 출발하는 시점의 시계 값을 삽입한다.
- 송신기간 = 수신 타임스탬프 - 원래 타임스탬프
- 수신기간 = 패킷이 돌아온 시간 - 전달 타임스탬프
- 왕복시간 = 송신시간 + 수신시간
시간 동기화가 되어 있지 않더라도 타임스탬프 요청과 타임스탬프 응답 메시지는 발신지와 목적지 사이의 왕복시간을 측정하기 위해 사용될 수 있다.
정확한 편도 시간을 알 수 있다면 타임 스탬프 요청과 타임스탬프 응답 메시지를 사용하여 두 장치의 시계를 동기화 시킬 수 있다.
검사합
ICMP에서 검사합은 헤더와 데이터를 포함하는 전체 메시지에 대해 계산된다.
검사합 계산
송신자는 1의 보수 연산을 사용하여 다음의 단계를 수행한다.
- 검사합 필드를 0으로 만든다.
- 헤더와 데이터에 대해 16비트 단어의 합을 구한다.
- 합의 보수를 취하여 검사합을 구한다.
- 검사합을 검사합 필드에 저장한다.
검사합 검사
수신자는 1의 보수 연산을 사용하여 다음의 단계를 수행한다.
- 헤더와 데이터에 대해 16비트 단어의 합을 구한다.
- 합의 보수를 구한다.
- 전 단계의 결과가 16개의 0이면 메시지는 받아들여지고 그렇지 않으면 거절한다.
디버깅 도구
디버깅 도구를 사용하여 호스트나 라우터가 정상적으로 작동하고 잇는지를 점검할 수 있고 패킷이 전달되는 경로를 추적할 수도 있다.
Ping
Ping 프로그램을 사용하여 호스트가 정상적으로 작동하고 있으며 응답하고 있는지 점검할 수 있다. 발신지 호스트는 ICMP 에코 요청 메시지를 보내고 정상적으로 작동하는 목적지는 ICMP 에코 응답 메시지로 응답한다.
Ping은 왕복시간(round-trip time)도 계산할 수 있다.
Traceroute
UNIX의 traceoute 프로그램이나 윈도우즈의 tracert를 사용하여 패킷이 발신지에서 목적지까지 전달되는 경로를 추적할 수 있다.
ICMP 패키지
입력 모듈
입력 모듈(input module)은 수신된 모든 ICMP를 처리한다. ICMP 패킷이 IP 계층으로부터 전달되면 수행된다.
- 요청 메시지 수신 : 응답 메시지를 생성하여 송신
- 재지정 메시지 수신 : 수신된 정보를 사용하여 라우팅 테이블을 갱신
- 오류 메시지 수신 : 해당하는 프로토콜에게 오류를 발생시킨 상황에 대해 통보
출력 모듈
출력 모듈(output module)은 상위 계층 또는 IP 프로토콜에 의해 요청된 요청(request), 간청(solicitation), 오류 메시지를 생성한다.
연습문제
1. ICMP는 ________ 계층 프로토콜이다.
a. 데이터링크
b. 전송
c. 네트워크
d. 정답 없음
2. ICMP 메시지는 ________ 바이트의 헤더와 가변 길이 데이터 섹션으로 구성된다.
a. 16
b. 32
c. 8
d. 정답 없음
3. 다음의 ICMP 메시지에 대한 설명 중 맞는 것을 고르라.
a. ICMP 오류 메시지에 대해서도 ICMP 오류 메시지가 생성될 수 있다.
b. 각 단편에 대해서 ICMP 오류 메시지가 생성될 수 있다.
c. 멀티캐스트 데이터그램에 대해서 ICMP 오류 메시지가 생성될 수 있다.
d. 정답 없음(위에 보기가 다 틀렸다.)
4. 다음의 ICMP 메시지에 대한 설명 중 맞는 것을 고르라.
a. ICMP 오류 메시지에 대해서도 ICMP 오류 메시지가 생성될 수 있다.
b. 첫 번째 단편에 대해서만 ICMP 오류 메시지가 생성될 수 있다.
c. 멀티캐스트 데이터그램에 대해서 ICMP 오류 메시지가 생성될 수 있다.
d. 정답 없음
5. 다음의 ICMP 메시지에 대한 설명 중 맞는 것을 고르라.
a. ICMP 오류 메시지에 대해서도 ICMP 오류 메시지가 생성될 수 있다.
b. 각 단편에 대해서만 ICMP 오류 메시지가 생성될 수 있다.
c. 127.0.0.0과 0.0.0.0과 같은 특별한 주소를 가지는 데이터그램에 대해서 ICMP 오류 메시지가 생성될 수 없다.
d. 정답 없음
6. 만약 호스트가 자신의 시계를 다른 호스트와 동기화할 필요가 있다면 ________ 메시지를 보낸다.
a. 타임스탬프
b. 발신지 억제
c. 패킷 수명 점검
d. 정답 없음
7. 에코 요청과 에코 응답의 목적은 ________ 이다.
a. 오류 보고
b. 노드 대 노드 통신 점검
c. 패킷 수명 점검
d. 정답 없음
8. 오류 보고에서 캡슐화된 ICMP 패킷은 ________로 간다.
a. 송신자
b. 수신자
c. 라우터
d. 정답 없음(최초의 발신지)
9. 어느 필드가 ICMP 메시지의 종류를 유릭하게 식별하는가?
a. 유형
b. 코드
c. 옵션 ID
d. 정답 없음
10. 홉 수 필드가 0이 되었으나 아직 목적지에 도달하지 못한 경우 ________오류 메시지가 보내진다.
a. 목적지 도달 불가능
b. 시간 경과
c. 매개변수 문제
d. 정답 없음
11. 정해진 시간 내에 메시지의 모든 단편이 수신되지 않은 경우 ________ 오류 메시지가 보내진다.
a. 발신지 억제
b. 시간 경과
c. 매개변수 문제
d. 정답 없음
12. IP 데이터그램의 헤더나 옵션 필드에 오류가 발생하면 ________ 오류 메시지가 발생된다.
a. 매개변수 문제
b. 발신지 억제
c. 라우터 간청
d. 정답 없음
13. ________는 라우터 간청 메시지를 보냄으로써 네트워크의 ________에 대해 알 수 있다.
a. 라우터, 라우터
b. 라우터, 호스트
c. 호스트, 라우터
d. 정답 없음(정확히 모르겠다. 라우터 간청 메시지는 ICMP에서 폐기된 메시지이다.)
14. 누가 ICMP 오류 보고 메시지를 보낼 수 있는가?
a. 라우터
b. 목적지 호스트
c. 라우터와 목적지 호스트
d. 정답 없음
15. 발신지 호스트에게 혼잡을 경고하는 방법 중의 하나는 ________ 메시지이다.
a. 재지정
b. 에코 요청
c. 발신지 억제
d. 정답 없음
16. ________경우 시간 경과 메시지가 생성된다.
a. 호스트들 사이의 왕복 시간이 0에 가까워진
b. 메시지의 단편이 정해진 시간 내에 도착하지 않은
c. a, b 모두
d. 정답 없음
17. 노드에 도달할 수 있는지를 검사하기 위하여 ________ 메시지가 보내질 수 있다.
a. 에코 응답
b. 에코 요청
c. 재지정
d. 정답 없음
18. 두 시계 사이의 시간차를 계산함에 있어서 음의 수는 ________을 의미한다.
a. 틀린 계산
b. 발신지 시게가 목적지 시계보다 느림
c. 목적지 시계가 발신지 시계보다 느림
d. 정답 없음
19. IP 데이터그램 A가 목적지에 도달할 수 없다. ICMP 오류 메시지가 발신지에 보내졌다. ICMP 패킷을 캡슐화 하고 있는 IP 데이터그램의 B의 데이터 필드는 ________을 포함하고 있다.
a. ICMP 헤더만
b. ICMP 헤더와 데이터그램 A의 8바이트
c. 데이터그램 A만
d. 정답 없음(모르겠다.)
연습문제는 정답이 아닐 수 있음
'네트워크 프로토콜' 카테고리의 다른 글
모바일 IP (0) | 2021.11.09 |
---|---|
ARP (0) | 2021.10.25 |
IP 패킷의 전달과 포워딩 (0) | 2021.10.24 |
IPv4 패킷 형식 (0) | 2021.10.23 |
IPv4 주소 (0) | 2021.10.22 |