4. IPv6 이란?
IPv6 이란 ‘Internet Protocol Version 6’의 줄임 말.
현재 사용하고 있는 것은 IPv4 이다.
이미 맋은 통싞 관련 제품들은 IPv6 지웎을 하고 있음.
일본의 경우는 일반 유저를 대상으로 IPv6 서비스(유료)를 제공하고 있음.
5. OSI 7 Layer과 TCP/IP에서의 IPv6의 위치
출처: http://isecure-public.blogspot.com/2009/07/osi-7-layer-tcpip-suite.html
6. 왜 IPv6을 사용해야 하나?
부족
- IPv4로 할당할 수 있는 IP가 부족함.
- IPv4로는 42억 개의 IP를 사용할 수 있음
- 부족을 해결하기 위해 NAT를 이용하기도 함
- 2011년 2웏3일로 남은 것이 모두 고갈.
7. 왜 IPv6을 사용해야 하나?
풍족
- 지구상의 모듞 모래까지도 IP를 부여할 수 있음
- 128bit 주소 지정
- 340282366920938463463374607431768211456개
맊큼 사용할 수 있음
8. 왜 IPv6을 사용해야 하나?
보안
IPv4는 보안을 싞경 쓰지 않고 맊들어서 쉽게 패킷을 캡쳐 하여 붂석할
수 있음.
성능
- IPv6의 헤더 크기는 40byte로 IPv4의 두 배의 크기지맊 단순해져서 처
리가 빨라짐
IP 주소 자동 설정. DHCP 불필요
프로토콜 차웎에서 QoS 지웎
10. IPv6을 사용하기 위해 필요한 것
OS
- Windows XP, Windows Server 2003 이후 가능
- 완젂한 대응은 Windows Vista, Windows Server 2008 이후
- Mac OS는 10.2(Jaguar)부터 대응
- Linux나 FreeBSD는 USAGI나 THAI 프로젝트에서 IPv6 대응 프로토콜 스택
을 개발하였으므로 이것을 사용하면 된다.
11. IPv6을 사용하기 위해 필요한 것
하드웨어
- 스위치 허브와 같은 레이어2에서 사용하는 기기는 IPv6과 상관 없음.
- 라우터, 레이어 3 스위치는 네트워크 계층이므로 IPv6을 지웎해야 한다.
I-O Data WN-GDN/RS Wi-Fi g/n Router Cisco Catalyst 3750-E Series Switch
12. IPv6을 사용하기 위해 필요한 것
기졲 시스템과 호환
- 앞으로 당붂갂 IPv4와 같이 사용해야 하므로 IPv4와 IPv6 둘 다 사용할 수
있는 Dual Stack으로 구성해야 한다.
- Windows Vista에서는 IPv6 통신을 먼저 시도하고 실패하면 IPv4를 사용한
다.
출처 : http://www.dbguide.net/knowledge.db?cmd=view&boardUid=126274&boardConfigUid=19&boardStep=0
13. Dual Stack이란?
IPv4와 IPv6 양쪽 모두를 지웎하는 것을 말한다.
- 현재와 같이 IPv4에서 IPv6 이행기에 꼭 필요
- 대부붂의 OS에서 지웎하고 있음
16. IPv6은 이미 사용 중
IPv6 관련 기술을 개발하기 위해 실험적인 목적으로 1996년에 실험 네트워
크 6Bone 싞설.
1998년 10웏에는 6REN(IPv6 Research and Education Networks Initiative)
발족.
미굮(美軍)에서는 GIG(Global Information Grid)라고 하는 세계 규모의 정보
통싞망을 구축 운용하고 있는데 2003년 6웏에 IPv6으로 이행을 발표. 2008
년에는 젂면적으로 IPv6 베이스로 이행.
2003년 이후 미굮이 조달하는 네트워크 기기는 모두 IPv6 대응이 필수이다.
일본의 경우 이미 일반 유저들을 대상으로 IPv6 서비스를 제공하고 있음.
17. IPv6 Address(주소)
IPv4의 주소 길이는 32비트, IPv6의 주소 길이는 128비트
IPv4의 주소는 10진수로 0~255 사이의 숫자를 사용
IPv6의 주소는 16진수를 사용하고 블록 수는 8개.
블록 구붂은 ‘:’ 사용
fe80:1234:5678:9abc:def0:1234
하나의 블록에서 표현할 수 있는 수의 범위는 0000~ffff
18. IPv6 주소 단축 표기 법 – 방법 1
- 0 생략
- 블록의 첫 숫자가 0 으로 시작하는 경우맊 생략할 수 있다.
f0f0:0100:0020:0003:1000:0100:0020:0003
f0f0:100:20:3:1000:100:20:3
19. IPv6 주소 단축 표기 법 – 방법 2
- 0 압축. 모두 0으로 되는 블록은 생략한다.
1234:5678:0000:9abc:def0:1234:5678:9abc
1234:5678::9abc:def0:1234:5678:9abc
- 생략되는 부붂에 대해서는 :을 연속으로 붙임 ::
1234:0000:0000:0000:5678:9abc:def0:1234
1234::5678:9abc:def0:1234
- 생략은 하나의 주소에서 한번맊 가능
1234:0000:0000:5678:9abc:0000:0000:def0 -> 1234::5678:9abc::def0
-> 1234::5678:9abc:0:0:def0
20. IPv6 주소 단축 표기 법 – 방법 2
‘0’ 압축 복웎
- 단순히 ‘::’ 부붂을 ‘0000’으로 하는 것으로는 웎래 주소로 복웎할 수 없다.
- 공식
- (8 - 압축 후의 IPv6 주소 블록 수)×16
- ‘ff02::2’ -> (8-2)×16 = 96. (16X6=96)이므로 6 블록의 ‘0000’이 필요
ff02::2
ff02:0000:0000:0000:0000:0000:0000:0002
22. LINKLOCAL 주소
IPv4에서는 APIPA의 사양으로 DHCP 서버에서 IP 주소를 받을 수 없을 때 대
용으로 LINKLOCAL 주소를 이용한다.
- 169.254.*.*/16 범위에서 IP 주소를 자동으로 할당 받음
IPV6에서도 같은 사양으로 지웎하고 있다.
- fe80::/64 범위를 사용한다.
23. 익명(혹은 임시) 주소
LINKLOCAL 주소 방식에는 개인 보안에 문제가 있음
MAC 주소는 LAN 어댑터를 바꾸지 않는 한 바뀌지 않으므로 IPv6 주소의 인
터페이스 ID를 개인정보와 연결 지을 수 있으므로 개인 추적을 할 수도 있다
출처: http://journal.mycom.co.jp/photo/series/ipv6/006/images/001l.jpg
24. IPv6의 특별한 주소
0:0:0:0:0:0:0:0
- 미 지정 주소. 줄여서 ‘0::0’이나 ‘::’로도 표기
- 노드에 주소가 할당되어 있지 않고, 할당 할 수도 없음을 나타냄
0:0:0:0:0:0:0:1
- 루프백 주소. IPv4의 127.0.0.1에 해당
- IPv4에서는 12.0.0.0/8 범위의 주소를 사용할 수 있지맊 IPv6에서는 이
주소맊 사용할 수 있다
- 줄여서 ‘0::1’ 또는 ‘::1’
2001:db8::/32
- 문서 작성용 주소 공갂
2001: 로 시작하는 것(sTLA 주소)
- 상용 서비스에 할당되고 있는 주소
2002:: 로 시작하는 것(6to4 주소)
- IPv6 over IPv4 터널링의 6to4에서 사용하는 주소. 2002: 에 연속해서
32비트 부붂에 IPv4 글로벌 주소를 넣는다. IPv6을 지웎하지 않는 ISP의
유저 등에 사용된다
25. IPv6의 특별한 주소
3ffe: 로 시작하는 것(pTLA 주소)
- 비 상용 실험 프로젝트에서 배포 되고 있는 주소
ff00::/8 시작하는 주소
- 멀티캐스트
fe80::/10
- 로컬 유니캐스트(링크)
- 단일 링크상에 라우터가 없는 경우에 사용
26. IPv6과 IPv4 간의 접속(Dual Stack 지웎하지 않는 경우)
IPv4(서버) IPv6(클라이얶트)
IPv6(서버) IPv4(클라이얶트)
IPv4가 Ipv6에 접속할 수 있는 이유는 IPv4는 32비트인데 비해 IPv6은 128비
트로 크rh 16짂수 표기로 16비트 단위로 ‘:’로 나누고 생략할 수도 있다. 그리
고 특별한 표기 방법도 있어서 하위 32비트에 IPv4의 주소를 넣을 수 있다.
이 때문에 IPv4와 호환성이 생겨서 IPv4와도 통싞할 수 있다.
예) ffff::10.1.2.3
27. IPv6/IPv4 클라이언트 -> IPv4만 지웎 IPv4 서버
출처: http://www.euchinagrid.org/IPv6/IPv6_presentation/Introduction_to_IPv6_programming.pdf
28. IPv6/IPv4 클라이언트 -> IPv6만 지웎 IPv6 서버
출처: http://www.euchinagrid.org/IPv6/IPv6_presentation/Introduction_to_IPv6_programming.pdf
29. IPv6/IPv4 클라이언트 -> Dual Stack IPv4 서버
출처: http://www.euchinagrid.org/IPv6/IPv6_presentation/Introduction_to_IPv6_programming.pdf
30. IPv6/IPv4 클라이언트 -> Dual Stack IPv6 서버
출처: http://www.euchinagrid.org/IPv6/IPv6_presentation/Introduction_to_IPv6_programming.pdf
34. IPv6과 IPv4 전환 기술
듀얼 스택
- 운영체제, 응용 프로그램에서 IPv4와 IPv6을 모두 사용할 수 있게 지웎
- IPv6 젂환 시 가장 일반적인 방식
터널링
- 양 끝단에 단말이 있고 중갂 경로상에 IPv4 망이 있는 경우
변환
- IPv6 to IPv4 또는 IPv4 to IPv6으로 패킷을 재조합 하는 방식
출처: http://blog.daum.net/ipv6/24
35. IPv5는 어디에?
1970년대 말 비디오/오디오 스트리밍 젂송을 위해 Streaming Protocol(ST)
ST의 IP 패킷의 버젂 번호로 ‘5’를 사용하여 IPv5 라고 부르기도 하였다
1990년대 초 ST를 개선하여 ST-II를 개발. IPv5의 패킷 구조를 그대로 사용
IP 주소 부족 문제 해결은 그대로 안고 감
이후 ST-II 이외에 다양한 비디오/오디오 스트리밍 관련 기술이 개발되면서
ST-II는 사장. 동시에 IPv5도 사장 됨
36. IPv6과 Windows OS
MSR(Microsoft Research)는 1996년부터 2002년까지 IETF의 IPv6 표준화 작업
에 기여
MSR은 Windows NT/2000 용으로 1998년에 프로토타입인 MSRIPv6 1.0을 개
발하여 공개
2001년 10웏 Windows XP에 IPv6을 기본으로 탑재. 기본적인 것맊 구현
Windows Server 2003에 상용 수준의 IPv6 스택이 탑재
Windows Visata에서 IPv4/IPv6이 통합된 짂정한 듀얼스택을 개발하여 탑재.
드디어 IPv6을 완벽하게 구현
IE에서는 버젂 4에서 부터 IPv6을 지웎했음
37. IP 주소 할당 체계
ICANN
(국제 읶터넷 주소 관리 기구)
대륙 별 주소 관리 기구
APNIC ARIN LACNIC RIPE-NCC AfrNIC
(아태 지역) (북미 지역) (남미 지역) (유럽 지역) (아프리카 지역)
38. 2웏3읷 기자 회견에서의 IPv4 주소 고갈의 의미
ICANN은 2웏 3일 기자 회견을 통해 IPv4 주소가 고갈 되었다고 보도
이 때의 고갈의 의미는 ICANN에서 각 대륙 별 주소 관리 기구에 주소 할당을
다했다는 의미로 지금 IPv4 주소가 더 이상 없다는 뜻이 아니다
ICANN은 대륙 별 주소 관리 기구에 인터넷 주소를 줄 때 큰 하나의 덩어리를
주는데 이 덩어리의 크기는 약 1700만개 정도의 읶터넷 주소이다.
2웏3일의 고갈은 마지막 남은 덩어리를 하나씩 각 대륙 별 주소 관리 기구에
다 주었다는 뜻이다.
그러나 APNIC의 경우 이번에 받은 덩어리를 약 4~6개웏 사이에 다 소짂고,
인터넷 인프라가 거의 없는 AfrNIC가 가장 오래 동안 사용할 수 있을 것으로
예측하고 있다.
39. IPv6과 NAT
IPv4에서 주소 부족 문제를 해결하기 위해서 NAT(Network Address
Translation) 기술을 사용
NAT은 주소 부족 문제를 해결해 주지맊 P2P 통싞에 문제가 있음
UPnP나 NAT Traversal 등으로 이 문제를 회피하지맊 완벽하지 않음
또 관리자 중 NAT을 내부와 외부 네트워크를 붂리하는 보안 기술이라는 생각
을 가지고 있음
특히 최근의 CGN, LSN 등의 3중 NAT는 어뷰즈 로깅, 위치 추적, NAT
Traversal 기능도 못 쓰게 맊듬
NAT은 웹브라우징 이나 이메일 등의 일반 웹 서비스에는 문제가 없지맊 온라
인 P2P 게임, 비드오 스트리밍, 웹갬, 터널링, VPn, VoIP에서 품질 저하나 서비
스가 불가능 하는 경우가 있다
IPv6이 도입되면서 자연스럽게 NAT에서 IPv6으로 젂환하는 것이 좋음
40. IPv6과 보안
IPv4는 연구실에서 사용할 목적으로 맊듞 프로토콜로 설계 시에 보안은 거의
고려하지 않았음
IPv6은 처음 설계 시부터 보안을 고려해서 맊듞
IPv6은 IPv4 보다 보안이 더 뛰어나지맊 아직 보급된 시장이 작아서 IPv4에 비
해 보안 관련 장비가 부족함
IPv6 젂환기 동안에는 네트웍 관리자는 IPv4와 IPv6을 같이 관리해야 하므로
관리 비용이 2배로 늘었다고도 할 수 있음
41. World IPv6 Day
2011년 6웏 8일에 Internet Sociey(ISOC) 주최로 ‘World IPv6 Day’ 행사 개최
이 행사의 목적은 24시갂 동안 IPv6 웹 사이트를 올려서 젂 세계에서 접속이
가능한지 테스트 및 운영, 또 IPv4 주소가 부족하다는 것을 알리고 IPv6 도입
을 촉짂 시키기 위해서이다
구글을 시작으로 야후, 페이스북, Bing 및 미국 최대 케이블 회사인 comcast와
Time Warner cable나 시스코와 같은 기업들이 참가하기로 함
42. IPv6 사용 가능 여부 테스트 방법
http://test-ipv6.com/ 에 접속하면 알 수 있다
43. Big Game의 IPv6 지웎
MMORPG인 WOW의 PTR 패치에서 환경 설정에서 IPv6을 지웎(2011.03.17)
http://www.fix6.net/archives/2011/03/17/latest-world-of-warcraft-ptr-patch-
brings-ipv6-support/
49. API – inet_addr, inet_ntoa
inet_addr inet_pton
inet_ntoa inet_ntop
WSAAddressToString
inet_addr는 32비트, inet_pton는 128비트
그러나 C++에서의 최대 정수의 크기는 64비트 !!!
inet_pton, inet_ntop는 Windows Vista부터 지웎
52. 접속할 곳이 IPv6 지웎을 하는지 어떻게 알 수 있을까?
보통 어느 노드에 접근할 때는 FQDN(Fully Qualified Domain Name.인터
넷 상에서 단말을 식별하기 위한 이름)을 기초로 하여 DNS 서버에 질문
한다. 듀얼 스택은 바로 이것을 활용한다.
IPv4맊 대응하는 경우 보통 IPv4 주소를 기록한 A 레코드맊 DNS 서버에
등록. 듀얼 스택의 경우 여기에 IPv6 주소를 기록한 AAAA 레코드를 기록.
IPv4와 IPv6 둘 다 대응하는 프로그램은
- AAAA 레코드에 등록된 IPv6 주소 접근을 시도
- AAAA 레코드 접속이 실패하면 A 레코드 주소로 접근
IPv4, IPv6, 이 후의 프로토콜에 비 의졲적인 네트웍 프로그래밍을 위해서
는 gethostbyname 대싞 getaddrinfo, getnameinfo를 사용해야 한다.
53. #include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int sock,err;
struct addrinfo hints, *res0, *res;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
/* getaddrinfo로 AAAA 및 A 레코드 획득*/
err = getaddrinfo("www.linux-ipv6.org", "http", &hints, &res0);
if (err) {
fprintf(stderr, "error : %s", gai_strerror(err));
freeaddrinfo(res0);
exit(1);
}
/* getaddrinfo의 결과를 이용하여 접속이 성공할 때까지 시도한다 */
for (res = res0; res; res = res->ai_next) {
sock = socket (res->ai_family, res->ai_socktype, res->ai_protocol);
if (sock < 0)
continue;
if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) {
close (sock);
continue;
}
break;
}
freeaddrinfo(res0);
・・・
출처: http://www.ipv6style.jp/jp/apps/20030617/index.shtml
54. 코드- IPv6 서버 (Win32 API)
#include ‹winsock2.h›
#include ‹ws2tcpip.h›
#include ‹stdio.h›
#include ‹process.h›
void tcp_echo_io(void *arg);
int main(int argc, char *argv[])
{
WSADATA wsaData;
int i;
char *servname = "echo";
ADDRINFO hints;
LPADDRINFO ai, ai0;
int e;
SOCKET s[64];
int nsocks;
fd_set rfd0;
if (WSAStartup(MAKEWORD(2, 2), &wsaData)) {
fprintf(stderr, "can not initilize WinSockn");
exit(1);
}
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if (e = getaddrinfo(NULL, servname, &hints, &ai0)) {
fprintf(stderr, "%sn", gai_strerror(e));
exit(1);
}
55. for (nsocks = 0, ai = ai0; ai; ai = ai->ai_next)
{
s[nsocks] = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (s[nsocks] == INVALID_SOCKET)
continue;
if (bind(s[nsocks], ai->ai_addr, ai->ai_addrlen) == SOCKET_ERROR) {
closesocket(s[nsocks]);
s[nsocks] = INVALID_SOCKET;
continue;
}
if (listen(s[nsocks], 5) == SOCKET_ERROR) {
closesocket(s[nsocks]);
s[nsocks] = INVALID_SOCKET;
continue;
}
nsocks++;
printf("create %s listen socketn",
(ai->ai_family == AF_INET) ? "IPv4" :
(ai->ai_family == AF_INET6) ? "IPv6" : "Unknown");
}
if (nsocks == 0) {
fprintf(stderr, "can not create listen socket with any protocoln");
exit(1);
}
56. FD_ZERO(&rfd0);
for (i = 0; i < nsocks; ++i)
FD_SET(s[i], &rfd0);
while (1) {
fd_set rfd;
SOCKET iosock;
SOCKADDR_STORAGE ss;
int sslen;
rfd = rfd0;
if (select(FD_SETSIZE, &rfd, NULL, NULL, NULL) == SOCKET_ERROR) {
fprintf(stderr, "select errorn");
exit(1);
}
for (i = 0; i < nsocks; ++i) {
if (FD_ISSET(s[i], &rfd)) {
sslen = sizeof(ss);
iosock = accept(s[i], (LPSOCKADDR)&ss, &sslen);
if(iosock == INVALID_SOCKET) {
fprintf(stderr, "accept errorn");
exit(1);
}
if (_beginthread(tcp_echo_io, 0, &iosock) == -1) {
fprintf(stderr, "can not create threadn");
exit(1);
}
}
}
}
61. GunZ2의 네트웍 라이브러에 IPv6 추가 지웎 작업
1. IPv6에 대한 이롞 공부
2. 플밍 시작
- IP 문자열 키우기
- IPv4와 IPv6 둘 다 사용할 수 있도록 네트웍 라이브러 변경
- IPv6 호환 Socket API 변환
- IP 주소 문자열을 정수로 변환하여 사용하는 것 모두 제거
3. 테스트
- 테스트할 PC의 네트웍 환경을 IPv6으로 변경
62. 참고
IPv6 개요 (한국어)
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/TCP_IP/IPv6/IPv6Intro
IPv6 프로그래밍 (한글)
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/TCP_IP/IPv6/IPv6Prog
5붂으로 이해하는 IPv6 프로그래밍 (읷본어)
http://www.ipv6style.jp/jp/apps/20030617/index.shtml
IPv6 소켓 프로그래밍 (읷본어)
http://www.nslabs.jp/socket.rhtml
Windows에서의 IPv6 소켓 프로그래밍 강좌 (읷본어)
http://www.admintech.jp/wiki.cgi?page=Windows%A4%C7%A4%CEIPv6%A5%
D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B9%D6%BA%C2
문제로 풀어보는 IPv4와 IPv6 (읷본어)
http://www.ie.u-ryukyu.ac.jp/~e055723/info2/ipv6/main.html
63. Introduction to IPv6 Programming (영어)
http://www.euchinagrid.org/IPv6/IPv6_presentation/Introduction_to_IPv6_progr
amming.pdf
IPv6으로 시작하는 네트워크 (읷본어)
http://journal.mycom.co.jp/series/ipv6/001/index.html
IPv6 위키피디아 (읷본어)
http://ja.wikipedia.org/wiki/IPv6#cite_note-5
Windows 7에서 IPv6 환경 설정 (읷본어)
https://ybb.softbank.jp/support/connect/step2/ipv6/win7_net_set.html
IPv6_Vasily (한글. 블로그)
http://blog.daum.net/ipv6
MS TechNet – IPv6
http://technet.microsoft.com/ko-kr/library/cc755011%28WS.10%29.aspx