Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 6: 인터넷 제어 메시지 프로토콜(ICMP) 2003. 5..

Similar presentations


Presentation on theme: "Chapter 6: 인터넷 제어 메시지 프로토콜(ICMP) 2003. 5.."— Presentation transcript:

1 Chapter 6: 인터넷 제어 메시지 프로토콜(ICMP)

2 인터넷 제어 메시지 프로토콜 IP네트워크에서 네트워크 문제에 관한 정보를 전달하기 위해 사용하는 프로토콜 (지속적 문제의 회피 가능) 예) 라우터에서 발생한 에러를 송신측으로 전달 IP 데이터그램에 캡슐화 되어 전송 ICMP 메시지 IP 헤더 Ethernet 헤더 Ethernet 데이터 IP 데이터 트레일러 <ICMP 메시지 캡슐화>

3 나머지 헤더 (Rest of the header)
ICMP 메시지 포맷 타입(Type) – 메시지의 종류를 15개로 구분 (대 분류) 코드(Code) – 메시지의 종류를 보다 세분화 (소 분류) 체크 섬(Checksum) – 메시지의 오류 검사 나머지 헤더 – 타입과 코드 값에 따라 변경됨 16 31 정보(Data) 코드(Code) 체크 섬 (Checksum) 나머지 헤더 (Rest of the header) 타입(Type) 8 바이트

4 ICMP 메시지의 종류 ICMP 메시지의 분류 기준 타입(Type): 대 분류 코드(Code): 소 분류
설 명 질의 에러 echo reply(ping reply) : 에코응답 3 destination unreachable : 목적지 도달 불능 network unreachable 1 host unreachable 2 protocol unreachable port unreachable 이하 생략

5 ICMP 메시지의 종류 에러(error) 보고용 메시지 질의(query)용 메시지
IP 패킷 처리 도중 발생한 문제를 보고할 때 사용 Destination unreachable, source quench… 질의(query)용 메시지 다른 호스트로부터 특정 정보를 획득하기 위해 사용 네트워크 문제 진단 및 타임스탬프 요청과 같은 질의에 사용

6 에러 보고용 메시지 에러 보고용 메시지의 종류 라우터가 데이터그램을 라우팅 할 수 없을 때
Destination Unreachable 라우터가 데이터그램을 라우팅 할 수 없을 때 호스트가 데이터그램을 전달할 수 없을 때 Source Quench 혼잡으로 인해 데이터그램의 폐기를 알림 Error Reporting Redirection 라우터가 최적 경로를 사용하지 않는 호스트 발견 시 최적 경로를 알리기 위해 사용 Time Exceeded IP 헤더의 TTL 필드 값 만료를 나타냄 Parameter Problems 데이터그램의 헤더 에러 문제 발생시 사용

7 에러 보고용 메시지 특징: Traffic 최소화 노력
ICMP 에러 메시지를 전달하는 데이터그램에 대해서는 ICMP 에러 메시지를 생성하지 않음 목적지 IP주소에 브로드 캐스트나 멀티 캐스트 주소를 가진 데이터그램에 대해서는 에러 메시지가 생성되지 않음 출발지 IP주소에 ‘ ’ 이나 ‘ ’과 같은 불특정한 주소를 가진 데이터그램에 대해서는 에러 메시지가 생성되지 않음 단편화 된 데이터그램에서는 첫번째 단편에만 에러 메시지 생성

8 질의용 메시지 질의용 메시지의 종류 IP 호스트의 진단에 사용 두 시스템간에 IP 데이터그램이 오고 가는데
Echo request and reply IP 호스트의 진단에 사용 Timestamp request and reply 두 시스템간에 IP 데이터그램이 오고 가는데 필요한 왕복시간(Round Trip Time)을 결정 Query Address mask request and reply 호스트가 라우터에게 서브넷 마스크 요청 Router solicitation and advertisement 다른 네트워크의 호스트에게 데이터 전송 시 자신의 네트워크에 연결된 라우터 주소 요청

9 ping 프로그램 실행 ping? AMAN2002 WinPing 실행 특정 호스트(IP)가 정상 작동 중인지 확인
ICMP Echo request/reply 메시지를 이용 AMAN2002 WinPing 실행 Packet Observer로 캡처 ICMP 메시지 분석

10 ICMP 메시지 분석 Ping 수행 시 ICMP 메시지 캡처

11 순서 번호(Sequence number)
ICMP 메시지 분석 Type / Code Type - 8, Code - 0  Echo Request(Ping Request) 메시지(교재, 표 6.1 참고) ICMP Echo Request/Reply 메시지 포맷 16 31 순서 번호(Sequence number) 식별자(Identifier) 정보(Data) 코드 (0) 체크 섬(Checksum) 타입 (8 or 0) 8 바이트 타입 8 – Request 0 – Reply

12 ICMP 메시지 분석 체크 섬 식별자: 고유 세션 식별 번호 순서번호: 동일 식별자를 가진 메시지들 구분
0xD9F3(55795) 식별자: 고유 세션 식별 번호 0x2C07(11271) 순서번호: 동일 식별자를 가진 메시지들 구분 0x0100(256) ※ ping을 수행하는 근원지/목적지 주소, 프로토콜 정보는 IP 데이터그램헤더에 나타남

13 64bits or Original Datagram Header
연습 문제 ICMP Destination Unreachable Message 헤더 16진수 값으로 완성하라. 03 03 FB C A 7F 11 7D A7 D2 62 BD 17 D3 AA 00 3A 00 00 타입 코드 체크 섬 Unused Internet Header 64bits or Original Datagram Header

14 연습 문제 ICMP 헤더 인터넷헤더 데이터그램 헤더 타입/코드  체크 섬 
※ 패킷의 값은 10진수로 표현하시오. ICMP 헤더 타입/코드  체크 섬  인터넷헤더 송신지 IP 에서 수신지 로 전송 상위의 프로토콜로 전달됨 데이터그램 헤더 송신지 포트 번에서 수신지 포트 번으로 전달

15 Guru를 이용한 ICMP 분석 연습

16 ICMP 캡처 프로그램 작성 《IcmpViewer》
※ 프로젝트 생성 및 라이브러리 경로 설정은 『ch04. 이더넷(Ethernet)』의 “이더넷 캡처 프로그램 작성”과 동일

17 대화상자 디자인 1 List Control 2 3 4 5 6 7 Button Edit Box

18 Control 속성 # 종류 ID 속성 변수이름 1 List Control IDC_LIST View: Report
m_ListIcmpPacketInfo 2 Edit Box IDC_EDIT_DataSection Read-only m_EDIT_strDataSection 3 IDC_EDIT_Monitoring m_EDIT_iCountInput 4 IDC_EDIT_Monitored m_EDIT_iCountOutput 5 Button IDC_BUTTON_Start 6 IDCANCEL Default Button 7 IDC_BUTTON_Info

19 이벤트 처리 ※ 어댑터 오픈 대화상자 표시, 어댑터 열기, 패킷 캡처, 어댑터 닫기
# 종류 ID 메시지 함수 명 1 List Control IDC_LIST NM_CLICK OnClickList() 20 Button IDC_BUTTON_Start BN_CLICKED OnBUTTONStart() 21 IDCANCEL OnCancel() 22 IDC_BUTTON_Info OnBUTTONInfo() ※ 어댑터 오픈 대화상자 표시, 어댑터 열기, 패킷 캡처, 어댑터 닫기 함수의 설명은 『ch04. 이더넷(Ethernet)』 과 동일하므로 생략함

20 (IP 데이터그램의 전체크기 – IpHLen) 바이트
패킷 분석 ICMP 헤더의 시작지점 arrTemp[0] arrTemp[14] arrTemp[14 + IpHLen] 14바이트 (IP 데이터그램의 전체크기 – IpHLen) 바이트 arrTemp 이더넷 헤더 IP 헤더 ICMP 메시지(헤더+데이터) arrTemp[14+9] 프로토콜 필드 1 → ICMP arrTemp[14]의 하위 4비트 헤더길이 : IpHLen arrpTemp[16], arrTemp[17] IP 데이터그램의 전체크기 필드 ICMP 메시지크기 = IP데이터그램의 전체길이 – IpHLen

21 패킷 분석 . . . // 하나의 패킷을 획득하여 arrTemp에 입력. 에러 시 음수 리턴
List Control 에 패킷 헤더 정보 표시 . . . // 하나의 패킷을 획득하여 arrTemp에 입력. 에러 시 음수 리턴 int iLengthOfPacket = pDlg->Ncap(arrTemp, MaxBufferLen); if(iLengthOfPacket < 0) continue; #define EtherHeaderLength 14 // IP 헤더의 프로토콜 필드 값이 1인 경우 ICMP 메시지 // IP 헤더의 프로토콜 필드 값이 0x01인 것만 골라냄 if( arrTemp[EtherHeaderLength + 9] == 0x01) { // IP 헤더 길이 unsigned char MASK = 0x0F; arrTemp[EtherHeaderLength] = arrTemp[EtherHeaderLength] & MASK; int iIpHeaderLength = arrTemp[EtherHeaderLength]<<2;

22 패킷 분석 CString strIcmpType = _T("");
List Control 에 패킷 헤더 정보 표시 // ICMP 타입 CString strIcmpType = _T(""); int iIcmpType = arrTemp[EtherHeaderLength + iIpHeaderLength]; strIcmpType.Format(_T("TYPE : %d"), iIcmpType); m_ListIcmpPacketInfo.SetItem(i, 1, LVIF_TEXT, strIcmpType, 0, 0, 0, 0); // ICMP 코드 CString strIcmpCode = _T(""); int iIcmpCode = arrTemp[EtherHeaderLength + iIpHeaderLength+1]; strIcmpCode.Format(_T("CODE : %d"), iIcmpCode); m_ListIcmpPacketInfo.SetItem(i, 2, LVIF_TEXT, strIcmpCode, 0, 0, 0, 0); // ICMP 체크섬 CString strIcmpChkSum = _T(""); strIcmpChkSum.Format(_T("%02X %02X"), arrTemp[EtherHeaderLength + iIpHeaderLength + 2], arrTemp[EtherHeaderLength + iIpHeaderLength + 3]); m_ListIcmpPacketInfo.SetItem(i, 3, LVIF_TEXT, strIcmpChkSum, 0, 0, 0, 0);

23 패킷 분석 // ICMP의 나머지 헤더 부분 출력 CString strIcmpRestOfHeader;
List Control 에 패킷 헤더 정보 표시 // ICMP의 나머지 헤더 부분 출력 CString strIcmpRestOfHeader; strIcmpRestOfHeader.Format(_T("%02X %02X %02X %02X "), arrTemp[EtherHeaderLength + iIpHeaderLength + 4], arrTemp[EtherHeaderLength + iIpHeaderLength + 5], arrTemp[EtherHeaderLength + iIpHeaderLength + 6], arrTemp[EtherHeaderLength + iIpHeaderLength + 7]); m_ListIcmpPacketInfo.SetItem(i, 4, LVIF_TEXT, strIcmpRestOfHeader, 0, 0, 0, 0); // IP 데이터그램 크기 출력 CString strIpPLen = _T(""); int iIpTotalLength = pDlg->Twobytes_to_number (arrTemp[EtherHeaderLength + 2], arrTemp[EtherHeaderLength + 3]); // IP 데이터그램의 데이터 구간(ICMP 메시지) 길이 출력 strIpPLen.Format(_T("IP DLen : %d"), iIpTotalLength- iIpHeaderLength); m_ListIcmpPacketInfo.SetItem(i, 5, LVIF_TEXT, strIpPLen, 0, 0, 0, 0);

24 패킷 분석 // ICMP 메시지의 데이터 구간 정보 출력 ICMP 헤더 ICMP 데이터
List Control 에 패킷 헤더 정보 표시 // ICMP 메시지의 데이터 구간 정보 출력 CString strIcmpDataSection = _T(""); CString strIcmpTmp = _T(""); int iIntVal = 0; m_strDataBuffer[i] = _T("Data Section : "); for(int j = EtherHeaderLength + iIpHeaderLength + 8; j < EtherHeaderLength + iIpTotalLength;j++) { strIcmpTmp.Format(_T("%02X "), arrTemp[j]); m_strDataBuffer[i] +=strIcmpTmp; } ICMP 데이터 구간의 위치정보 ICMP 데이터 ICMP 헤더 (8바이트) EtherHeaderLength + iIpHeaderLength EtherHeaderLength + iIpHeaderLength + 8 EtherHeaderLength + iIpTotalLength

25 IcmpViewer 실행화면 ICMP 메시지(헤더+데이터)의 길이 ICMP 헤더(기본 포맷)  8 바이트

26 IcmpViewer 실행화면 리스트 컨트롤의 항목 클릭 ICMP 메시지의 데이터영역의 값

27 IcmpViewer를 이용한 ICMP 메시지 분석
4번 항목 분석 Type  3 (목적지 도달 불능,Destination Unreachable) Code  3 (Port Unreachable) ※Type과 Code값에 따른 ICMP 메시지 유형 교재 혹은 AMAN2002 온라인 도움말(RFC  ICMP  RFC 792)

28 IcmpViewer를 이용한 ICMP 메시지 분석
Checksum  0x1CC0 나머지 헤더  사용하지 않으므로 0임 데이터(IP헤더 + 데이터그램 첫 64비트) 라우터나 호스트가 목적지 도달 불능 메시지를 송신한 쪽으로 전달할 때 수신측에서 받은 IP 데이터그램을 동봉하여 송신측으로 전송함 UDP 목적지 포트번호 0x0089번을 사용하여 목적지 호스트에 접속할 수 없음을 의미함 IP 헤더 데이터그램(UDP) 의 첫 64비트

29 참고 문헌 서승호 외, AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 정익사, 2002.
IETF, RFC 792, “Internet Control Message Protocol”, 1981. James F. Kurose, Keith W. Ross, “Computer Networking: A top-down approach featuring the Internet”, Addison Wesley, 2001. Douglas E. comer, David L. Stevens, “Internetworking with TCP/IP”, Prentice Hall, 1995. W.Richard Stevens, “TCP/IP Illustrated Vol. 1:The Protocols”, Addison Wesley, 1994.


Download ppt "Chapter 6: 인터넷 제어 메시지 프로토콜(ICMP) 2003. 5.."

Similar presentations


Ads by Google