Download presentation
Presentation is loading. Please wait.
1
제 6 장 인터넷 제어 메시지 프로토콜
2
목차 6.1 ICMP 개요 6.2 ICMP 메시지 형식 6.3 ICMP 주소 마스크 요구와 응답
BSD에서 ICMP 메시지 처리 6.7 요약
3
6.1 ICMP 개요 ICMP목적 : 신뢰성 없는 전송인 IP를 어느 정도 보안하기 위해 IP 데이터 그램 ICMP 메시지
gateway와 host간의 에러 메시지와 주의를 요하는 상태 정보를 취급하기 위한 프로토콜 - IP계층 또는 보다 상위 계층 프로토콜(TCP,UDP)에 의해 이용됨 - 어떤 ICMP 메시지는 사용자 프로세스에게 되돌려 주는 에러 메시지 생성 - ICMP 메시지는 IP 데이터그램으로 전송 - ICMP 공식 규격:RFC 792(Postel 1981b) < IP 데이터그램에 캡슐화된 ICMP 메시지> ICMP 메시지 IP 헤더 IP 데이터 그램
4
6.1 ICMP 개요(ICMP 메시지 형식) 처음 4 바이트는 모든 메시지에 대해 같은 형식. 나머지 부분은 메시지에 따라 다름 - 유형(type) 필드: 15개의 서로 다른 값 - 코드(code)필드: 특정 상태를 나타내기 위한서로 다른 값 - 검사값(checksum)필드: ICMP 전체 메시지를 대상으로 IP 헤더 검사 방식과 같은 알고리즘 <ICMP 메시지> 8비트 유형 8비트 코드 16비트 검사값 유형과 코드에 따른 내용
5
6.2 ICMP 메시지 형식 조회(query),에러(error) 메시지를 구분하는 이유:
ICMP 에러 메시지는 절대로 ICMP 에러 메시지에 대 한 반응으로 생성되지 않음 ICMP 에러메시지 송신측:IP 헤더와 ICMP 에러 발생의 원인이 된 IP 데이터그램의 처음 8 바이트가 포함 ICMP 에러 메시지 수신측:특정 프로토콜 또는 특정 사용자 프로세스와 메시지를 연관
6
6.2 ICMP 메시지 형식 ICMP 메시지가 생성되지 않는 경우 (broadcast storms을 방지)
2. IP 브로드캐스트 주소나 IP 멀티캐스트 주소로 가는 데이터그램 3. 링크계층의 브로드캐스트로서 송신되는 데이터그램 4. 단편화 된 것 중 처음 부분이 아닌 데이터그램 5. 송신지 주소가 단일 호스트로 지정되어 있지 않은 데이터그램 (zero 주소,루프 백 주소,브로드 캐스트 주소,멀티 캐스트 주소)
7
6.3 ICMP 주소 마스크 요구와 응답 ICMP 주소 마스크 요구: 디스크 없는 시스템이 부팅시
자신의 서브넷 마스크를 얻기 위해서 사용 ICMP 요구 메시지를 브로드캐스트(RARP를 이용하여 자신의 IP주소를 얻는 방법과 유사) BOOTP 프로토콜 송신자가 식별자(identifier)와 순서번호(sequence number)를 선택 ->응답 메시지에 값이 돌아옴,송신자는 요구에 맞는 응답인지 확인 <ICMP 주소 마스크 요구와 응답 메시지> 7 8 15 16 31 유형(17또는18) 코드(0) 검사합 식별자 순서번호 12바이트 32 비트 서브넷 마스크
8
6.3 ICMP 주소 마스크 요구와 응답 ICMP 주소 마스크 요구를 발행해서 모든 응답을 출 력하는 프로그램 sun % icmpaddrmask Received mask=ffffffe0, from 자기 자신 으로부터 Received mask=ffffffe0, from bsdi로부터 Received mask=ffff0000, from svr4로부터 svr4로부터 반환된 값이 틀린 이유: svr4는 B클래스 주소 마스크를 되돌려 주므로 서브넷 마스크가 없다고 간주
9
6. 3 ICMP 주소 마스크 요구와 응답 <브로드캐스트 주소로 보내진 ICMP 주소 마스크 요구> 1 0
6.3 ICMP 주소 마스크 요구와 응답 <브로드캐스트 주소로 보내진 ICMP 주소 마스크 요구> :0:20:3:f6:42 ff:ff:ff:ff:ff:ff ip 60: (0.00) 0:0:c0:6f:2d:40 ff:ff:ff:ff:ff:ff ip bsdi>sun:icmp:address mask is 0xffffffe (0.01) 0:0:c0:c2:9b:26 8:0:20:3:f6:42 ip 60: svr4> sun: icmp:address mask is 0xffff 송신 호스트(호스트 sun)가 회선상 아무것도 없더라도 ICMP 응답 메시지를 수신: 송신 호스트가 내부 루프백 메커니즘을 통하여 브로드캐스트 패킷 복사본을 수신하는 브로드캐스트의 특성 때문 svr4: 요구한 요청자에게만 응답을 보냄 bsdi: 응답을 브로드캐스트 RFC:시스템이 인정하는 주소 마스크에 대한 대행자가 아니면 주소 마스크 응답을 보내지 말아야 함
10
6.3 ICMP 주소 마스크 요구와 응답 <예> sun % icmpaddrmask sun
received mask=ff000000, from sun % icmpaddrmask localhost received mask=ff000000,from <설명> 호스트 IP주소( )로 보내진 IP 데이터그램 -> 루프 백 인터페이스로 전달 되돌아온 주소 마스크 -> 루프 백 주소인 클래스 A 주소 ( )에 대응 <결과> ICMP 주소 마스크 요구 ->IP 주소와 루프 백 주소(루프백 인터페 이스로부터 수신)
11
6.4 ICMP 타임스탬프 요구와 응답 ICMP 타임스탬프: 어떤 시스템이 다른 시스템에게 현 재 시간을 알리고 싶을 때
UTC(Coordinated Universal Time): 오전 0시부터 경과된 시간(ms) <ICMP 타임스탬프 요구와 응답> 7 8 15 16 31 유형(17또는 18) 코드(0) 검사합 식별자 순서 번호 12 바이트 32-비트 originate 타임스탬프 32-비트 receive 타임스탬프 32-비트 transmit 타임스탬프
12
6.4 ICMP 타임스탬프 요구와 응답 Originate timestamp: 요청자가 메시지를 보내는 시간
Receive timestamp: 응답측 시스템의 요구를 수신한 시간 Transmit timestamp: 응답측 시스템의 응답 시간 Receive(recv)값= Transmit(xmit)값 왕복 시간(rtt)= 응답 수신 시간 - 응답 송신 시간 시간차(difference)=Received timestamp 값 - Originated timestam값 <ICMPtime 프로그램에 의해 출력된 값들의 관계> originate 요구 received transmit 응답 RTT
13
6.4 ICMP 타임스탬프 요구와 응답 sun % icmptime bsdi
<예> sun % icmptime bsdi orig= , recv= , xmit= , rtt=2ms difference= -6ms orig= , recv= , xmit= , rtt=2ms difference= -7ms <설명> RTT가 정확하고 RTT의 반 이 요구 , 나머지 반이 응답에 의한 시간이라면 송신자의 시계를 조회한 호스트와 같은 시간을 갖기 위한 조정: 시간차(difference) - RTT의 반값 -> bsdi의 시계는 sun의 시계보다 7에서 8ms 만큼 늦다
14
6.4 ICMP 타임스탬프 요구와 응답(1) 시간과 날짜로 얻는 다른 방법
시간과 날짜로 얻는 다른 방법 1. Daytime 서비스: 현재의 시간과 날짜를 사람이 읽을 수 있는 ASCII 문자 형식(telnet 명령) time 서비스: 1900년도 1월 1일 오전 0시부터 경과한 초값을 32비트 2진값으로 날짜와 초단위 시간값 sun % telnet bsdi daytime Trying Connected to bsdi. Escape character is ‘^ ]’ 처음 세줄은 telnet client의 출력이다 Web Feb 3 16:38: 33: 이것은 daytime 서비스 출력이다 Connection closed by foreign host. 이것도 telnet 클라이언트 출력이다
15
6.4 ICMP 타임스탬프 요구와 응답(2) ms 단위의 정확성을 가진 WAN, LAN상의 모든 시스템 시간 유지
2. NTP(Network Time Protocol) 사용(RFC 1305[Mills 1992]): ms 단위의 정확성을 가진 WAN, LAN상의 모든 시스템 시간 유지 3. OSF(Open Software Foundation)의 분산 컴퓨팅 환경 (DCE:Distributed Computing Environment): 컴퓨터간의 시간에 대한 동기를 맞추기 위해서 분산 타임 서비스 (DTS:Distributed Time Service) 4. 버클리 Unix 시스템: LAN 상 시스템의 시간에 대한 동기를 맞추기 위해 timed(8) 데몬 제공
16
6.5 ICMP 포트 도달불가 에러 ICMP 포트 도달불가 발생:
- 수신된 UDP datagram의 목적지 포트를 어떤 프로세스가 사용 하고 있어서 응답 할 수 없는 경우 - TFTP(Trivial File Transfer Protocol)클라이언트 사용 <TFTP 클라이언트 프로그램> bsdi % tftp tftp> connect svr 호스트 이름과 포트 번호를 지정 tftp> get temp.foo 파일을 가져온다 Transfer timed out 약 25초 후 tftp > quit
17
6.5 ICMP 포트 도달 불가 에러 <TFTP 요구에 의해 생성된 ICMP 포트 도달 불가>
arp who-has svr4 tell bsdi (0.0020) arp reply svr4 is-at 0:0:c0:c2:9b:26 (0.0007) bsdi.2924>svr4.8888:udp 20 (0.0037) svr4>bsdi: icmp:svr4 udp port 8888 unreachable (4.9944) bsdi.2924>svr4.8888:udp 20 (0.0037) svr4>bsdi:icmp:svr4 udp port unreachable (4.9966) bsdi.2924>svr4.8888:udp 20 (0.0035) svr4>bsdi:icmp:svr4 udp port unreachable (4.9966) bsdi.2924>svr4.8888:udp 20 (0.0036) svr4>bsdi:icmp:svr4 udp port unreachable (4.9966) bsdi.2924>svr4.8888:udp 20 (0.0036) svr4>bsdi:icmp:svr4 udp port unreachable
18
6.5 ICMP 포트 도달불가 에러 <설명> 1번 줄: UDP 데이터그램이 svr4에 보내기 전 하드웨어 주소를
지정하 기 위한 ARP 요구를 보냄 2번 줄: ARP 응답이 돌아옴 3번 줄: UDP 데이터그램을 전송 4번 줄: ICMP 포트 도달불가 즉시 되돌아옴 5번 줄: TFTP 클라이언트는 ICMP 메시지를 무시하고 약 5초 후에 다른 UDP 데이터그램을 보냄 마지막 행 : “ UDP 20”(데이터 길이) = 2바이트(TFTP의 opcode) + 9 바이트(null로 종료된 temp.foo)+ 9바이트(null로 종료된 문자열 netascii) tcpdump의 e옵션에서 사용한 ICMP 포트 도달불가 메시지 길이 = 70바이트
19
6.5 ICMP 포트 도달불가 에러 ICMP의 데이터 부분 헤더 에러가 발생한 데이터그램의 IP 헤더 이더넷 헤더
UDP 데이터그램은 포트 번호의 목적지 없이 호스트간에 교환되고, 각 20바이트의 UDP 데이터그램은 특정 포트(2924)로부터 특정 포트(8888)로 전송 ICMP 에러 메시지는 에러를 발생시킨 데이터그램의 IP 헤더 다음에 적어도 처음 8바이트가 포함되어야 함 <“UDP port unreachable” 예에서 되돌아온 ICMP 메시지> IP 데이터그램 ICMP 메시지 ICMP의 데이터 부분 헤더 에러가 발생한 데이터그램의 IP 헤더 이더넷 헤더 ICMP 헤더 IP 헤더 UDP 헤더 14 바이트 20 바이트 8바이트 20 바이트 8 바이트
20
6.5 ICMP 포트 도달불가 에러 UDP 헤더 : 송신지와 목적지 포트 번호
사용자 프로세스와 관련시키기 위해 사용 에러를 발생시킨 데이터그램의 IP 헤더 반환 이유: ICMP의 계속되는 8바이트 내용(UDP 헤드)을 교환하는 방법을 알기 위해 프로토콜 필드가 IP헤드에 포함되기 때문 ICMP 도달불가 메시지: - 코드: 3 - 두번째 32비트 워드: 0
21
IP 헤드(옵션 포함) + 원래의 IP 데이터그램 데이터의 처음 8바이트
6.5 ICMP 포트 도달불가 에러 <ICMP 도달불가 메시지> 유형(3) 코드(0-15) 검사합 8바이트 사용하지 않음(0 이여야 함) IP 헤드(옵션 포함) + 원래의 IP 데이터그램 데이터의 처음 8바이트
22
6.5 ICMP 포트 도달불가 에러 (Tcpdump 타임 라인)
<유효하지 않는 포트에 대한 TFTP 요구의 타임 라인> Svr4에게 Bsdi에 대한 응답을 부르고 있는 arp Svr4rk 0;0;c0;c2;9b:26 에 있다는 것을 나타내는 arp 응답 S Udp 20bytes ICMP:Svr4 udp port unreachable Udp 20bytes ICMP:Svr4 udp port unreachable Bsdi.2924 Svr4.8888
23
6.5 ICMP 포트 도달불가 에러 TFTP 클라이언트가 되돌아온 요구 메시지를 재전송 하는 이유:
하는 이유: BSD 시스템의 네트워크 프로그램에서 사용자 프로세스가 connect를 해당 소켓에서 발행하지 않으면 이 소켓 때문에 ICMP 메시지의 UDP를 사용하는 사용자 프로세스에 알릴 수 없는 사태가 발생 표준 BSD의 TFTP 클라이언트는 connect를 발행하지 않으므로 ICMP 에러가 프로세스에서 인식되지 않기 때문
24
6.6 4.4BSD에서 ICMP 메시지 처리 각 ICMP 메시지가 같은 구현내 처리 방법이 다른 이유:
치명적인 에러에서 정보 메시지까지 전반적인 상황을 포함하고 있기 때문 <4.4BSD에 의한 ICMP 메시지 처리 유형 참조> ICMP 메시지 처리 방법 커널 ->커널 사용자 프로세스 -> 커널에 등록된 모든 사용자 프로세스에 전달 사용자 프로세스가 없는 경우 -> 버려지거나 무시 인용부호로 된 문자열: UNIX 에러 메시지
25
6.7 요약 ICMP 메시지 형식 ICMP 주소 마스크 요구와 응답 ICMP 타임스탬프 요구와 응답
6.7 요약 ICMP 메시지 형식 ICMP 주소 마스크 요구와 응답 ICMP 타임스탬프 요구와 응답 ICMP 포트 도달불가 에러
Similar presentations