지니의 따듯한 공간
ICMP 본문
ICMP [ internet control message protocol ]
ping : echo reply (반향)
- 인터넷 제어 메시지 프로토콜
- IP의 단점을 보완하기 위해 설계
: 오류 보고와 오류 수정 기능이 없음
: 호스트와 관리 조회를 위한 매커니즘이 없음
- 네트워크 계층 프로토콜
- 하위계층으로 가기 전에 IP데이터 그램에 캡슐화
-프로토콜의 문제점(ICMP 사용 목적)
- 경로설정 루프의 오류 때문에 데이터그램의 활동시간 ( TTL )이 만료되었을 때
- 데이터그램 단편이 없어져서 데이터그램이 완전히 전달되지 않을 때
- 프로토콜, 서비스 또는 호스트를 사용할 수 없을 때
- 단편화가 허용되지 않고 데이터그램 크기가 중간 네트워크에 비해 너무 커서 데이터그램을 발송할 수 없을 때
- 라우터에서 네트워크 통신량의 집중으로 라우터가 수신 데이터그램을 처리할 수 없을 때
flow control
인접한 호스트 - LLC
종단 - tcp / icmp?
- 라우터를 거쳐 운반되므로 IP 데이터그램에 캡슐화
- IP 헤더의 Protocol 필드의 값 -> 0x01 (ICMP)
1. 오류 보고 (ERROR-Reporting) 메시지
2. 조회 (Quert) 메시지
3번 Destination unreachable : 목적지 도달 불가능 //라우터 혹은 호스트에서 발생
4번 Source quench : 발신지 억제
11번 Time exceeded : 시간 초과 (TTL, 단편화된 패킷이 도착했는데 나머지를 기다린다. 정해진 시간이 지나면 다시보내)
12번 Parameter problem : Header 오류, 헤더쳌썸 등을 해서..
-> // point 1 byte 맨 앞에 1byte를 point로 사용, 어디서 오류났는지 확인
5번 Redirection : '이 경로가 더 나을것 같다.' 라고 라우터에게 알려준다.
-> // 정적 라우팅에서 경로가 정확하지 않을 수 있기때문에 경로를 개선 하기 위한 메시지
조회 메시지
Echo reply : Ping !
Echo request : Ping 응답 !
Timestamp request :
Timestamp reply :
Address mask request : 서브넷 마스크?!
Address mask reply : !
Router advertisement : 라우터 -> 라우터야 살아있나?
Router solicitation : 응 살아있다~
ICMP 메시지는 8Byte의 헤더와 가변 길이의 데이터 부분을 가지고 있다.
헤더의 일반 형식은 각 메시지 별로 다르지만 처음 4Byte는 전부 공통
Code 필드는 특정 메시지 유형의 이유 지정
공통 힐드는 검사합 필드
헤더의 나머지 부분은 각 메시지 별로 다르다.
데이터 부분
- 오류 메시지 : 오류를 발생시킨 원래 패킷을 찾기 위한 정보 전달
- 조회 메시지 : 조회의 유형에 기초한 추가 정보 전달
Type (1byte)
- ICMP 서비스의 유형
Code (1byte)
- 특성 메시지의 유형을 세분화 (소분류)
Checksum (2byte)
- 메시지 오류 검사
Data(잘못된 IP헤더 + 데이터 8 bytes)
- 문제를 일으킨 데이터그램의 IP헤더와 데이터 64bit를 포함
오류 보고
ICMP의 주 임무는 오류를 보고하는 것
IP는 신뢰성이 없는 프로토콜
ICMP는 IP의 단점을 보완하기 위하여 설계
ICMP는 오류를 수정이 아니라 보고만 한다.
오류 수정은 상위 계층 프로토콜에 맡김
오류 메시지는 언제나 최초의 발신지로 전송
-데이터그램으로부터 알 수 있는 경로에 대한 정보는 발신지와 목적지뿐이기 때문
ICMP는 발신지 ip 주소를 사용하여 오류 메시지를 데이터 그램의 발신지로 전송
다섯가지의 오류 유형이 처리
- 목적지 도달 불가능 [ Destination unreachable ]
- 발신지 억제 [ Source quench ]
- 시간 경과 [ Time exceeded ]
- 매개변수 문제 [ Parameter problem ]
- 재지정 [ Redirection ]
ICMP 오류 메시지에 대한 중요한 사항
- 모든 IP구현은 ICMP를 구현해야 한다.
- ICMP 오류 메시지를 전달하는 데이터그램에 대해 ICMP 오류 메시지가 생성되지 않음
- 처음 단편이 아닌 단편화된 데이터그램에 대해서는 ICMP 오류 메시지가 생성되지 않음
- 멀티캐스트 주소를 가진 데이터그램에 대해서는 ICMP 오류 메세지가 생성되지 않음
-> 유니캐스트에 대해서만 대응 및 발생한다.
- 127.0.0.0 이나 0.0.0.0 과 같은 특별한 주소를 가진 데이터그램에 대해서는 오류 메시지가 생성되지 않음
-> 정상적인 IP 주소에 대해서만 발생한다.
-모든 오류메세지의 데이터 부분에는 데이터그램의 IP 헤더와 데이터그램의 데이터 중 처음 8Byte가 포함 되어 있다.
- 원래의 데이터그램
송신지 ip 주소 + icmp헤더 + icmp 페이로드 ( 문제가 된 ip의 헤더 + 8byte)
1. 목적지 도달 불가 [ Destination Unreachable ] 메시지
코드 0 : 하드웨어 고장 등의 이유로 네트워크에 도달 불가
- 라우터에 의해서만 생성될 수 있다.
코드 1 : 호스트에 도달 불가
- 하드웨어 고장 때문일 수 있음
- 메시지는 라우터에 의해서만 생성될 수 있음
코드 2 : 프로토콜에 도달 불가
- IP 데이터그램은 UDP, TCP나 OSPF 등과 같은 상위 계층에 속하는 데이터를 전달할 수 있음
- 목적지 호스트가 TCP와 같은 프로토콜에 배달되어야 할 데이터그램을 수신했으나 지금 시점에서
코드 3 : 포트에 도달 불가
- 데이터그램이 향하고 있는 응용 프로그램(프로세스)이 지금 이 시점에 수행되고 있지 않음
코드 4 : 단편화가 필요하나 데이터그램의 DF (do not fragment) 필드가 설정되어 있음
- 데이터그램의 송신자가 데이터그램은 단편화가 되면 안된다고 명시하였으나 단편화를 하지 않고는 라우팅 불가
코드 5 : 발신지 라우팅이 수행될 수 없음
- 발신지 라우팅 옵션에 정의된 한 개 이상의 라우터 방문 불가
코드 6 : 목적지 네트워크가 알려져 있지 않음
- 코드 0에서 라우터가 목적지 네트워크의 존재를 알지만 현재 시점에 도달할 수 없음
- 라우터가 목적지 네트워크에 대해 정보를 가지고 있지 않음
코드 7 : 목적지 호스트가 알려져 있지 않음
- 코드 1에서는 라우터가 목적지 호스트의 존재를 알지만 현재 시점에 도달할 수 없음
- 라우터가 목적지 호스트의 존재에 대해 알고 있지 않음
코드 8 : 발신지 호스트가 고립되어 있음
코드 9 : 목적지 네트워크와 통신이 관리상의 이유로 금지되어 있음
~ 코드 15 까지 있음..
2. 발신지 억제 (Source Quench) '유형 4'
- IP 프로토콜은 비연결형 프로토콜
- 데이터그램을 생성하는 발신지와 이를 전달하는 라우터 그리고 이것을 처리하는 목적지 사이에는 통신이 없음
- 통신 부재로 인한 결과 중의 하나가 흐름 제어 부재
- IP는 프로토콜에 내장된 흐름 제어 메커니즘을 가지고 있지 않음
- 프름제어의 부재로 인하여 IP의 수행 중 혼잡(congestion) 이라는 심각한 문제를 유발 가능
발신지 호스트는 라우터나 목적지 호스트가 과대한 양의 데이터그램으로 압도되고 있다는 것을 알 수 없음
발신지 호스트는 라우터가 전달할 수 있는 수준 이상으로 또는 목적지 호스트가 처리할 수 있는 수준 이상으로 자신이 너무 빨리 데이터그램을 보내고 있다는 것을 알 수 없음.
icmp의 발신지 억제 (source quench)
발신지 억제 추가 설명
- 혼잡은 일-대-일 또는 다-대-일 통신에서 발생 가능
: 일 - 대 - 일 통신
- 하나의 고속 호스트가 라우터나 목적지 호스트보다 빨리 데이터그램을 생성 가능
- 발신지 억제 메시지는 매우 도움이 될 수 있음
- 이 메시지들은 발신지에게 속도를 낮출 것을 요청
: 다 - 대 - 일 통신
3. 시간경과 ( Tume Exceeded )
- 패킷을 수신할 다음 홉(라우터)을 찾기 위해 라우터는 라우팅 테이블을 사용
- 한 개 또는 그 이상의 라우팅 테이블에 오류가 있다면 패킷은 루프 또는 사이클을 지날 수 있음
- TTL 값이 0인 데이터그램을 받으면 라우터는 데이터그램을 폐기 -> 시간 경과 메시지를 원 발신지에 송신해야함
- 한 개의 메시지에 속하는 단편(Fragmentation)들이 정해진 시간 내에 목적지 호스트에 전부 도착하지 않은 경우
( 첫 번째 단편 도착 -> 목적지 호스트는 타이머 시작 / 타이머가 만료 되었는데도, 모든 단편이 도착하지 않으면 원 발신지에 메시지 전송)
- 코드 0 : 수명 필드의 값이 0이 되어 데이터그램을 폐기하는 경우 사용
- 코드 1 : 단편의 일부가 정해진 시간 내에 도착하지 않아서 이미 도착한 단편을 폐기하는 경우 사용
4. 매개변수 문제 (Parameter problem)
- 데이터그램의 헤더 부분에 불명확한 점이 있으면 데이터그램이 인터넷을 통하여 전달되는 동안 문제를 발생시킬 수 있음
- 만약 라우터나 목적지 호스트가 데이터그램의 필드에서 불명확하거나 빠진 값을 발견하게 되면 데이터그램을
폐기하고 매개변수 문제(Parameter Problem) 메시지를 발신지에 전송
- 코드 필드는 왜 데이터그램을 폐기하였고 정확히 무엇이 실패하였는지를 나타냄
- 코드 0 : 헤더 필드 중에서 불명료하거나 빠진 것이 있음
- 포인터 필드의 값은 문제가 있는 바이트를 가리킴
- 값이 0 이라면 첫번째 바이트가 틀렸다는 것
- 코드 1 : 옵션의 요구되는 부분이 빠졌다는 것
- 포인터는 사용되지 않음
5. 재지정 (Redirection)
- 호스트에 라우팅 프로토콜 갱신 프로세스 요구
재지정, 매개변수 문제는 맨 처음