Presentation is loading. Please wait.

Presentation is loading. Please wait.

IP (Internet Protocol)

Similar presentations


Presentation on theme: "IP (Internet Protocol)"— Presentation transcript:

1 IP (Internet Protocol)
Chapter 5: IP (Internet Protocol)

2 인터넷 프로토콜 기능 특징 TCP/IP 프로토콜에서 사용하는 전송 메커니즘 무결성 보장 않음. 순서 보장 않음.
비연결형 프로토콜 (가상회선 설정 않음)

3 IP 데이터그램 IP 데이터그램의 구조 서비스유형 전체길이 식별자 단편옵셋 수명 프로토콜 체크 섬 근원지 주소 목적지 주소
버전 (4비트) 헤더길이 서비스유형 전체길이 식별자 플래그 (3비트) 단편옵셋 수명 프로토콜 체크 섬 근원지 주소 목적지 주소 옵션 (0~40바이트) 20바이트

4 IP 데이터그램의 구조 (1) 버전 (version) 헤더길이 (Header length)
ex) 20 byte 헤더는 5로 표현. 서비스 유형 (Type of Service) 데이터그램의 우선순위, 처리방법을 나타냄, <표 5.1> 참고 Precedence (우선순위): 0 보통 ~ 7 최우선 <RFC 1349 definition> D: Minimize Delay T: Maximize Throughput R: Maximize Reliability C: Minimize Cost 모든 비트 0 이면 Normal. 마지막 비트는 항상 0. D T R C Type of Service: 처리 방법

5 Precedence Precedence RFC 791 definition 0 (000) Routine (Normal)
1 (001) Priority 2 (010) Immediate 3 (011) Flash 4 (100) Flash Override 5 (101) Critical 6 (110) Internetwork Control 7 (111) Network Control

6 IP 데이터그램의 구조 (2) 전체길이 (Total Packet Length) 식별자 (Fragment Identifier)
IP 헤더를 포함한 전체 IP 패킷의 Byte단위 길이 IP 패킷의 최소 길이는 21byte (20byte 헤더 + 1byte 데이터) IP 패킷의 최대 길이는 65,535 byte (216 -1) 식별자 (Fragment Identifier) IP가 단편화 될 때 단편들을 식별하기 위한 번호 단편화된 IP 패킷들을 재조립할 때 사용 플래그 (Fragmentation Flags) 단편화 여부, 조각이 단편의 첫번째 조각인지, 중간 혹은 마지막 조각인지를 구분, 단편 방지 등 단편화 제어. 단편 옵셋 (Fragmentation Offset) 조각난 단편들의 원래 IP 데이터그램에서의 위치정보를 나타내는 포인터. 재조립 시에 단편의 순서를 맞추기 위해 사용.

7 Flag and Offset DF MF 첫 비트는 항상 0.
DF: Do not Fragment, 0: 단편화 가능, 1: 단편화 금지 MF: More Fragment, 0: 마지막 단편(혹은 단편화되지 않았음), 1: 뒤에 단편이 더 있음. Fragmentation Flag: 단편화 제어 DF MF Fragmentation Offset: 재조립 순서 정보

8 IP 데이터그램의 구조 (3) 수명 (Time-to-Live) 프로토콜 (Protocol Identifier)
데이터그램이 폐기되기 전 인터넷에서 얼마나 생존할 수 있는지를 지시하는 값 (최소 1, 최대 28-1= 255 값 지정). 라우터를 통과할 때 마다 1씩 감소, 0이되면 폐기. 프로토콜 (Protocol Identifier) IP 데이터그램이 싣고 가는 데이터의 종류 AMAN2002 온라인 도움말의 Protocol Type 부록 참조. 예) ICMP:1, TCP:6, UDP:17 체크 섬 (Header Checksum) 전송 도중 IP 헤더의 손상여부를 확인. 라우터에서 IP 헤더의 일부분이 변경될 때 마다 다시 계산된다.

9 IP 데이터그램의 구조 (4) 근원지 주소 (Source IP Address)
보내는 편의 IP 주소. (데이터 그램을 생성한 시스템의 IP 주소) 목적지 주소 (Destination IP Address) IP 데이터그램의 최종 목적지 주소 옵션 (Options) 경로설정, 타이밍, 관리, 정렬 등의 부수적인 기능처리 IP 헤더 길이가 20Byte를 초과하게되는 유일한 이유. Padding Option이 사용되어 헤더가 4Byte단위가 안되면 Padding을 붙여 4Byte 단위로 맞춤. (참고: Header Length 필드는 4Byte단위 크기)

10 이더넷 프레임에 포함된 IP 데이터그램 Preamble S F D Destination Address Source Type
DATA FCS 7byte 1byte 6byte 2byte byte 4byte Ethernet Header IP 헤더 데이터

11 IP 주소 IP 주소의 구성 네트워크 ID 호스트 ID 네트워크를 구분 네트워크 상에 존재하는 컴퓨터들을 구분 네트워크 ID

12 IP 주소 체계 A,B,C 클래스로 구분 class A  1.0.0.0 ~ 127.255.255.255
class B  ~ class C  ~ net ID (7) host ID (24) A class 1개 = 16,777,216개 IP 1 net ID (14) host ID (16) B class 1개 = 65,536개 IP 1 net ID (21) host ID (8) C class 1개 = 256개 IP

13 IP 데이터그램 분석

14 IP 데이터그램 분석 (1/5) C7 F4 D3 E9 1C 70 D2 62 BD 17 버전 4 헤더길이 5 서비스유형 00 전체길이 00 30 식별자 00 00 플래그 / 단편옵셋 ( ) 수명 33 프로토콜 06 체크 섬 C7 F4 근원지 주소 D3 E9 1C 70 목적지 주소 D2 62 BD 17 ※ 16진수로 표기함

15 Minimize monetary cost
IP 데이터그램 분석 (2/5) 버전 0x4  IP 데이터그램 버전 4를 사용 헤더길이 0x5  5 x 4 = 20, 헤더길이는 20 바이트임 서비스 유형 0x0  최소지연, 최대 처리율, 최대 신뢰성, 최소비용 모두 요구하지 않음, 기본 서비스 유형임 서비스 유형 Minimize delay Maximize throughput Maximize reliability Minimize monetary cost 0x00 0x02 1 0x04 0x08 0x10

16 IP 데이터그램 분석 (3/5) 전체 길이 0x30  IP 데이터그램의 전체길이는 48 바이트임
동일한 식별자 값이 부여됨 플래그/단편옵셋 플래그  단편화 되지 않은 유일한 단편임 단편옵셋  0이므로 단편화 되지 않았거나 단편화 되었을 때 첫번째 단편임 1 More Fragment → 마지막 단편이거나 유일한 단편임 1 → 마지막 단편 아님 Do Not Fragment 1 → 단편화 금지, 0 → 단편화 가능

17 IP 데이터그램 분석 (4/5) 수명 0x33  51개의 라우터를 거친 후 폐기됨
프로토콜 0x06  IP 데이터그램은 상위 TCP 프로토콜에 전달됨 교재, TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 부록 4 Protocol Numbers 참고 AMAN2002 Online Help의 “Protocol Type” 참조

18 IP 데이터그램 분석 (5/5) 체크 섬 0xC7F4  전송 중 데이터그램의 오류 검사
목적지에서 다시 체크 섬을 계산하여 전송시의 체크 섬과 다르면 폐기함 근원지 주소 0xD3 E9 1C 70  목적지 주소 0xD2 62 BD 17 

19 연습문제 E BF F8 85 A5 E5 9B 37 A5 E5 9B FF 버전 헤더길이 서비스유형 전체길이 식별자 플래그 / 단편옵셋 수명 프로토콜 체크섬 근원지 주소 목적지 주소 입력

20 연습문제 버전  헤더길이  서비스 유형  전체 길이  식별자  플래그  단편옵셋  수명  프로토콜 
※ 각 필드의 의미를 분석하시오. 버전  헤더길이  서비스 유형  전체 길이  식별자  플래그  단편옵셋  수명  프로토콜  체크 섬  근원지 주소  목적지 주소 

21 Guru를 이용한 데이터그램 분석 연습

22 데이터그램 캡처 프로그램 작성 ※ 프로젝트 생성 및 라이브러리 경로 설정은
ch04. 이더넷(Ethernet)의 이더넷 캡처 프로그램 작성과 동일

23 대화상자 디자인 List Control 1 Group Box 2 Static Text 3 ~ 14 Edit Box 15~29
30 Static Text 31, 33 Edit Box 32, 34 Button 35~37

24 Control 속성 # 종류 ID 속성 변수이름 1 List Control IDC_LIST_PacketInfo
View: Report m_ListIPPacketInfo 15 Edit Box IDC_EDIT_IP_Ver Read-only m_strIpVer 16 IDC_EDIT_IP_HLen m_strIpHLen 17 IDC_EDIT_IP_Tos m_strIpTos 18 IDC_EDIT_IP_ToLen m_strIpToLen 19 IDC_EDIT_IP_Iden m_strIpIden 20 IDC_EDIT_IP_DF_flag m_strIpFlagDF 21 IDC_EDIT_IP_MF_flag m_strIpFlagMF 22 IDC_EDIT_IP_RF_flag m_strIpFlagRF 23 IDC_EDIT_IP_FragOff m_strIpFragOff 24 IDC_EDIT_IP_Ttl m_strIpTtl

25 Control 속성 # 종류 ID 속성 변수이름 25 Edit Box IDC_EDIT_IP_Proto Read-only
m_strIpProto 26 IDC_EDIT_IP_Checksum m_strIpChecksum 27 IDC_EDIT_IP_SrcAddr m_strIpSrcAddr 28 IDC_EDIT_IP_DestAddr m_strIpDestAddr 29 IDC_EDIT_IP_Opt m_strIpOpt 32 IDC_EDIT_CountInput m_iCountInput 34 IDC_EDIT_CountOutput m_iCountOutput 35 Button IDC_BUTTON_StartCapture . 36 IDCANCEL Default Button 37 IDC_BUTTON_INFORM

26 이벤트 처리 # 종류 ID 메시지 함수명 1 List Control IDC_LIST_PacketInfo NM_CLICK
OnClickLIST() 35 Button IDC_BUTTON_StartCapture BN_CLICKED OnBUTTONStartCapture() 36 IDCANCEL OnCancel() 37 IDC_BUTTON_INFORM OnButtonInform()

27 어뎁터 오픈 대화상자 표시 void CIPViewerDlg::OnBUTTONSelectAdaptor() {
//Ncap lib.(Dialog based class lib.) 객체 생성. CSelectAdaptorDlg *pDlg = new CSelectAdaptorDlg; if(pDlg->DoModal() != IDOK) delete pDlg; return; }

28 어뎁터 열기 //선택된 네트워크 어뎁터를 사용할 수 있도록 초기화. if(pDlg->OpenAdaptor(1)) {
::AfxMessageBox("Adaptor open 실패"); pDlg->CloseAdaptor(); delete pDlg; return; }

29 패킷 캡처 #define MaxBufferLen 2048 UpdateData(TRUE); int i = 0;
unsigned char arrTemp[MaxBufferLen]; for(i < m_iCountInput) { memset(arrTemp, 0, MaxBufferLen); //패킷을 하나 획득함. 음수가 return되면 에러가 발생한 것. int iLengthOfPacket = pDlg->Ncap(arrTemp, MaxBufferLen); if(iLengthOfPacket <0 ) continue; //패킷 분석 }

30 패킷 분석 (1/7) // 패킷 분석시에 사용하는 이더넷 헤더
“C:\AMAN2002\include\ProtocolHeader.h” // 패킷 분석시에 사용하는 이더넷 헤더 // Ethernet Header (14 바이트) - IEEE Standard for Information technology struct t_EtherHeader { u_char eth_dst[6]; // Destination Address Field, 48bits u_char eth_src[6]; // Source Address Field, 48bits u_short eth_type; // Type Field, 16bits char eth_data[1]; // MAC Client Data };

31 패킷 분석 (2/7) struct t_IPHeader // IP header (최소 20 바이트) - RFC 791 {
“C:\AMAN2002\include\ProtocolHeader.h” struct t_IPHeader // IP header (최소 20 바이트) - RFC 791 { u_char ip_hl:4, // Internet Header Length, 4bits ip_v:4; // Version, 4bits u_char ip_tos; // Type of Service, 8bits u_short ip_len; // Total Length, 16bits u_short ip_id; // Identification, 16bits u_short ip_off; // fragment offset #define IP_RF 0x8000 #define IP_DF 0x4000 #define IP_MF 0x2000 #define IP_OFFMASK 0x1fff u_char ip_ttl; // Time to Live, 8bits u_char ip_proto; // Protocol, 8bits u_short ip_sum; // Header Checksum, 16bits struct in_addr ip_src; // Source Address, 32bits struct in_addr ip_dst; // Destination Address, 32bits char ip_data[1]; // IP data };

32 패킷 분석 (3/7) … // 획득한 패킷의 시작 주소를 t_EtherHeader 구조체 주소로 대입
List Control 에 패킷 헤더 정보 표시 // 획득한 패킷의 시작 주소를 t_EtherHeader 구조체 주소로 대입 t_EtherHeader *tEtherHeader = (t_EtherHeader *)arrTemp; // IP 패킷의 시작 지점 정보를 t_IPHeader 구조체로 전달 t_IPHeader *tIPHeader = (t_IPHeader *) tEtherHeader->eth_data; m_tIPHeader[i]= *tIPHeader; // 일련번호 CString strNum = _T(""); strNum.Format(_T("%d"), i); m_ListIPPacketInfo.InsertItem(LVIF_TEXT, i, strNum, 0, 0, 0, 0 ); // 근원지 IP 주소 획득 CString strIpSrcAddr = _T(""); strIpSrcAddr.Format("%s", inet_ntoa(m_tIPHeader[i].ip_src)); m_ListIPPacketInfo.SetItem(i, 1, LVIF_TEXT, strIpSrcAddr, 0, 0, 0, 0);

33 패킷 분석 (4/7) Edit Box에 10진수로 패킷 헤더 필드 표시 (List Control의 항목 클릭) void CIPViewerDlg::OnClickLIST(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW * pNmList = (NM_LISTVIEW *) pNMHDR; int nItem = pNmList->iItem; if(nItem <= -1) return; //버전 m_strIpVer.Format("%d", m_tIPHeader[nItem].ip_v); //헤더길이 m_strIpHLen.Format("%d", m_tIPHeader[nItem].ip_hl); //서비스 유형 m_strIpTos.Format("%d", m_tIPHeader[nItem].ip_tos); //전체길이 m_strIpToLen.Format("%d ", htons(m_tIPHeader[nItem].ip_len)); . . .

34 패킷 분석 (5/7) Edit Box에 10진수로 패킷 헤더 필드 표시 (List Control의 항목 클릭) //식별자 m_strIpIden.Format("%d ", htons(m_tIPHeader[nItem].ip_id)); //플래그 - RF iTemp = htons(m_tIPHeader[nItem].ip_off) & IP_RF; iTemp >>= 15; m_strIpFlagRF.Format("%d", iTemp); //플래그 - DF iTemp = htons(m_tIPHeader[nItem].ip_off) & IP_DF; iTemp >>= 14; m_strIpFlagDF.Format("%d", iTemp); //플래그 - MF iTemp = htons(m_tIPHeader[nItem].ip_off) & IP_MF; iTemp >>= 13; m_strIpFlagMF.Format("%d", iTemp); . . .

35 패킷 분석 (6/7) Edit Box에 10진수로 패킷 헤더 필드 표시 (List Control의 항목 클릭) //단편옵셋 unsigned short iFrag = htons(m_tIPHeader[nItem].ip_off) & IP_OFFMASK; m_strIpFragOff.Format("%d", iFrag); //수명 m_strIpTtl.Format("%d", m_tIPHeader[nItem].ip_ttl); //프로토콜 m_strIpProto.Format("%d", m_tIPHeader[nItem].ip_proto); //헤더체크섬 m_strIpChecksum.Format("%d ", htons(m_tIPHeader[nItem].ip_sum)); //근원지 주소 m_strIpSrcAddr.Format("%s", inet_ntoa(m_tIPHeader[nItem].ip_src)); //목적지 주소 m_strIpDestAddr.Format("%s",inet_ntoa(m_tIPHeader[nItem].ip_dst)); . . .

36 패킷 분석 (7/7) Edit Box에 10진수로 패킷 헤더 필드 표시 (List Control의 항목 클릭) //옵션 int iOptionLength = m_tIPHeader[nItem].ip_hl * ; // 옵션 데이터가 있을 경우 if( iOptionLength > 0 ) { pTemp = (unsigned char *) &m_tIPHeader[nItem].ip_data; for( int i = 0; i<iOptionLength; i++ ) strTemp.Format("%d ", pTemp[i]); m_strIpOpt += strTemp; } UpdateData(FALSE); *pResult = 0;

37 어뎁터 닫기 //사용한 자원 해제. pDlg->CloseAdaptor(); //Ncap lib. 삭제.
delete pDlg;

38 IPViewer 실행 화면 (1)

39 IPViewer 실행 화면 (2) click

40 IPViewer를 이용한 이더넷 프레임 분석
헤더길이  헤더길이는 20바이트 이므로 옵션을 사용하지 않음 서비스 유형  0으로 기본 서비스 유형임 전체 길이  데이터그램의 전체길이는 56 바이트임 식별자  단편의 ID는 47172임

41 IPViewer를 이용한 이더넷 프레임 분석
플래그  do not fragment비트가 0 이므로 단편화되었고, more fragment 비트가 0이므로 마지막 단편이거나 유일한 단편임 단편옵셋  0 이므로 첫번째 단편임 수명  128개의 라우터를 거친 뒤에 폐기됨 프로토콜  데이터에서 UDP 프로토콜을 캡슐화 함 체크 섬  송신지에서 계산한 체크 섬은 0 임 근원지 주소  데이터그램의 송신지 주소는 목적지 주소  데이터그램의 수신지 주소는

42 참고 문헌 서승호 외, AMAN2002를 이용한 TCP/IP 프로토콜 분석 및 네트워크 프로그래밍, 정익사, 2002.
RFC 760, Jon Postel, DOD STANDARD INTERNET PROTOCOL, January 1980. RFC 791, Jon Postel, INTERNET PROTOCOL DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION, September 1981. RFC 894, Charles Hornig, A Standard for the Transmission of IP Datagrams over Ethernet networks, April 1984. RFC 950, J. Mogul(Stanford), Internet Standard Subnetting Procedure, August 1985. RFC 1122, R.Braden, Requirements for Internet Hosts – Communication Layers, October 1989. RFC 1132, L. McLaughlin III, A Standard for Transmission of Packet over IPX Networks, November 1989 Eric A. Hall, Internet Core Protocols, O’Reilly, 1999.


Download ppt "IP (Internet Protocol)"

Similar presentations


Ads by Google