Internet Control Message Protocol Version 4 (ICMPv4) Chapter 9 Internet Control Message Protocol Version 4 (ICMPv4)
학습목표(OBJECTIVES): ICMP의 필요성. 두 가지 종류의 ICMP 메시지인 오류보고(error reporting)와 질의(query) 메시지 설명. 오류 보고 메시지 목적과 형식 설명. 질의 메시지 목적과 형식 설명. ICMP 메시지의 검사합 방법 설명. 디버깅 도구들이 ICMP 프로토콜을 사용하는 방법 설명. ICMP 를 구현한 간단한 소프트웨어 패키지 구성 설명.
Chapter Outline 9.1 개요(Introduction) 9.2 메시지(Messages) 9.3 디버깅(Debugging Tools) 9.4 ICMP 패키지(Package)
9-1 개요 IP 프로토콜은 오류–보고나 오류 교정 메커니즘이 없다. 만약 무언가 잘못되었을 경우 어떻게 할 것인가? 최종 목적지로 가는 라우터를 찾지 못하거나 TTL 필드 값이 0이 되어 데이터그램을 폐기하면 어떻게 되는가? 이들은 오류가 일어났음에도 불구하고 IP 프로토콜이 원래의 호스트에게 통보할 메커니즘이 없는 경우들의 예이다.
IP프로토콜의 문제점 신뢰성이 없고 비연결형 데이터그램 전달 제공 최선의 노력 전달 서비스 오류 제어와 지원 메커니즘이 없음 오류 보고 및 오류 수정 기능이 없음 호스트와 관리 질의를 위한 메커니즘이 없다 호스트는 간혹 라우터나 다른 호스트가 동작하고 있는지 알 필요가 있다 네트워크 관리자는 다른 호스트나 라우터로부터 정보를 획득할 필요가 있다 이 문제점을 보완하기 위해 ICMP 설계
네트워크 계층에서 ICMP 위치
ICMP 캡슐화(encapsulation) IP 데이터그램의 프로토콜 필드 값 1
9-2 메시지 유형 ICMP 메시지는 크게 두 가지 부류로 나눈다: 오류-보고(error-reporting) 메시지와 질의(query) 메시지. 오류-보고 메시지는 라우터나 호스트(목적지)가 IP 패킷을 처리할 때 알게 되는 문제들을 보고한다. 질의 메시지는 쌍으로 생성되는데, 호스트나 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해 사용된다. 또, 호스트는 같은 네트워크에 있는 라우터들을 발견하고, 라우터는 노드가 메시지를 다른 것으로 재지정하는데 도움을 준다.
9.2 메시지 유형 오류 보고 메시지 : IP 패킷 처리 도중 발견된 문제를 보고 질의 메시지 : 다른 호스트로부터 특정 정보를 획득하기 위해 사용
ICMP 메시지
ICMP 메시지의 일반 형식
ICMP always reports error messages to the original source. Note ICMP always reports error messages to the original source.
오류-보고 메시지 (Error-reporting messages) ICMP의 주 임무 중 하나
다음은 ICMP 오류 메시지의 중요한 사항이다: 오류-보고 메시지 다음은 ICMP 오류 메시지의 중요한 사항이다: ❏ ICMP 오류 메시지를 전달하는 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다. ❏ 첫 번째 단편이 아닌 단편화된 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다. ❏ 멀티캐스트 주소를 가진 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않는다. ❏ 127.0.0.0 이나 0.0.0.0과 같은 특별한 주소를 가진 데이터그램에 대해서는 오류 메시지가 생성되지 않는다. Note:
오류 메시지를 위한 데이터 필드의 내용 데이터부분 처음 8 바이트 : TCP와 UDP 포트 번호와 순서 번호
목적지 도달 불가(Destination-unreachable) 형식 라우터가 데이터그램을 라우팅할 수 없거나 호스트나 데이터그램을 배달할 수 없을 때 데이터그램은 폐기되고 발신지 호스트에 목적지 도달 불가 메시지 전달
오류 보고 메시지 코드 필드 : 데이터그램 폐기 이유 0 : 하드웨어 고장 네트워크에 도달 불가 1 : 하드웨어 고장 호스트에 도달 불가 2 : 프로토콜에 도달 불가 3 : 포트 도달 불가 . 15 : 우선 순위가 낮아서 호스트 도달 불가 책 257,258 쪽 참조
Note 코드 2 나 3 을 가진 목적지-도달불가 메시지는 목적지 호스트에 의해서 생성할 수 있다. 그 밖의 목적지-도달 불가 메시지들은 라우터에 의해서 생성된다.
라우터는 패킷 배달을 방해하는 모든 문제를 발견할 수 없다. Note 라우터는 패킷 배달을 방해하는 모든 문제를 발견할 수 없다.
IP 프로토콜은 흐름-제어 혼잡-제어 메커니즘이 없다. Note IP 프로토콜은 흐름-제어 혼잡-제어 메커니즘이 없다.
발신지-억제( Source-quench) 형식 혼잡으로 인하여 데이터그램 폐기를 발신지에 알림
발신지-억제 메시지는 라우터나 목적지 호스트에서 혼잡으로 인해 데이터그램이 폐기되었음을 발신지에 알린다. Note 발신지-억제 메시지는 라우터나 목적지 호스트에서 혼잡으로 인해 데이터그램이 폐기되었음을 발신지에 알린다. 발신지는 혼잡이 완화될 때까지 데이터그램을 송신하는 속도를 낮추어야 한다.
혼잡으로 인해 데이터그램이 폐기될 때마다 발신지 억제 메시지를 보내야 한다. Note 혼잡으로 인해 데이터그램이 폐기될 때마다 발신지 억제 메시지를 보내야 한다.
시간 초과 (Time-exceeded) 메시지 형식 라우팅 테이블에 오류가 있을 시에 패킷은 루프 또는 사이클에 빠질 수 있다
라우터가 TTL 필드를 감소해서 그 값이 0 이 되면 데이터그램을 폐기하고 시간 경과 메시지를 원래의 발신지에게 보낸다. Note 라우터가 TTL 필드를 감소해서 그 값이 0 이 되면 데이터그램을 폐기하고 시간 경과 메시지를 원래의 발신지에게 보낸다.
Note 최종 목적지가 정해진 시간내에 모든 단편을 받지 못했으면 이미 수신된 단편은 폐기하고, 원래의 발신지로 시간 경과 메시지를 보낸다.
Note 시간 경과 메시지에서 코드 0은 수명 필드의 값이 0이 되었음을 알리기 위해 라우터에 의해 사용된다. 코드 1은 모든 단편이 지정된 시간 내에 도착하지 않았음을 알리기 위해 목적지 호스트에 의해 사용된다.
매개변수-문제(Parameter-problem) 메시지 형식 데이터그램 헤더에 불명확한 점이 있으면 문제가 발생할 수 있다
매개변수 문제 메시지는 라우터나 목적지 호스트에 의해 생성될 수 있다. Note 매개변수 문제 메시지는 라우터나 목적지 호스트에 의해 생성될 수 있다.
재지정 개념(Redirection concept)
호스트는 일반적으로 작은 라우팅 테이블로 시작하지만 점진적으로 증가되거나 갱신된다. Note 호스트는 일반적으로 작은 라우팅 테이블로 시작하지만 점진적으로 증가되거나 갱신된다. 이러한 일을 수행하는 도구 중의 하나가 재지정 메시지이다.
재지정 (Redirection) 메시지 형식
재지정 메시지는 라우터로 부터 같은 네트워크에 있는 호스트로 전달된다. Note 재지정 메시지는 라우터로 부터 같은 네트워크에 있는 호스트로 전달된다.
질의 메시지 네트워크 문제를 진단하기 위해 질의 메시지 사용 에코 요청과 응답 타임스템프 요청과 응답 라우터나 호스트가 통신할 수 있는지 점검 타임스템프 요청과 응답 호스트나 라우터를 지나가는데 필요한 왕복시간 또는 시계 동기화에 사용
에코 요청 메시지는 호스트나 라우터에 의해 보내질 수 있다. Note 에코 요청 메시지는 호스트나 라우터에 의해 보내질 수 있다. 에코 요청 메시지를 받은 호스트나 라우터는 에코 응답 메시지를 보낸다.
에코 요청과 에코 응답 메시지는 네트워크 관리자가 IP 프로토콜의 동작을 검사하기 위하여 사용할 수 있다. Note 에코 요청과 에코 응답 메시지는 네트워크 관리자가 IP 프로토콜의 동작을 검사하기 위하여 사용할 수 있다.
에코 요청과 에코 응답 메시지는 호스트의 도달 가능성(reachability)을 검사할 수 있다. Note 에코 요청과 에코 응답 메시지는 호스트의 도달 가능성(reachability)을 검사할 수 있다. 이것은 ping 명령을 수행함으로써 이루어진다.
에코-요청(Echo-request)과 에코-응답(echo-reply) 메시지
타임스탬프-요청(Timestamp-request)과 타임스탬프-응답(timestamp-reply) 메시지 형식
왕복 시간 계산 원래 타임스탬프(original timestamp) 수신 타임스탬프(receive timestamp) 전달 타임스탬프(transit timestamp) 송신시간 = 수신 타임스탬프 – 원래 타임스탬프 수신 시간 = 패킷이 돌아온 시간 - 전달 타임스탬프 왕복시간 = 송신시간 + 수신 시간
왕복 시간 계산 예(example) 원래 타임스탬프(original timestamp) 값: 46 수신 타임스탬프(receive timestamp) 값: 60 전달 타임스탬프(transit timestamp) 값: 59 패킷 도착 시간: 67 송신시간 = 59 - 46 = 13 ms 수신 시간 = 67 – 60 = 7 ms 왕복시간 = 13 + 7 = 20 ms
Note 시간 동기화가 되어 있지 않더라도 타임스탬프 요청과 타임스탬프 응답 메시지는 발신지와 목적지 사이의 왕복시간을 측정하기 위해 사용될 수 있다.
시간 차 계산 예(example) 실제 편도시간이 주어지면 타임스탬프 요청과 타임스탬프 응답 메시지를 사용하여 두 시계를 동기화 가능 시간 차 = 수신 타임스탬프 - (원래 타임스탬프 + 편도 시간 구간) 편도 시간 구간은 왕복 시간을 2로 나누어 계산한다 시간 차 = 59 – (46 + 10) = 3 ms
정확한 편도 시간을 알 수 있다면 타임스탬프 요청과 타임스탬프 응답 메시지를 사용하여 두 장치의 시계를 동기화 시킬 수 있다. Note 정확한 편도 시간을 알 수 있다면 타임스탬프 요청과 타임스탬프 응답 메시지를 사용하여 두 장치의 시계를 동기화 시킬 수 있다.
감사 합(checksun)) 헤더와 데이터를 포함하는 전체 메시지에 대해 계산 검사합 계산 검사합 검사 송신자는 1의 보수 연산을 사용하여 다음의 단계를 수행한다. 검사합 필드를 0으로 만든다. 헤더와 데이터에 대해 16비트 단어의 합을 구한다. 합의 보수를 취하여 검사합을 구한다. 검사합을 검사합 필드에 저장한다. 검사합 검사 수신자는 1의 보수 연산을 사용하여 다음의 단계를 수행한다. 합의 보수를 구한다. 전 단계의 결과가 16개의 0이면 메시지는 받아들여지고 그렇지 않으면 거절한다.
Example 9.1 그림 9.14는 간단한 에코 요청 메시지에 대해 검사합을 계산하는 예를 보여주고 있다(그림 9.12 참조). 임의로 식별자는 1이고 순서 번호는 9라고 정한다. 메시지는 16비트(2바이트)의 단어들로 분할된다. 이 16비트 단어를 전부 더하고 그 합의 보수를 구한다. 송신자는 이 값을 검사합 필드에 넣을 수 있다.
검사합 계산 예
9-3 디버깅 도구(DEBUGGING TOOL) 인터넷에서 디버깅 용도로 사용될 수 있는 도구에는 몇 가지가 있다. 디버깅 도구를 사용하여 호스트나 라우터가 정상적으로 작동하고 있는지를 점검할 수 있고 패킷이 전달되는 경로를 추적할 수도 있다. 본 절에서는 ping과 traceroute라는 두 가지의 디버깅 도구를 소개한다. 이 후의 장에서도 해당하는 프로토콜을 소개한 후에 다른 디버깅 도구들을 추가로 소개할 것이다.
Example 9.2 Ping 프로그램을 사용하여 fhda.edu 서버를 테스트한 결과는 다음과 같다.
Example 9.3 Ping 프로그램의 두 번째 예에서는 adelphia.net라는 메일 서버가 정상적으로 작동하고 있는지 확인하고자 하며 결과는 다음과 같다. 이 경우 14개의 패킷을 보냈지만 13개의 응답만이 돌아왔다. 순서번호가 13인 마지막 패킷이 돌아오기 전에 ping 프로그램을 인터럽트 하였을 수도 있다. TCP/IP Protocol Suite
traceroute 프로그램 동작 traceroute: 패킷이 발신지에서 목적지까지 전달되는 경로 추척
Example 9.4 Traceroute 프로그램을 사용하여 voyager.deanza.edu 컴퓨터와 fhda.edu 서버 사이의 경로를 찾은 결과는 다음과 같다.
Example 9.5 본 예제에서는 xerox.com까지의 더 긴 경로를 추적한다.
Example 9.6 흥미로운 점은 호스트가 자신에게 traceroute를 보낼 수 있다는 것이다. 자신을 목적지로 지정함으로써 가능하다. 패킷은 예상할 수 있는 바와 같이 루프백 주소로 간다.
Example 9.7 마지막으로 traceroute 프로그램을 사용하여 fhda.edu와 mhhe.com(McGraw-Hill 서버) 사이의 경로를 찾는다. 이 경우 전체 경로를 찾을 수 없다. Traceroute가 5초 내에 응답을 받지 못하면 문제가 있음을 알리기 위하여 *를 프린트하고 다음 홉을 시도한다.
9-4 ICMP 패키지 ICMP가 ICMP 메시지의 송신과 수신을 어떻게 처리하는지 설명하기 위하여 입력 모듈과 출력 모듈로 구성된 ICMP 패키지를 보여준다.
ICMP 패키지