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