Download presentation
Presentation is loading. Please wait.
Published byFarida Iskandar Modified 6년 전
1
김 지 현 jhkim@netwk.hannam.ac.kr
기초부터 배우는 TCP/IP 네트워크...... 제2장 TCP/IP 프로토콜과 헤더의 구조 김 지 현
2
목차 DNS IP Address 프로토콜 헤더와 구조체 IP 헤더 메모리의 정렬 바이트 오더 Ethernet
MAC Address ARP IP 경로 MTU 탐색 ICMP UDP TCP Q & A
3
DNS DNS(Domain Name System) 영문으로 구성되는 도메인 이름을 IP Address 로 변환하기 위해 필요
테이블을 통한 검색 IP(Internet Protocol) IP Address 로 변환 요청 << 애플리케이션>> 도메인 이름
4
IP 주소 주소의 클래스 이진 표기법으로 클래스 찾기 십진 표기법으로 클래스 찾기
If 첫번째 비트 = 0 then Class A Else if 두번째 비트 = 0 then Class B Else if 세번째 비트 = 0 then Class c Else if 네번째 비트 = 0 then Class d Else Class E
5
프로토콜 헤더와 구조체 패킷 포맷 Ethernet 헤더 트레일러 TCP 헤더 IP 헤더 종착점 MAC 어드레스 6 옥텟
타입 2 옥텟 FCS 4 옥텟 IP 헤더 버전 4 비트 헤더 길이 4 비트 서비스 타입 1 옥텟 패킷 길이 2 옥텟 식별자 2 옥텟 플래그 3 비트 프래그먼트 오프셋 13 비트 생존 기간 1 옥텟 프로토콜 번호 1 옥텟 헤더 체크섬 2 옥텟 시작점 IP 어드레스 4 옥텟 종착점 IP 어드레스 4 옥텟 IP 헤더 TCP 헤더 Ethernet 헤더 1 2 3 4 5 6 7 8 9 10 11 12 DATA 4 TCP 헤더 시작점 포트 번호 2 옥텟 종착점 포트 번호 2 옥텟 시퀀스 번호 4 옥텟 확인 응답 번호 4 옥텟 오프셋 8 비트 예약(미사용) 6 비트 컨트롤 플래그 6 비트 윈도 사이즈 2 옥텟 체크섬 2 옥텟 긴급 포인터 2 옥텟
6
IP 헤더 메모리 상의 배치
7
IP 헤더 구조체 사용 이유 1 옥텟보다 작은 값을 다룰 경우
길이가 다른 필드가 섞여 있어도,하나의 데이터 덩어리로 관리 가능 각각의 필드 크기에 맞춰서 적절한 형태의 변수로 선언 char 형 외에는 변수의 바이트수가 정해져있지 않음 1 옥텟보다 작은 값을 다룰 경우 비트 필드나 마스크 처리가 이용 비트 필드는 구조체의 멤버만 사용 가능 비트 필드의 총 길이에 따라 바이트 길이를 적절하게 준비 8 비트 이하 : 1 바이트 16 비트 이하 : 2 바이트 Structure ip{ u_int ip_v:4, /* version */ u_hl:4 /* header length */ } 버전,헤더 길이 : 각각 4bit
8
IP 헤더 마스크 처리 Struct ip{ u_short ip_off; /* fragment offset field*/ }
Ip_off 프래그먼트 오프셋 #define IP_RF 0x8000 #define IP_DF 0x4000 #define IP_MF 0x2000 #define IP_OFFMASK 0x1fff 모어 프래그먼트 플래그 분할 금지 플래그 예약 플래그
9
IP 헤더 이진수로 나타낸 마스크 Ip_off IP_RF 0x8000 IP_DF 0x4000 IP_MF 0x2000
IP_RF x8000 1 IP_DF x4000 1 IP_MF x2000 1 IP_OFFMASK 0x1fff 1 ip_off 의 값을 Set : ip_off = ip_off | IP_DF; /* set */ ip_off 의 값을 Clear : ip_off = ip_off & (~IP_DF); /* clear */ Ip_off 의 2번째 비트가 1일 때에만 특정 처리가 필요한 경우 if (ip_off & IP_DF){ 처리내용 }
10
IP 헤더 배열에 의한 헤더의 처리 필드의 길이와 맞는 형태가 없을 경우 사용
배열을 대입 또는 비교하는 연산자가 없으며 아래와 같은 함수를 호출하여 처리 #include <string.h> Void *memset(void *s, int c, size_t n); Void *memcpy(void *dest, const void *src, size_t n); Void *memmove(void *dest, const void *src, size_t n); Int memcmp(const void *s1, const void *s2, size_t n); memset : 어드레스 s 에서 c 바이트의 영역을 n으로 채움 memcpy , memmove : 어드레스 src 에서 n 바이트의 영역을 어드레스 dest 에서 시작하는 영역에 복사 memcmp : 어드레스 s1과 어드레스 s2 의 각각의 영역 선두에서 n 바이트의 영역을 1 바이트씩 비교 비교결과 같은 경우 : 0 반환 s1이 큰 경우 : - 값 반환 s2가 큰 경우 : + 값 반환
11
메모리의 정렬 메모리의 정렬 구조체 멤버를 메모리에 배치할 때에 짝수 어드레스나 4의 배수 어드레스에서부터 시작되도록 정렬하는 것 Struct align_test{ char a; char b; int c; } align_test; 정렬된 경우 정렬되지 않은 경우 1000 Char a; 1000 Char a; 1001 Char b; 1001 Char b; 1002 미사용 1002 1003 미사용 1003 Int c; 1004 1004 1005 1005 Int c; 1006 1007
12
바이트 오더 바이트 오더 2바이트 이상의 데이터를 메모리에 저장하는 방법의 차이
빅 엔디언과 리틀 엔디언의 2개의 바이트 오더가 사용
13
바이트 오더 빅 엔디언 리틀 엔디언 네트워크 속을 흐르는 패킷 문제점 데이터 값의 최상위 비트가 어드레스의 선두에 오도록 저장
데이터 값의 최상위 비트가 어드레스의 제일 후미에 오도록 저장 네트워크 속을 흐르는 패킷 빅 엔디언과 똑같이 상위 비트를 선두에 배치하는 순서 네트워크 바이트 오더라고 함 문제점 빅 엔디언과 리틀 엔디언의 저장 방식의 차이에 의한 문제점 어떤 바이트 오더이건 상관없이 변환할 수 있는 함수가 요구
14
바이트 오더 바이트 오더 변환 함수 비트 단위로 처리될 경우 #include <netinet/in.h>
IP 나 TCP 의 헤더등 TCP/IP 프로토콜의 헤더는 모두 네트워크 바이트 오더에 저장 #include <netinet/in.h> u_long int htonl(u_long int hostlong); u_short int htons(u_short int hostshort); u_long int ntohl(u_long int netlong); u_short int ntohs(u_short int netshort); #if BYTE_ORDER == LITTLE_ENDIAN u_int ip_hl : 4 ; /* header length */ ip_v : 4 ; /* version */ #endif #if BYTE_ORDER == BIG_ENDIAN u_int ip_v : 4 ; /* version */ ip_hl : 4 ; /* header length */
15
Ethernet Ethernet 브로드캐스트형 네트워크
네트워크에 접속되어 있는 모든 호스트에 패킷을 전달하는 방식 LAN : 특정 영역 내의 네트워크 ≠ Ethernet : 소규모 네트워크 구성 Ethernet 세그먼트 : 각각의 Ethernet 범위 NIC 의 ROM에는 6 옥텟(:으로 구분)의 MAC 어드레스가 기입 MAC 어드레스는 모든 NIC 를 통틀어 중복되지 않게 관리
16
Ethernet Ethernet 의 프레임 포맷과 구조체의 정의 Ethernet 헤더 구조체 프레임이 흘러가는 방향
종착점 MAC 어드레스 (6옥텟) 시작점 MAC 어드레스 (6옥텟) 타입 (2옥텟) 데이터 (46 ~ 1500옥텟) FCS (4옥텟) Struct ether_header{ u_char ether_dhost[ETHER_ADDR_LEN]; u_char ether_shost[ETHER_ADDR_LEN]; u_short ether_type; };
17
Ethernet Ethernet 의 기본 동작 데이터의 송신전에 다른 호스트의 데이터 송신 여부를 체크
송신 데이터의 충돌시 난수시간을 대기후 재전송 CSMA/CD Carrier Sense Multiple Access with Collision Detection 여러 개의 호스트에서 같은 신호선을 공유해서 프레임을 송신하고,충돌을 검출하고, 송신을 제어하는 것 라우터를 건너뛸 수 없음 라우터에서 격리된 호스트와 통신하기 위해서는 IP 프로토콜을 이용
18
MAC Address MAC 어드레스와 비트의 순번 호스트 내부에서 관리할때와 네트워크 안을 흐를때의 MAC 어드레스가 다름
Ethernet 이 처음 개발된 VAX 의 아키텍쳐의 영향
19
ARP ARP(Address Resolution Protocol)
Ethernet 이나 토큰링 등의 브로드캐스트형 데이터 링크에 사용되는 프로토콜 IP 어드레스를 검색하는 MAC 어드레스를 검색할때 사용 하드웨어 어드레스 : 검색할 어드레스(MAC어드레스) 프로토콜 어드레스 : 검색할 어드레스의 근원이 되는 어드레스(IP 어드레스) 어드레스의 길이는 가변으로 다루어 짐
20
ARP ARP의 패킷 포맷 Arp_hrd : 하드웨어 어드레스의 종류를 나타냄 Arp_pro : 프로토콜의 종류를 나타냄
#define ARPHRD_ETHER 1 Arp_pro : 프로토콜의 종류를 나타냄 Ethernet 의 타입 필드에 넣어지는 값과 같은 값이 저장 Arp_hln : 하드웨어 어드레스의 길이를 나타냄 Ethernet 은 MAC 어드레스의 길이가 6이므로,6이 저장됨 arp_op : ARP 가 어떤 처리를 요구하고 있는지를 나타냄 arp의 요구 :1 arp 의 응답 : 2 ARPOP_REQUEST,ARPOP_REPLY 라고 정의되어 있음 struct arphdr{ u_short ar_hrd; u_short ar_pro; u_char ar_hln; u_char ar_pln; u_short ar_op; }; struct ether_arp{ struct arphdr ea_hdr; u_char arp_sha[ETHER_ADDR_LEN]; u_char arp_spa[4]; u_char arp_tha[ETHER_ADDR_LEN]; u_char arp_tpa[4];
21
ARP ARP 패킷 포맷
22
ARP ARP 프로토콜의 동작 ARP 프로토콜을 이용하여 알아낸 정보는 ARP 테이블에 기억 ARP 테이블은 캐쉬로 저장
23
Destination IP Address
목적 호스트까지 패킷을 보내는 역할 IP 헤더를 해석하여 패킷의 송/수신을 처리 모든 호스트나 라우터에 IP 어드레스가 부여 IP Forward : 다른 호스트에 대한 IP 데이터그램을 수신한 경우 IP 데이터그램을 전송하는 것 식별자 Identification ip_id 패킷의 길이 total length ip_len 헤더 체크섬 Header Checksum ip_sum 시작점 IP 어드레스 Source IP Address ip_src 프래그먼트 오프셋 Fragment Offset ip_off 플래그 Flag 서비스 타입 Type Of Service ip_tos 헤더의 길이 Header Length ip_hl 버전 Version ip_v 프로토콜 번호 protocol ip_p 재생 시간 Time to Live ip_ttl 종착점 IP 어드레스 Destination IP Address ip_dst IP 헤더의 구조
24
IP IP 헤더의 구조 헤더 길이(ip_hl) IP 헤더의 길이를 나타냄 4옥텟 단위로 계산되므로,5 값이 저장됨
C 언어로 처리시 4배 또는 ¼ 로 처리 시프트(>> or <<)연산을 통한 처리 Struct ip{ #if BYTE_ORDER == LITTLE_ENDIAN u_int ip_hl : 4, /* header length */ ip_v : 4 ; /* version */ #endif #if BYTE_ORDER == BIG_ENDIAN u_int ip_v : 4, /* version */ ip_hl : 4; /* header length*/ u_char ip_tos; /* type of service */ u_short ip_len; /* total length */ u_short ip_id; /* identification */ u_short ip_off; /* fragment offset field */ u_char ip_ttl; /* time to live */ u_char ip_p; /* protocol */ u_short ip_sum; /* checksum */ struct in_addr ip_src; /* source address */ struct in_addr ip_dst; /* dest address */ IP 구조체
25
IP 서비스 타입(ip_tos) IP 데이터그램을 배송할 때의 서비스 품질을 라우터에게 지시하기 위해 사용 8 bit
우선도 서비스 타입 미사용 낮은 비용 높은 신뢰성 높은 처리량 낮은 지연 시간 높은 우선도 낮은 우선도 111 110 101 100 011 010 001 000
26
IP 패킷의 길이 식별자 IP 데이터그램의 전체의 길이 16비트(0~65535)
16비트의 길이 전원 주입시 식별자 초기값이 결정 IP 데이터그램을 1개 송신하면 식별자 값이 1씩 더해짐
27
IP 플래그와 프래그먼트 오프셋 RF(Reserved Fragment) : 예약 플래그
0번 비트로 0을 포함하도록 정해져 있음 플래그, 프래그먼트 오프셋 ip_off 필드 프래그먼트 오프셋 모어 프래그먼트 플래그 분할 금지 플래그 예약 플래그 IP_RF x8000 1 IP_DF x4000 1 IP_MF x2000 1 IP_OFFMASK 0x1fff 1
28
IP DF(Don’t Fragment) : 프래그먼트 금지 플래그 MF(More Fragments) : 추가 프래그먼트 플래그
도중의 라우터에서 프래그먼트해서 좋은가 어떤가를 지시 0 : 프래그먼트 가능 1: 프래그먼트 금지 MF(More Fragments) : 추가 프래그먼트 플래그 이동하는 데이터가 프래그먼트 도중인가 마지막인가를 나타냄 0: 마지막 프래그먼트(또는 프래그먼트하지 않음) 1: 도중의 프래그먼트(후속 프래그먼트가 존재) 프래그먼트 오프셋 13비트크기의 필드 프래그먼트된 데이터가 오리지널 IP 데이터그램의 위치를 의미 재생 시간(ip_ttl) IP 데이터그램이 통과할 수 있는 라우터의 개수 라우터를 통과할 때마다 값이 1씩 감소 0이 되면 IP 데이타그램은 폐기
29
IP 프로토콜 번호(ip_p) 헤더 체크섬(ip_sum) 상위 층의 프로토콜에 대해 나타냄
프로토콜 이름 설명 1 ICMP Internet Control Message Protocol 2 IGMP Internet Group Management Protocol 4 IP IP in IP(encapsulation) 6 TCP Transmission Control Protocol 8 EGP Exterior Gateway Protocol 17 UDP User Datagram Protocol 41 IPv6 46 RSVP Resource ReSerVation Protocol 89 OSPF Open Shortest Path Firtst
30
IP 라우팅 IP 데이터그램을 목적 호스트까지 보내기 위해서 경로를 선택하는 것
31
IP IP 프래그먼트 전송이 가능한 최대 프레임의 크기는 데이터 링크로 정해져 있음
MTU(Maximum Transmission Unit) Ethernet:1500옥텟 FDDI: 4352옥텟 IP over ATM : 9180옥텟 데이터 링크보다 큰 IP 데이터그램의 전송은 불가능 통신하는 호스트간 서로 다른 데이터 링크로 인해 MTU가 줄어드는 경우 도중에 라우터에서 IP 데이터그램을 분할 프래그먼트된 IP 데이타그램은 종착점 호스트에서 리어셈블 처리되어 원래의 IP 데이터그램으로 복원 IP 데이타그램이 복원 가능한 경우만 상위계층으로 페이로드를 전달
32
IP IP 프래그먼트 식별자(ID) : 시쟉점 호스트에서 번호가 붙여져 종착점 호스트에 도착할 때까지 그 값이 변하지 않음
33
IP 프래그먼트의 문제점 해결 방안 라우터의 부하 상승 프래그먼트된 IP 데이터그램을 상실했을 때의 전송 효율 저하
라우터의 성능에 따라 통신 성능에 큰 영향을 미침 도중의 프래그먼트는 라우터의 부하를 가중 도중의 프래그먼트는 가능하더라도 하지 않는 편이 좋음 프래그먼트된 IP 데이터그램을 상실했을 때의 전송 효율 저하 다수의 프래그먼트 조각중 하나만 상실하면 모든 프래그먼트를 삭제 IP 네트워크는 30초동안 버퍼에 프래그먼트 조각들을 저장 30초 후에 모든 프래그먼트가 도착지 않으면 모든 프래그먼트를 삭제 해결 방안 가능한 도중 프래그먼트의 발생을 없애기 위해 미리 분할 TCP 의 전송 효율의 저하 문제가 발생 더 나은 방법을 위해 경로 MTU 탐색을 이용
34
경로 MTU 탐색 경로 MTU 탐색 통신 경로상의 최소 MTU 를 검색하여 그 크기 이하가 되도록 사전에 미리 송신 호스트에서 IP 데이터그램을 구분해서 송신
35
ICMP ICMP(Internet Control Message Protocol) IP 의 기능을 보조하기 위한 프로토콜
비효율적인 라우팅을 행하고 있을 때 라우팅 테이블을 변경하기 위해 사용 복수의 형식 ICMP 헤더는 공용체(하나의 메모리 공간을 공유)로 정의 #define 되어 있는 문자 코드 의미 ICMP_ECHOREPLY 에코 응답 ICMP_UNREACH 3 종착점 도달 불능 ICMP_SOURCEQUENCH 4 시작점 억제 ICMP_REDIRECT 5 리다이렉트 ICMP_ECHO 8 에코 요구 ICMP_TIMXCEED 11 시간 초과 ICMP_PARAMPROB 12 파라미터 에러
36
ICMP ICMP 에코 요구, 에코 응답 Ping 명령어로 이용
통신하고 싶은 호스트에 ICMP 에코 요구를 보내고, 그 호스트에 ICMP 에코 요구가 도착한 경우 ICMP 응답이 보내져 옴 타입 Type Icmp_type 코드 Code Icmp_code 체크섬 Checksum Icmp_cksum 식별자 Identification Icmp_id 시퀀스 번호 Sequence Number Icmp_seq << 패킷 형식 >> 타입 - 8:에코 요구 0:에코 응답 코드 - 0 이 포함 식별자 - 복수의 ping 명령어를 같은 컴퓨터상에서 실행할 때 각각의 송신 패킷과 응답을 식별하는 것 시퀀스 번호 - 몇번째에 icmp 패킷을 보냈는가를 번호로 기입 - 패킷의 손실 여부 확인을 위해 사용 데이터 - 에코 응답으로 에코 요구부분이 돌아옴 - 패킷의 왕복시간을 알수 있음 데이터 Icmp_data Struct icmp{ u_char icmp_type; u_char icmp_code; u_short icmp_cksum; u_short icmp_id; u_short icmp_seq; char icmp_data[1]; }; << 패킷의 구조체 >>
37
ICMP ICMP 도달 불능 어떤 원인으로 인해 ip 데이터그램이 목표 호스트까지 도달할 수 없는 경우
타입 Type Icmp_type 코드 Code Icmp_code 체크섬 Checksum Icmp_cksum 미사용 Icmp_pmvoid 다움의 MTU Next MTU Icmp_nextmut << 패킷 형식 >> 데이터 Icmp_data Struct icmp{ u_char icmp_type; u_char icmp_code; u_short icmp_cksum; u_short icmp_pmvoid; u_short icmp_nextmtu; char icmp_data[1]; }; << 패킷의 구조체 >>
38
ICMP 코드 체크섬 포인터 : 사용 하지 않음 MTU 필드 데이터 ICMP 헤더와 데이터가 정확하다는 것을 보증
코드 4 로만 이용 MTU 탐색에서 이용되어 다음 데이터 링크의 MTU 값이 포함 데이터 에러를 발생시켜 IP 데이터그램의 IP 헤더와 이어 8바이트의 데이터가 포함 #define 되어 있는 문자 코드 의미 ICMP_UNREACH_NET 네트워크 도달 불능 ICMP_UNREACH_HOST 호스트 도달 불능 ICMP_UNREACH_PROTOCOL 프로토콜 도달 불능 ICMP_UNREACH_PORT 포트 도달 불능 ICMP_UNREACH_NEEDFRAG 프래그먼트가 필요하거나 DF 가 세트되어 있다. ICMP_UNREACH_SRCFAIL 소스 라우팅 실패
39
ICMP ICMP 도달 불능
40
Gateway Internet Address
ICMP ICMP 리다이렉트 라우팅 테이블을 강제적으로 수정하기 위해 송신 타입 Type Icmp_type 코드 Code Icmp_code 체크섬 Checksum Icmp_cksum 라우터의 IP 어드레서 Gateway Internet Address Icmp_gwaddr << 패킷 형식 >> 데이터 (ip 헤더와 거기에 이어지는 64 비트) Icmp_data Struct icmp{ u_char icmp_type; u_char icmp_code; u_short icmp_cksum; struct in_addr icmp_gwaddr char icmp_data[1]; }; << 패킷의 구조체 >>
41
ICMP 타입 : 5 코드 체크섬 라우터의 IP 어드레스 데이터 ICMP 의 헤더와 데이터가 정확하다는 것을 보증
리다이렉트가 필요하다고 생각되는 IP 데이터그램의 IP 헤더와 그 뒤 8바이트의 데이터가 포함 #define 되어 있는 문자 코드 의미 ICMP_UNREACH_NET 네트워크 도달 불능 ICMP_UNREACH_HOST 호스트 도달 불능 ICMP_UNREACH_PROTOCOL 프로토콜 도달 불능 ICMP_UNREACH_PORT 포트 도달 불능 ICMP_UNREACH_NEEDFRAG 프래그먼트가 필요하거나 DF 가 세트되어 있다. ICMP_UNREACH_SRCFAIL 소스 라우팅 실패
42
ICMP ICMP 리다이렉트
43
ICMP ICMP 시간 초과 메시지 IP 헤더의 TTL 의 값이 0 이 되었을 때 또는 프래그먼트화된 패킷을 리어셈블하지 못하고 폐기할때 전송 타입 Type Icmp_type 코드 Code Icmp_code 체크섬 Checksum Icmp_cksum 미사용 Icmp_void << 패킷 형식 >> 데이터 (ip 헤더와 거기에 이어지는 64 비트) Icmp_data Struct icmp{ u_char icmp_type; u_char icmp_code; u_short icmp_cksum; n_int icmp_void; char icmp_data[1]; }; << 패킷의 구조체 >>
44
ICMP 타입 : 11 코드 IP 데이터그램이 폐기된 것을 시작점 호스트에서 전달 체크섬 포인터 : 사용 안함 데이터
0 : TTL 이 0으로 된 데이터그램을 폐기하는 것 1 : 프래그먼트의 리어셈블이 타임아웃해서 데이터그램이 폐기되는 것 IP 데이터그램이 폐기된 것을 시작점 호스트에서 전달 체크섬 ICMP 의 헤더와 데이터가 바르다는 것을 보증 포인터 : 사용 안함 데이터 에러를 발생시킨 IP 데이터그램의 IP 헤더와 이어진 8바이트의 데이터
45
ICMP 공용체와 실제의 ICMP 헤더 구조체 struct icmp{
u_char icmp_type; u_char icmp_code; u_short icmp_cksum; union{ u_char ih_pptr; struct in addr ih_gwaddr; struct ih_idseq{ n_short icd_id; n_short icd_seq; } ih_idseq; int ih_void; struct ih_pmtu{ n_short ipm_void; n_short ipm_nextmtu; } ih_pmtu; struct ih_rtradv{ u_char irt_num_addrs; u_char irt_wpa; u_int16_t irt_lifetime; }ih_rtradv; }icmp_hun; #define icmp_pptr icmp_hun.ih_pptr #define icmp_gwaddr icmp_hun.ih_gwaddr #define icmp_id icmp_hun.ih_idseq.icd_id #define icmp_seq icmp_hun.ih_idseq.icd_seq #define icmp_void icmp_hun.ih_void #define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void #define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu #define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs #define icmp_wpa icmp_hun.ih_rtradv.irt_wpa #define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime 공용체를 이용하면 멤버를 찾게 되고 프로그램중에 피리어드가 증가되고 프로그램이 알기 어렵게 되기 때문에 define 을 사용하여 멤버를 줄이도록 정의
46
ICMP union{ struct id_ts{ n_time its_otime; n_time its_rtime;
n_time its_ttime; }id_ts; struct id_ip{ struct ip idi_ip; }id_ip; struct icmp_ra_addr id_radv; u_int32_t id_mask; char id_data[1]; } icmp_dun; #define icmp_otime icmp_dun.id_ts.its_otime #define icmp_rtime icmp_dun.id_ts.its_rtime #define icmp_ttime icmp_dun.id_ts.its_ttime #define icmp_ip icmp_dun.id_ip.idi_ip #define icmp_radv icmp_dun.id_radv #define icmp_mask icmp_dun.id_mask #define icmp_data icmp_dun.id_data 공용체를 이용하면 멤버를 찾게 되고 프로그램중에 피리어드가 증가되고 프로그램이 알기 어렵게 되기 때문에 define 을 사용하여 멤버를 줄이도록 정의
47
UDP(User Datagram Protocol)
IP 의 기능을 그대로 애플리케이션으로 이용하기 위해 만들어진 프로토콜 IP 포트 번호와 체크섬 기능을 추가 커넥션리스 신뢰성 없는 데이터그램형의 서비스를 제공 헤더 시작점 포트 번호 Source Port Uh_sport 종착점 포트 번호 Destination Port Uh_dport struct udphdr { u_short uh_sport; /* source port */ u_short uh_dport; /* destination port */ u_short uh_ulen; /* udp length */ u)short uh_sum; /* udp checksum */ }; 패킷 길이 Length Uh_ulen 체크섬 Checksum Uh_sum << 헤더의 포맷 >> << UDP 헤더의 구조체 >> 시작점 포트 번호와 종착점 포트 번호 : 각각의 포트 번호 패킷 길이 : UDP 헤더의 길이와 데이터의 길이가 포함 체크섬 : UDP 헤더와 데이터의 신뢰성을 제공하기 위한 필드
48
Acknoledgement Number
TCP TCP IP의 기능을 확장해 종착점 호스트 사이에 신뢰성 있는 통신을 제공 커넥션 지향의 프로토콜(통신시 커넥션을 연결,통신의 종료시 커넥션을 끊음) 송신 데이터의 순서 번호 제어와 그에 대한 확인 응답 제어 TCP 세그먼틔의 길이를 나타내는 필드가 없음 IP 헤더의 패킷 길이로부터 구해지기 때문 시작점 포트 번호와 종착점 포트 번호 :각각의 포트번호를 나타냄 시퀀스 번호 통신한 데이터의 위치를 옥텟 단위로 표현 확인 응답 번호 다음에 송신한 시퀀스 번호 데이터 오프셋 TCP가 이동하고 있는 데이터 헤더의 선두에서 계산되는 것이 어디서부터 시작하는지를 나타냄 1단위는 4 옥텟, 옵션이 포함되지 않을 경우 5 가 저장 플래그 6 비트는 제어 플래그 윈도 사이즈 데이터를 수신하는 측의 수신 버퍼의 빈영역의 크기를 알려주는데 사용 체크섬 TCP의 헤더나 데이터가 포함되어 있지 않을 것을 보증 긴급포인터 제어 플래그의 URG 가 1인 경우 유효 긴급을 요하는 데이터의 보관 장소를 나타낸 포인터로 처리 시작점 포트 번호 Source Port Th_sport 종착점 포트 번호 Destination Port Th_dport 시퀀스 번호 Sequence Number Th_seq 확인 응답 번호 Acknoledgement Number Th_ack 오프셋 Data Offset Th_off 플래그 Flags Th_flags 윈도 크기 Urgent Pointer Th_urp 체크섬 Checksum Th_sum 긴급 포인터 Urgent Pointer Th_urp
49
TCP 제어 플래그 제어플프래그의 의미 플래그 비트가 1일 때의 의미
플래그 비트가 1일 때의 의미 URG(Urgent Flag) 이동하고 있는 데이터 중에 긴급히 처리해야 하는 것이 포함되어 있는지 아닌지를 의미 긴급히 처리해야 하는 데이터는 긴급 포인터의 필드에 나타남 ACK(Acknowledgement Flag) 확인 응답 필드가 유효한 것을 의미 가장 최초의 SNY 세그먼트 이외는 반드시 [1]로 되어 있음 PSH(Push Flag) 송신한 데이터를 버퍼링하지 않게 신속히 애플리케이션에 전해 주도록 지원 RST(Reset Flag) 커넥션을 강제적으로 차단하는 것을 의미 SYNC(Syncronize Flag) 커넥션 연결 요구를 의미 시퀀스 번호 필드의 값을 시퀀스 번호의 초기값으로 함 FIN(Fin Flag) 커넥션 차단 요구를 의미 통신의 마지막 세그먼트에 있는 것을 의미 이 세그먼트 외에는 데이터 세그먼트가 전송되지 않음
50
TCP TCP 커넥션의 연결 및 차단
51
TCP TCP 에 의한 신뢰성 제공 TCP
52
TCP 버퍼 크기와 윈도우 윈도우제어 TCP 헤더의 윈도 필드
데이터 세그먼트의 송신시 확인 응답을 받지 않아도 연속적으로 데이터 세그먼트를 송신하는 것 TCP 헤더의 윈도 필드 수신측 호스트가 송신측 호스트에게 연속적으로 수신할 수 있는 옥텟 사이즈를 알리는것
53
TCP 체크섬 패킷을 네트워크에 전송하고 있는 사이 헤더나 데이터가 파손되지 않았다는 것을 보증하는데 사용
각각의 프로토콜 체크섬이 보증하는 필드 체크섬이 보증하는 필드 프로토콜 보증하는 필드 체크섬을 취소할 수 있는가 IP IP 헤더만 불가능 ICMP ICMP헤더와 데이터 불가능 TCP TCP 헤더,TCP의 데이터,TCP 의사 헤더 불가능 UDP UDP 헤더,UDP의 데이터,UDP 의사 헤더 가능 IPv6 IP 헤더에서 체크섬이 수행되지 않음 IPv4 시작점 호스트나 종착점 호스트에 보내는 데이터의 최종적인 보증은 TCP 나 UDP 가 수행
54
TCP 의사 헤더 필요성 TCP 나 UDP 에 의한 통신의 식별이 송수신 호스트의 IP 어드레스와 포트 번호, 프로토콜 번호를 사용하여 수행되기 때문 시작점 IP 어드레스 종착점 IP 어드레스 반드시 0 TCP일때 6 UDP일때 17 트랜스포트 헤더를 포함한 패킷의 길이
55
TCP 체크섬의 알고리즘 데이터를 송신하는 호스트의 체크섬 계산 절차 TCP 와 UDP 의 경우 의사 헤더를 작성
체크섬 필드에 0 을 입력 데이터의 길이가 홀수인 경우 0으로 채워서 16비트로 조정 유사 헤더, 헤더, 데이터 부분을 16비트 단위로 조정할때 1의 보수를 더함 구하려는 값의 1의 보수를 헤더 체크섬의 영역에 포함
56
TCP UDP 의 경우 체크섬
57
Thank you… Q & A
Similar presentations