tcp/ip network experimental programming [ipv6 에 의한 통신 실험 ]
DESCRIPTION
TCP/IP Network Experimental Programming [IPv6 에 의한 통신 실험 ]. 이 직 수 네트워크 실험실. 목차. IPv6 등장 배경 IPv6 란 IPv6 의 헤더 구조 IPv6 를 위해 추가된 구조체 IPv6 를 위해 추가된 함수 IPv6 를 사용한 실험 프로그램 IPv6 실험을 위한 리눅스 환경 설정. IPv6 등장 배경. 현재 사용되고 있는 IPv4 는 IP 어드레스 32bit 로 표현 32 비트로 현재 요구되는 IP 어드레스 수를 충족하기에 역부족 - PowerPoint PPT PresentationTRANSCRIPT
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental TCP/IP Network Experimental Programming [IPv6Programming [IPv6 에 의한 통신 실에 의한 통신 실
험험 ]]
이 직 수이 직 수네트워크 실험실네트워크 실험실
2
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
목차목차 IPv6 등장 배경 IPv6 란 IPv6 의 헤더 구조 IPv6 를 위해 추가된 구조체 IPv6 를 위해 추가된 함수 IPv6 를 사용한 실험 프로그램 IPv6 실험을 위한 리눅스 환경 설정
3
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 등장 배경등장 배경현재 사용되고 있는 IPv4 는
■ IP 어드레스 32bit 로 표현
■ 32 비트로 현재 요구되는 IP 어드레스 수를 충족하기에 역부족
■ 유비쿼터스 등 첨단 기술에 적용하는데 기존의 IPv4 는 무리가 있음
4
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 란란 IPv6
■ IPv4 차세대 IP 모델
■ 어드레스가 128bit 로 표현되는 막대한 수의 호스트를 지원▶ IPv4 : 2 의 32 제곱 (43 억 ) 개 IP 주소▶ IPv6 : 2 의 128 제곱 (43 억 ×43 억 ×43 억 ×43 억 ) 개 IP 주소
16bit 단위로 16 진수로 표현 예 : 2001:0230:abcd:ffff:0000:0000:ffff:1111
■ 차세대 인터넷은 모든 전자 제품이 네트워크에 통합되는 방향이므로 현재보다 엄청난 IP 어드레스를 요구하는데 이를 해결하기 위해 등장
5
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 란란 IPv6 특징
■ 128bit 주소 체계로 무한대의 IP 개수 지원
■ 다른 대역폭에서도 전송되는 패킷을 특수 처리 가능▶ 실시간 multimedia 지원
■ 보안 기능 추가▶ Ipsec 을 프로토콜에 포함
■ IPv4 와 호환 문제로 점진적으로 적용시키고 있음
6
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 의 헤더 구조의 헤더 구조 IPv6 헤더
7
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 의 헤더 구조의 헤더 구조 IPv6 헤더 구조체
Struct ip6_hdr{union {
u_int32_t ip6_unl_flow; // 4 bits version// 8 bits traffic class// 20 bits flow-ID
u_int16_t ip6_un1_plen; // payload lengthu_int8_t ip6_un1_nxt; // netx headeru_int8_t ip6_un1_hlim; // hop limit
} ip6_unl;u_int8_t ip6_un2_vfc; // 4 bits version
// top 4 bits traffic class} ip6_ctlun;struct in6_addr ip6_src; // source addressstruct in6_addr ip6_dst; // destination address
};
8
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 의 헤더 구조의 헤더 구조■ Version : 버전을 나타냄 ( 값 6) 4bit
■ Traffic Class : IPv4 의 서비스 형태 (TOS) 를 나타냄 8bit
■ Flow Label : 품질제어 20bit▶ 사용시 – Flow Label 을 난수로 결정하고 RSVP(ReSerVation
Protocol) 등의 흐름을 설정하는 프로토콜을 이용하여
경로상의 라우터에 품질 제어에 관한 설정을 함
▶ 미사용시 – all zero
■ Payload Length: IP 데이터그램의 헤더를 뺀 데이터부 길이▶ IPv4 의 프로토콜 필드에 해당
9
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 의 헤더 구조의 헤더 구조■ Hop Limit : 통과할 수 있는 라우터의 수 제한
▶ IPv4 의 TTL 과 같은 의미
■ Source IP 주소 : 발신자 128 bit 주소
■ Destination IP 주소 : 수신자 128 bit 주소
10
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 위해 추가된 구조체를 위해 추가된 구조체Sockaddr_in6
■ IP 주소와 포트번호를 저장하기 위해 sockaddr_in6 구조체 정의
Struct sockaddr_in6{u_int8_t sin6_len; // length of this structu_int8_t sin6_family; // AF_INET6u_int16_t sin6_port; // transport layer portu_int32_t sin6_flowinfo; // IP6 flow informationstruct in6_addr sin6_addr; // IP6 addressu_int32_t sin6_scope_id; // interface scope id
};
11
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 를 위해 추가된 구조체를 위해 추가된 구조체 In6_addr 구조체 : IPv6 의 주소 정의
Addrinfo 구조체 : list 구조로 설계
Struct in6_addr{u_int8_t s6_addr[16];
};
Struct addrinfo{int ai_flags; // ai_passive, ai_canonname, ai_numerichostint ai_family; // AF_xxxint ai_socktype // sock_xxxint ai_protocol; // 0 or IPPROTOsize_t ai_addrlen; // length of ai_addrchar ai_canonname; // canonical name for nodenamestruct sockaddr *ai_addr; // binary addressstruct addrinfo *ai_next; // next structure in linked list
};
12
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 를 위해 추가된 구조체를 위해 추가된 구조체■ ai_flag : 세 개의 비트 설정
▶ AI_PASSIVE – 임의의 어드레스를 이용할때 (ipv4 INADDR_ANY)▶ AI_CANONNAME – 최초의 list 구조에 정식 명칭을 저장할 때▶ AI_NUMERICHOST – DNS 검색 (X), IP 주소 (O) 검색
DNS 검색 시간 줄이고자 할 때
■ ai_family : 어드레스 패밀리▶ IPv4 를 나타내는 AF_INET▶ IPv6 를 나타내는 AF_INET6
■ ai_socktype : 소켓의 타입▶ SOCK_STREAM : stream 형 소켓▶ SOCK_DGRAM : datagram 형 소켓▶ SOCK_RAW : raw IP 형
13
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 를 위해 추가된 구조체를 위해 추가된 구조체■ ai_protocol : 트랜스포트 프로토콜을 나타냄
▶ TCP – IPPROTO_TCP 저장▶ UDP – IPPROTO_UDP 저장▶ 미사용시 – 0 값 저장
■ ai_addr : ai_addr 길이를 나타냄
■ ai_canonname : 별명을 나타냄
■ ai_next : list 다음의 어드레스를 나타냄▶ List 가 끝날 경우 NULL 이 저장
14
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 위해 추가된 함수를 위해 추가된 함수 Inet_pton, inet_ntop
■ inet_pton : 문자열 IP 주소를 2 진수 IP 주소로 변환
■ inet_pton : 2 진수 IP 주소를 문자열 IP 주소로 변환
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>
Const char *inet_ntop (int af, const void *src, char *dst, size_t size);
Int inet_pton(int af, const char *src, void *dst);
15
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 개요
■ 클라이언트 : tcpv6c, 서버 : tcpv6s
16
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 사용 방법 ( 서버 )
■ 서버 실행=> tcpv6s 는 IPv6 와 IPv4 양쪽 모두의 TCP 커넥션을 받아들임
▶ 포트 번호 : 서버가 연결을 받아들이는 포트 번호 지정 Default : 5320
./tcpv6s [ 포트 번호 ]
17
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램사용 방법 ( 클라이언트 )
■ 서버의 IP 어드레스=> IPv4 주소 , IPv6 주소 , 도메인명 모두 가능
■ 포트 번호 : 서버측에 열려있는 포트번호▶ Default : 5320
./tcpv6c 서버의 IP 어드레스 [ 포트 번호 ]
18
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 사용 방법 ( 클라이언트 )
■ 서버는 IPv6 주소 방식이 아니므로 위 예제와 같이 접근이 불가
■ 서버에 접근하기 위해 IPv4 로 접근
./tcpv6c fe80::250:4ff:fe22:8727% 10
19
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 실행 예 ( 서버 )
■ ./tcpv6s
20
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 실행 예 ( 클라이언트 )
■ ./tcpv6c 203.247.39.59
21
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램사용 방법 ( 서버 접속후 )
■ 다음의 명령어를 입력할 수 있음
■ Help : 사용할 수 있는 명령어의 표시■ Show route : 서버의 라우팅 테이블의 표시■ Show nic : 서버의 NIC 정보의 표시■ Show arp : 서버의 ARP 테이블의 표시■ Show tcp : 서버의 TCP 연결 정보 표시■ Quit : 클라이언트 프로그램 종료
22
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 실행 예 ( 클라이언트 실행 후 )
■ Help▶ 명령어 리스트를 출력
23
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 ( 클라이언트 실행 후 ) 실행 예
■ Show route▶ 서버 라우팅 테이블을 출력
24
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 ( 클라이언트 실행 후 ) 실행 예
■ Show arp▶ 서버의 arp 테이블 출력
25
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 ( 클라이언트 실행 후 ) 실행 예
■ Show nic▶ 서버의 nic 정보 출력
26
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 ( 클라이언트 실행 후 ) 실행 예
■ quit▶ 서버 접속 종료
27
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 서버측 화면 ( 클라이언트 접속 )
28
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6IPv6 를 사용한 실험 프로그램를 사용한 실험 프로그램 tcpv6s 와 tcps 차이점
■ 어드레스 패밀리가 AF_INET6 임
■ sockaddr_in 구조체에서 sockaddr_in6 구조체로
■ in_addr 구조체에서 in6_addr 구조체로
■ 구조체의 변경에 따라 구조체의 멤버명 변경
29
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 실험을 위한 리눅스 환경 설정실험을 위한 리눅스 환경 설정 커널 설정 에러
■ 컴파일까지 완료하고 명령어 ./tcpv6s 실행시 에러발생
■ 원인 : IPv6 모듈이 올라가지 않은 현상■ 해결 : IPv6 모듈을 실행 (modprobe 실행 )
30
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 실험을 위한 리눅스 환경 설정실험을 위한 리눅스 환경 설정 ./sbin/modprobe
■ 리눅스와 커널 버전에 따라 위치 다양
31
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
IPv6 IPv6 실험을 위한 리눅스 환경 설정실험을 위한 리눅스 환경 설정 IPv6 참고 자료
■ http://blog.naver.com/minzkn.do?Redirect=Log&logNo=60012995540
커널관련 자료 URL■ http://www.joinc.co.kr/modules/moniwiki/wiki.php/kernel_modu
le_programing
32
Network Lab.Network Lab.
HANNAM HANNAM Univ.Univ.HANNAM HANNAM Univ.Univ.
TCP/IP Network Experimental ProgrammingTCP/IP Network Experimental Programming
Q & AQ & A