1 / 32

TCP/IP Network Experimental Programming [IPv6 에 의한 통신 실험 ]

TCP/IP Network Experimental Programming [IPv6 에 의한 통신 실험 ]. 이 직 수 네트워크 실험실. 목차. IPv6 등장 배경 IPv6 란 IPv6 의 헤더 구조 IPv6 를 위해 추가된 구조체 IPv6 를 위해 추가된 함수 IPv6 를 사용한 실험 프로그램 IPv6 실험을 위한 리눅스 환경 설정. IPv6 등장 배경. 현재 사용되고 있는 IPv4 는 IP 어드레스 32bit 로 표현 32 비트로 현재 요구되는 IP 어드레스 수를 충족하기에 역부족

zahi
Download Presentation

TCP/IP Network Experimental Programming [IPv6 에 의한 통신 실험 ]

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TCP/IP Network Experimental Programming [IPv6에 의한 통신 실험] 이 직 수 네트워크 실험실

  2. 목차 • IPv6 등장 배경 • IPv6란 • IPv6의 헤더 구조 • IPv6를 위해 추가된 구조체 • IPv6를 위해 추가된 함수 • IPv6를 사용한 실험 프로그램 • IPv6 실험을 위한 리눅스 환경 설정

  3. IPv6 등장 배경 • 현재 사용되고 있는 IPv4는 • IP 어드레스 32bit로 표현 • 32 비트로 현재 요구되는 IP 어드레스 수를 충족하기에 역부족 • 유비쿼터스 등 첨단 기술에 적용하는데 기존의 IPv4는 무리가 있음

  4. IPv6란 • 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. IPv6란 • IPv6 특징 • 128bit 주소 체계로 무한대의 IP 개수 지원 • 다른 대역폭에서도 전송되는 패킷을 특수 처리 가능 • 실시간 multimedia 지원 • 보안 기능 추가 • Ipsec을 프로토콜에 포함 • IPv4와 호환 문제로 점진적으로 적용시키고 있음

  6. IPv6의 헤더 구조 • IPv6 헤더

  7. IPv6의 헤더 구조 • 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 length u_int8_t ip6_un1_nxt; // netx header u_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 address struct in6_addr ip6_dst; // destination address };

  8. IPv6의 헤더 구조 • Version : 버전을 나타냄(값 6) 4bit • Traffic Class : IPv4의 서비스 형태(TOS)를 나타냄 8bit • Flow Label : 품질제어 20bit • 사용시 – Flow Label을 난수로 결정하고 RSVP(ReSerVation Protocol) 등의 흐름을 설정하는 프로토콜을 이용하여 경로상의 라우터에 품질 제어에 관한 설정을 함 • 미사용시 – all zero • Payload Length: IP 데이터그램의 헤더를 뺀 데이터부 길이 • IPv4의 프로토콜 필드에 해당

  9. IPv6의 헤더 구조 • Hop Limit : 통과할 수 있는 라우터의 수 제한 • IPv4의 TTL과 같은 의미 • Source IP 주소 : 발신자 128 bit 주소 • Destination IP 주소 : 수신자 128 bit 주소

  10. IPv6를 위해 추가된 구조체 • Sockaddr_in6 • IP주소와 포트번호를 저장하기 위해 sockaddr_in6구조체 정의 Struct sockaddr_in6{ u_int8_t sin6_len; // length of this struct u_int8_t sin6_family; // AF_INET6 u_int16_t sin6_port; // transport layer port u_int32_t sin6_flowinfo; // IP6 flow information struct in6_addr sin6_addr; // IP6 address u_int32_t sin6_scope_id; // interface scope id };

  11. 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_numerichost int ai_family; // AF_xxx int ai_socktype // sock_xxx int ai_protocol; // 0 or IPPROTO size_t ai_addrlen; // length of ai_addr char ai_canonname; // canonical name for nodename struct sockaddr *ai_addr; // binary address struct addrinfo *ai_next; // next structure in linked list };

  12. 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. IPv6 를 위해 추가된 구조체 • ai_protocol : 트랜스포트 프로토콜을 나타냄 • TCP – IPPROTO_TCP 저장 • UDP – IPPROTO_UDP 저장 • 미사용시 – 0값 저장 • ai_addr : ai_addr 길이를 나타냄 • ai_canonname : 별명을 나타냄 • ai_next : list 다음의 어드레스를 나타냄 • List가 끝날 경우 NULL이 저장

  14. IPv6를 위해 추가된 함수 • 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. IPv6를 사용한 실험 프로그램 • 개요 • 클라이언트 : tcpv6c, 서버 : tcpv6s

  16. IPv6를 사용한 실험 프로그램 • 사용 방법(서버) • 서버 실행 => tcpv6s는 IPv6와 IPv4 양쪽 모두의 TCP 커넥션을 받아들임 • 포트 번호 : 서버가 연결을 받아들이는 포트 번호 지정 • Default : 5320 ./tcpv6s [포트 번호]

  17. IPv6를 사용한 실험 프로그램 • 사용 방법(클라이언트) • 서버의 IP 어드레스 => IPv4 주소, IPv6 주소, 도메인명 모두 가능 • 포트 번호 : 서버측에 열려있는 포트번호 • Default : 5320 ./tcpv6c 서버의 IP 어드레스 [포트 번호]

  18. IPv6를 사용한 실험 프로그램 • 사용 방법(클라이언트) • 서버는 IPv6 주소 방식이 아니므로 위 예제와 같이 접근이 불가 • 서버에 접근하기 위해 IPv4로 접근 ./tcpv6c fe80::250:4ff:fe22:8727% 10

  19. IPv6를 사용한 실험 프로그램 • 실행 예(서버) • ./tcpv6s

  20. IPv6를 사용한 실험 프로그램 • 실행 예(클라이언트) • ./tcpv6c 203.247.39.59

  21. IPv6를 사용한 실험 프로그램 • 사용 방법(서버 접속후) • 다음의 명령어를 입력할 수 있음 • Help : 사용할 수 있는 명령어의 표시 • Show route : 서버의 라우팅 테이블의 표시 • Show nic : 서버의 NIC 정보의 표시 • Show arp : 서버의 ARP 테이블의 표시 • Show tcp : 서버의 TCP 연결 정보 표시 • Quit : 클라이언트 프로그램 종료

  22. IPv6를 사용한 실험 프로그램 • 실행 예(클라이언트 실행 후) • Help • 명령어 리스트를 출력

  23. IPv6를 사용한 실험 프로그램 • (클라이언트 실행 후) 실행 예 • Show route • 서버 라우팅 테이블을 출력

  24. IPv6를 사용한 실험 프로그램 • (클라이언트 실행 후) 실행 예 • Show arp • 서버의 arp 테이블 출력

  25. IPv6를 사용한 실험 프로그램 • (클라이언트 실행 후) 실행 예 • Show nic • 서버의 nic 정보 출력

  26. IPv6를 사용한 실험 프로그램 • (클라이언트 실행 후) 실행 예 • quit • 서버 접속 종료

  27. IPv6를 사용한 실험 프로그램 • 서버측 화면(클라이언트 접속)

  28. IPv6를 사용한 실험 프로그램 • tcpv6s 와 tcps 차이점 • 어드레스 패밀리가 AF_INET6임 • sockaddr_in 구조체에서 sockaddr_in6 구조체로 • in_addr 구조체에서 in6_addr 구조체로 • 구조체의 변경에 따라 구조체의 멤버명 변경

  29. IPv6 실험을 위한 리눅스 환경 설정 • 커널 설정 에러 • 컴파일까지 완료하고 명령어 ./tcpv6s 실행시 에러발생 • 원인 : IPv6 모듈이 올라가지 않은 현상 • 해결 : IPv6 모듈을 실행(modprobe 실행)

  30. IPv6 실험을 위한 리눅스 환경 설정 • ./sbin/modprobe • 리눅스와 커널 버전에 따라 위치 다양

  31. IPv6 실험을 위한 리눅스 환경 설정 • IPv6 참고 자료 • http://blog.naver.com/minzkn.do?Redirect=Log&logNo=60012995540 • 커널관련 자료 URL • http://www.joinc.co.kr/modules/moniwiki/wiki.php/kernel_module_programing

  32. Q & A

More Related