라이브러리
프로그래밍언어, 각종코드, 관련동향, 논문 등의 저장소
IPv6 Tutorial
제목 : IPv6 Tutorial

작성자 : 유리바다(seaofglass@korea.com)

작성일 : 2004.5.14




- 필요성

이 글을 작성하는 현재 우리는 Internet Protocol의 버전은 4.0을 사용하고 있습니다.

하지만 폭발적인 인터넷의 보급으로 인하여 할당할 수 있는 IP는 거의 고갈되었고

이에 대한 해결책으로 Inetnet Protocol version 6.0이 나오게 된 것입니다.

이것을 IPng(Next Generation - 차세대 IP)라고도 합니다.

128bit를 사용하기 때문에(IPv4는 32bit) 앞으로는 통신기능을 가지고 있는 기기들이 있다면

IPv6를 사용하여서 각각에 대한 ip 주소를 할당하게 될 것입니다.

Mobile IP에 대한 내용은 이 문서에서 다루지 않으며 정보가 필요하신 분들은 RFC 2002를 참조해 주시기 바랍니다.



- 표준화 중점

확장 주소 기능(Expanded Addressing Capabilities)

헤더 포맷 간소화(Header Format Simplification)

확장/선택사항 추가 기능(Improved Support for Extensions and Options)

Flow Labeling 기능

인증/사생활 보호 기능(Authentication and Privacy Capabilities)



- 새로운 기능

QoS(Quality Of Service)

	IPv6 header의 Priority와 Flow Label 필드를 통해 구현됩니다.

NDP(Neighbor Discovery)
	
	네트워크 환경 검색(ND)은 인접한 노드들 사이의 관계를 결정하는 메시지 및 프로세스 세트입니다.
	
	ARP, ICMPv4와 같은 IPv4 프로토콜을 대체하며 추가의 기능을 제공합니다.
	
	ND는 ICMPv6를 메세지를 사용합니다.

Auto Configuration

	이것은 사용자의 수동설정 없이 라우터나 호스트 자체에서 주소를 설정하는 기능입니다.
	

- IPv6 Header


기본헤더

	Version(4bit) : 각 IP 데이터그램의 첫 번째 네 비트는 IP의 버전을 포함합니다.
	
	
	Priority(4bit) : 데이터그램의 우선순위를 정하여 0에서 15 사이의 값으로 발신측에서 전송하는
	패킷에 대한 요구되는 우선순위 값을 지정한다. 예를들어 "실시간" 패킷이 일정한 속도로 전송되는데
	사용됩니다. 실시간 응용프로그램과 같은 비집중 제어식 통신의 경우 가장 낮은 우선순위값 8은 송신자가 혼잡상황에서
	가장 쉽게 폐기할 수 있는 패킷에 대해 사용됩니다. 그리고 가장 높은 우선순위값 15는 송신자가 폐기할 수 없는
	패킷에 대해 사용됩니다. 집중 제어식 통신의 IPv6의 우선 순위 필드 값은 다음과 같습니다.
	
	0		특별한 특징이 없는 통신
	1		'filter' 통신 (ex : netnews)
	2		무인 데이터 전송(ex : e-mail)
	3		(예약됨)
	4		유인 대량 전송(ex : FTP, NFS)
	5		(예약됨)
	6		대화형 통신(ex : Telnet, X)
	7		인터넷 제어 통신(ex: 경로 설정 프로토콜, SNMP)
	
	
	Flow label(24bit) : 이 패킷이 원본과 대상 사이의 특정 패킷 시퀀스에 속하므로 중간 IPv6 라우터에 의한 특수처리가
	필요하다는 것을 나타냅니다. flow label은 실시간 데이터처럼 서비스 연결에 대한 기본 이상의 품질을 제공하기 위해
	사용됩니다. 기본 라우터를 처리할 때 흐름 레이블은 0으로 설정되고, 원본과 대상 사이에는 0이 아닌 별도의 
	flow label로 구별되는 여러 흐름이 있을 수 있습니다. 예를들어 서버에서 멀티미디어 스테이션으로 비디오나 오디오를
	운반하는 데이터그램은 서로 다른 flow label을 가질 수 있는데 이것은 동일한 flow label 값을 네트워크 전체에 걸쳐서
	똑같은 방법으로 처리할 수 있게 해 줍니다.
	
	
	Payload Length(16bit) : payload 길이는 IP 기본 헤더 그 자체보다는 적은 IP 데이터그램의 전체 길이를 바이트 단위로
	나타냅니다. 이 필드는 16비트 크기이므로, 보통 IP 데이터그램을 65535바이트나 더 적은 크기로 제한합니다.
	hop-by-hop옵션 확장 헤더의 점보그램(jumbo payload) 옵션을 사용하여 더 큰 데이터그램을 보낼 수 있습니다.
	이 옵션이 사용되면 payload 길이는 0 으로 설정됩니다.
	
	
	Next Header(8bit) : next header 필드는 어떤 헤더가 데이터그램에서 기본 IP 헤더 다음에 오는지를 나타낸다.
	그것은 옵션적 IP 헤더나 상위 계층 프로토콜을 나타낼 수 있습니다. IP Next Header 값은 다음과 같습니다.
	
	0			Hop-by-hop Options Header
	1	ICMP		Internet Control Message Protocol	(IPv4)
	2	IGMP		Internet Group Management Protocol	(IPv4)
	3	GGP		Gateway Protocol
	4	IP		Ineternet Protocol			(IPv4 캡슐화)
	5	ST		Stream
	6	TCP		Transmission Control Protocol
	17	UDP		User Datagaram Protocol
	43	RH		Routing Header			(IPv6)
	44	FH		Fragment Header			(IPv6)
	45	IDRP		Interdomain Routing Protocol
	46			Resource Reservation Protocol
	50			Encapsulating Security Payload
	51	AH		Authentication Header		(IPv6)
	52	ESP		Encryption Security Payload		(IPv6)
	58	ICMP		Internet Control Message Protocol
	59	NULL		No Next Header			(IPv6)
	60			Destination Options Header
	80	ISO-IP		CLNP
	
	
	Hop Limit(8bit) : 이 필드는 얼마나 멀리 데이터그램이 여행할 것인지 결정합니다. 호스트가 데이터그램을 생성할 때
	
	호스트는 hop limit를 어떤 초기치로 설정합니다. 홉 한계의 초기값은 송신자가 설정합니다. 데이터그램이 네트워크상의 
	
	라우터를 통해 여행할 때, 각각의 라우터는 이 필드를 1씩 감소시킵니다. 만약 데이터그램의 hop limit가 그것의 
	
	목적지에 도착하기 전에 0이 되면 데이터그램은 폐기됩니다. 홉 한계는 IPv4의 TTL 필드와 비슷하지만 TTL 필드는
	
	초 단위로 재는 데 비하여 IPv6의 홉 한계는 홉 단위로 잰다는 차이가 있습니다.
	
	
	Source Address(128bit) 
	
	
	Destination Address(128bit)


확장헤더

	추가적인 정보를 경로를 따라 목적지나 중간 시스템으로 전송하기 위해 사용됩니다.
	기본 헤더 다음에 확장헤더가 위치하게 됩니다.
	
	
	
	경로 설정 헤더 : IPv6 경로 설정 확장 헤더는 IPv6 데이터그램이 목적지로 가는 도중에 거쳐가야 하는 하나 이상의
	중간 라우터를 지정하기 위해 사용됩니다. 이 헤더는 IPv4에도 사용되는 출발지 경로 설정 옵션의 개념을 구현하기
	위해서 사용됩니다. IPv6 경로 설정 확장 헤더는 IPv6 기본 헤더으 Next Header 값 43으로 식별합니다.
	각 필드는 다음과 같은 의미를 지닙니다.
		
		* Next Header : 이것은 경로 설정 헤더의 바로 다음에 오는 헤더의 유형을 식별하는 8비트 선택자입니다.
		그것은 IPv6 확장 헤더 체인의 일부인 또 다른 IPv6 확장 헤더 또는 상위 계층 운반 프로토콜일 수 있다.
		
		* Hdr Ext Len : 이것은 첫 번째 8옥텟을 제외하고 8옥텟 단위의 경로 설정 헤더 길이를 나타내는 8비트
		부호없는 정수 값입니다.
		
		* 경로 설정 유형 : 이 필드는 특정 경로 설정 헤더 변형의 8비트 식별자이며 현재 IPv6 사양(RFC 1833)에는
		경로 설정 유형 0이 정의되어 있습니다. 다른 값을 사용하면 경로설정헤더 형식의 대안을 식별할 수 있습니다.
		
		* 남은 세그먼트 : 이 필드는 8비트 부호 없는 정수값이며 나머지 경로 세그먼트 수를 지정합니다.
		나머지 경로 설정 세그먼트 수는 최종 목적지에 도달하기 전까지 아직 거쳐가야 하는 것으로 명시적으로
		열거된 중간 노드의 수 입니다.
		
		* 유형별 데이터 : 이것은 경로 설정 유형 필드에서 그 형식이 결정되는 가변 길이 필드입니다. 필드의 길이는
		전체 경로 설정 헤더 길이가 8옥텟의 정수 배수입니다.
		
		| Next Header (8bit)  | Hdr Ext Len (8bit)  | 경로 설정 유형 (8bit)  | 남은 세그먼트 (8bit) |
		|		유 	형	별	데	이 	터 (32bit)		|
		
					< IPv6 경로 설정 확장 헤더 >
		
		
		어떤 노드가 익식할 수 없는 경로 설정 유형 값을 가진 경로 설정 헤더를 발견하면 나은 세그먼트 필드의 값에
		따라 패킷을 처리합니다. 남은 세그먼트가 0이면 노드는 경로 설정 헤더를 무시하고 패킷의 다음 헤더를 계속
		처리합니다. 다음 헤더는 경로 설정 헤더의 Next Header 필드로 식별됩니다.
		
		남은 세그먼트가 0이 아니면 노드는 패킷을 삭제하고 ICMP 매개변수 문제 코드 0 메세지를 출발지 주소 필드에
		나타나고 인식할 수 없는 경로 설정 유형 값을 가르키는 패킷의 목적지에 보내야 합니다.
		
		IPv6 유형 0 경로 설정 확장 헤더의 필드는 다음과 같은 의미를 가지고 있습니다.
		
		* Next Header : 경로 설정 헤더 바로 다음에 오는 헤더의 유형을 식별하는 8비트 선택자
		
		* Hdr Ext Len : 8bit 부호 없는 정수. 이 필드는 처음 8옥텟을 제외하고 8 옥텟 단위의 경로 설정 헤더 길이며
		유형 0 경로 설정 헤더의 Hdr Ext Len은 헤더의 주소 수의 2배와 같으며 46보다 작거나 같은 짝수입니다.
		
		* 남은 세그먼트 : 8bit 부호 없는 정수이며 이 필드는 남은 경로 세그먼트 수이며 그 최대값은 경로 유형 0을
		나타내는 23입니다.
		
		* 예약 : 송신할 때 0으로 초기화되고 수신할 때 무시되는 8비트 에약 필드입니다.
		
		* 정밀/일반 비트 맵 : 0부터 23까지 왼쪽에서 오른쪽으로 나열되는 24비트 비트맵이며 각 비트는 경로의
		세그먼트에 해당하고 다음 목적지 주소가 앞 주소의 인접장치인지 여부를 나타낸다. 비트값 1은 정밀 출발지
		경로 설정을 의미합니다. 다시말해서 다음 목적지 주소는 인접 장치이어야 합니다. 비트값 0은 일반 출발지
		경로 설정을 나타냅니다. 즉 다음 목적지 주소가 인접 장치일 필요가 없습니다.
		
		* 주소[1..n] :  1부터 n 까지 128비트 주소의 벡터
		
		| Next Header (8bit) | Hdr Ext Len (8bit)  | 경로 설정 유형=0 (8bit) | 남은 세그먼트(8bit) |
		|	예약 (8bit) |	정밀 / 일반 비트 맵 ( 32 bit)				|
		|				주소[1]					|
		|				주소[2]					|
		|				주소[n]					|
		
				<경로 설정 유형 0, IPv6 경로 설정 헤더 >

	
	
	
	단편 헤더 : IPv4와 달리 IPv6의 단편화는 출발지 노드에서만 수행되며 패킷의 전달 경로에 있는 라우터에서는 수행되지
	않습니다. IPv6 출발지 노드는 목적지에 대한 MTU 크기를 알고 있습니다. IPv6 노드는 'RFC 1191 Path MTU Discovery'에
	정의된 대로 경로 MTU 발견을 구현하여 목적지에 대한 MTU를 발견합니다.
	
	IPv6 출발지는 단편 헤더를 삽입하여 그 목적지에 대한 경로 MTU에 들어가는 것보다 더 큰 패킷을 보낸다. 단편 헤더는
	바로 앞 헤더의 Next Header 값 44로 식별됩니다.
	
	| Next Header(8bit)	 | 예약 (8bit) | 단편 오프셋 (13bit) |  Res (2bit) |  M (1bit) |
	|			식	별	(32bit)			|
	
			<IPv6 단편 확장 헤더>
			
	단편헤더의 필드는 다음과 같은 의미를 가집니다.
		
		* Next Header : 경로 설정 헤더 바로 다음에 오는 헤더의 유형을 식별하는 8bit 선택자입니다.
		이 헤더는 IPv6 확장 헤더 체인의 일부인 또 다른 IPv6확장 헤더 또는 상위 계층 운반 프로토콜일 수 있습니다.
		
		* 예약 : 송신할 때 0으로 초기화되고 수신할 때는 무시되는 8bit 예약 필드입니다.
		
		* 단편오프셋 : 이 헤더 다음에 오는 데이터의 8 옥텟단위 오프셋을 나타내는 13비트 부호없는 정수입니다.
		오프셋은 원본 패킷의 단편 부분의 시작 위치를 기준으로 따지게 됩니다.
		
		* Res : 송신할 때 0으로 초기화되고 수신할 때 무시되는 2비트 예약 필드입니다.
		
		* M 플래그 : 이 필드는 단편이 더 있으면 1, 마지막 단편이면 0으로 설정됩니다.
		
		* 식별 : 32비트 필드이며 단편화 될 모든 패킷에 대하여 출발지 모드는 식별 값을 생성하게 됩니다.
		식별값은 같은 출발지 주소와 목적지 필드를 가지고 최근에 보낸 다른 단편화 패킷의 것과 달라야 합니다.
		
	
	

	목적지 옵션 헤더 : 목적지 옵션 헤더는 패킷의 목적지 노드에서만 심사해야 하는 선택적 정보를 운반하기 위해 사용됩니다.
	목적지 옵션 헤더는 바로 앞 헤더의 Next Header 값 60으로 식별됩니다.
	
	| Next Header(8bit) | Hdr Ext Len(8bit) | Option |
	
	목적지 옵션 헤더의 필드는 다음과 같은 의미를 가집니다.
	
		* Next Header : 경로 설정 헤더 바로 다음에 오는 헤더의 유형을 식별하는 8비트 선택자 입니다.
		
		* Hdr Ext Len : 8비트 부호 없는 정수. 이 필드느 처음 8옥텟을 제외하고 경로 설정 헤더의 8옥텟 단위 길이입니다.
		
		* 옵션 : 가변 길이 필드이며 전체 목적지 옵션 헤더 길이는 8옥텟의 정수 배수입니다.
		
		옵션값은 Hop-by-Hop 과 목적지 옵션 헤더에 사용됩니다. 옵션 값은 Type-Length-Value(TLV)형식을 사용하는
		기호입니다. 옵션 유형은 1옥텟이고 옵션 길이는 1옥텟이며 바로 다음에 오는 옵션 데이터의 크기를 가지고 있습니다.
		옵션 유형 식별자는 최대 유의 2비트가 IPv6노드의 처리에서 옵션 유형을 인식하지 못한 경우 취해야 하는 조치를 
		지정합니다. 
		
		00		이 옵션을 무시하고 헤더의 처리를 게속함
		
		01		패킷을 삭제
		
		10		패킷 삭제. 패킷의 목적지 주소가 다른 다중 전송 주소였는지 여부와 관계없이, 인식할 수 없는
				옵션 유형을 가리키는 패킷의 목적지 주소에 ICMP 매개변수 문제 코드 2 메세지를 보냅니다.
		
		11		패킷 삭제. 패킷의 목적지 주소가 다중 전송 주소가 아니었으면, 패킷의 목적지 주소에 ICMP
				매개변수 문제 코드 2 메세지를 보내고 인식할 수 없는 옵션 유형을 가르킵니다.
				
		옵션 유형의 세 번째 최대 유의 비트는 그 옵션의 데이터가 패킷의 최종 목적지에 대한 en 경로를 바꿀 수 있는지
		여부를 지정합니다. 세 번째 최대 유의 비트는 의미는 다음과 같습니다.
		
		0 옵션 데이터는 en 경로를 바꾸지 못한다.
		1 옵션 데이터는 en 경로를 바꿀 수 있다.
		
		Pad1과 PadN 등 2개의 채워넣기 옵션은 차후의 옵션을 정렬해야 할 때 헤더를 채워넣어서 8옥텟을 배수의
		길이로 만들어야 할 때 사용됩니다. Pad1 옵션은 헤더의 옵션 영역에 1옥텟을 채워넣기 위해서 사용합니다.
		채워넣을 것이 1옥텟보다 많으면 PadN 옵션을 사용해야 합니다.
		
		Pad1 옵션(정렬 요구 사항 : 없음)
		
		| 0 (8bit) |
		
		/* Pad1 옵션의 형식은 특별한 경우로서 길이와 값 필드가 없다. */
		
		PadN 옵션 (정렬 요구 사항 : 없음)
		
		| 1 (8bit) | 옵션 데이터 길이(8bit) | 옵션 데이터 |
	
	
	

	No Next Header : IPv6 헤더나 확장 헤더의 Next Header 필드에 값 59가 사용되면 그것은 그 헤더 다음에 아무것도 
	없다는 뜻입니다. IPv6의 Payload Length 필드가 그 Next Header 필드에 59를 간직한 헤더의 끝을 넘어선 옥텟을 나타내면
	그 옥텟은 무시되고 패킷이 발송되어도 변경되지 않고 전달됩니다.
	


	Hop-by-Hop Option Header : 패킷의 전달 경로를 따라 모든 중간 노드에 필요한 선택적 정보를 운반하기 위해 쓰입니다.
	이 헤더는 Next Header의 값이 0인 것을 보고 식별하며 다음과 같은 형식을 가지고 있습니다.
	
	| Next Header (8bit) | Hdr Ext Len (8bit) | Option |
	
	< IPv6 Hop-by-Hop Options 헤더 >
	
		각 필드가 지니는 의미는 다음과 같습니다.
		
		* Next Header : Routing 헤더 바로 다음에 오는 헤더의 유형을 식별하는 8비트 선택자
		
		* Hdr Ext Len : 8bit unsigned int. 이것은 처음 8 옥텟을 제외하고 Routing 헤더의 8옥텟 단위 길이를 가집니다.
		
		* Option : 전체 Destination Options 헤더 길이가 8옥텟의 정수 배수인 가변 길이의 필드입니다.
		옵션 값은 Type-Length-Value(TLV)형식을 사용하는 부호입니다.
		
		
	Pad1과 PadN 옵션 외에 Hop-by-Hop 옵션과 함께 Jumbo Payload 옵션이 정의 되어 있습니다.
	
	
	
	Jumbo Payload 옵션에 대한 정렬 요구사항은 4n+2입니다. 이 정렬은 옵션의 시작이 헤더의 시작으로부터 4옥텟의 배수에
	2를 더한 것이어야 한다는 뜻입니다. Jumbo Payload 옵션은 65,535 옥텟보다 긴 페이로드로 IPv6 패킷을 보내기 위해
	사용됩니다. Jumbo Payload Length 필드는 32비트 폭으로 되어 있으며 IPv6 헤더는 제외하고 Hop-by-Hop Options 헤더는
	포함한 옥텟 단위의 패킷 길이를 나타냅니다. Jumbo Payload 길이는 65,535보다 길어야 하며 작거나 같을 경우 ICMP
	Parameter Problem 메세지 Code 0이 패킷의 출발지에 보내집니다. 이 메세지는 유효하지 않은 Jumbo Payload Length 필드의
	상위 옥텟을 가르킵니다. 또한 IPv6 헤더의 Payload Length 필드는 Jumbo Payload 옵션을 운반하는 모든 패킷에서 0으로
	설정해야 합니다. 유효한 Jumbo Payload 옵션이 있고 IPv6 Payload Length 필드가 0이 아닌 상태에서 패킷을 받으면
	ICMP Parameter Problem 메세지 Code 0이 패킷의 출발지에 보내집니다. 이 메세지는 Jumbo Payload 옵션의 Option
	Type 필드르 가르킵니다.
	
	

	인증헤더 : 이 헤더는 IP 데이터그램의 강력한 무결성과 인증을 제공하기 위해서 사용됩니다.
	IPv6인증 헤더는 IP 데이터그램에 인증정보를 추가하여 보안을 제공합니다. 이 인증정보는 IPv6 데이터그램에 인증정보를
	추가하여 제공합니다. 이 인증정보는 IPv6 데이터그램이 통과하는 동안에 변하지 않는 모든 필드를 사용하여 계산됩니다.
	홉 개수, 활동 시간 동안에 변해야 할 필드나 옵션은 인증 데이터의 계산에서 0으로 간주합니다. 인증헤더 바로 앞에 있는
	IPv6 헤더는 그 Next Header 필드에 값 51을 간직하고 있습니다. 인증 헤더는 패킷의 변경 여부를 탐지하기 위해 사용됩니다.
	하지만 그것은 패킷을 암호화하기 위한 기능을 가지고 있지는 않습니다. 패킷 암호화는 IPv6 Encrypted Security Payload
	헤더에서 처리됩니다.
	
	|  Next Header(8bit)  | 길이 (8bit)  | 예약 (16bit) |
	| 	보안 매개변수 색인 (32 bit)		|
	|	인증 데이터 (임의의 32비트 워드 수)	|
	
		< IPv6 인증 헤더 >

	인증 헤더 필드는 다음과 같은 의미를 가지고 있습니다.
		
		* Next Header : 이 필드는 Routing 헤더 바로 다음의 헤더 유형을 식별하는 8bit 선택자입니다.
		
		* 길이 : 이 필드는 8bit 폭을 가지고 있으며 인증 데이터 필드의 길이를 지정합니다. 그 최소값은 0워드이며
		인증 알고리즘이 사용되지 않는 특별한 경우에만 사용합니다.
		
		* 예약 : 이 필드는 16비트 폭을 가지고 있으며 미래에 사용하기 위해서 예약되어있습니다. 그것은 송신자가
		모두 0으로 설정해야 합니다. 이 값은 인증 데이터 계산에 포함되지만 수신자 쪽에서는 그것을 무시합니다.
		
		* 보안 매개변수 색인 : 이것은 데이터그램의 보안 연관성을 식별하는 32비트 임의 값입니다. 보안 매개변수
		색인 값 0은 보안 연관성이 없는 것을 나타내기 위해 예약되어 있습니다. 범위 1부터 255까지의 보안 매개변수
		색인 값들은 Internet Assigned Numbers Authority (IANA)에서 미래에 사용되도록 예약되어 있습니다.
		예약된 SPI 값은 특별히 할당된 SPI 값의 사용을 RFC에 공개적으로 지정한 경우를 제외하고는 IANA에서
		할당해 주지 않습니다.
		
		* 인증 데이터 : 이것은 가변 길이 필드이지만 언제나 32비트 워드의 자연수이며 이 패킷에 대해 계산된 인증 데이터를
		간직하고 있습니다.


	암호화 보안 페이로드 헤더 : IPv6 암호화 보안 페이로드(ESP)는 IP 데이터그램의 무결성과 비밀성을 제공하기 위해 사용됩니다.
	거절금지(nonrepudiation)와 통신량 분석으로 부터의 보호는 ESP에서 제공되지 않습니다. IPv6 인증 헤더는 특정 인증
	알고리즘에 사용할 경우에만 거절 금지를 제공할 수 있습니다. IP 인증 헤더는 인증을 제공하기 위해 ESP와 함께 사용할 수 있습니다.
	IP 인증 헤더는 인증을 위해 설계되었고 ESP 헤더는 비밀성을 위해 설계되었으므로 비밀성 없이 무결성과 인증이 필요한
	응용프로그램은 ESP 대신 인증 헤더를 사용해야 합니다. ESP는 보호할 데이터를 암호화하고 암호화한 데이터를 캡슐화
	보안 페이로드의 데이터 부분에 넣습니다. 이 메커니즘을 사용하면 운반 계층 세그먼트 또는 전체 IP 데이터그램을 암호화
	할 수 있습니다. ESP는 다음 두 가지 작동 모드를 가지고 있습니다.
	
	터널 모드 ESP
	운반 모드 ESP

	터널 모드 ESP에서, 원본 IP 데이터그램은 캡슐화 보안 페이로드의 암호화된 부분에 놓이고 전체 ESP 프레임은 암호화되지
	않은 IP헤더를 가진 데이터그램에 놓입니다. 암호화되지 않은 IP헤더의 정보는 원본의 안전한 데이터그램을 목적지에 경로
	설정하기 위해 사용됩니다. 암호화되지 않은 IP 경로 설정 헤더는 IP헤더와 캡슐화 보안 페이로드 사이에 포함될 수 있습니다.
	
	운반모드 ESP에서, ESP헤더 IP 데이터그램의 운반 계층 프로토콜 바로 앞에 삽입됩니다. 이 모드에서는 암호화된 IP헤더나
	IP옵션이 없으므로 대역폭이 절약됩니다.
	
	| IP 헤더 | 다른 IP 헤더들 | ESP 헤더 | 암호화된 데이터 |
	|------암호화 않됨------|---------암호화됨---------|
	
	< ESP 헤더의 레이아웃 >
	
	
	
	| 보안 페이로드 식별자(SPI) 32 bit	|
	| 불투명 전송 데이터, 가변길이	|
	
	< ESP 헤더의 형식 >


	ESP는 IP헤더 뒤와 마지막 운반 계층 프로토콜 헤더 앞의 어디에나 나타날 수 있습니다. ESP 헤더 바로 앞에 오는 헤더는
	그 Next Header 필드에 값 50가지고 있어야 합니다. ESP는 암호화 되지 않은 헤더와 그 뒤에 오는 암호화된 데이터로 구성될 수
	있습니다. 암호화된 데이터는 보호된 ESP헤더 필드와 보호된 사용자 데이터 둘을 다 포함하고 있으며 후자는 전체 IP 데이터그램
	또는 운반계층 프로토콜입니다.
	
	암호화와 인증 알고리즘 및 그것들과 관련된 불투명 전송 데이터의 정밀한 형식을 변형(transform)이라 합니다. ESP형식은
	새로운 또는 추가되는 암호법 알고리즘을 미래에 새 변형을 지원하도록 설계되었습니다.
	
	SPI 필드는 이 데이터그램의 보안 연관성을 식별하는 32bit 임의의 값입니다. 보안 연관성이 설정되어 있지 않으면 SPI 필드의
	값은 0으로 설정됩니다. SPI는 다른 보안 프로토콜에 사용되는 보안 연관성 식별자(SAID)와 비슷합니다. 0부터 255까지의
	SPI값은 IANA에서 미래에 사용하기 위해 예약해 놓았습니다. SPI는 유일하게 전송과 무관한 필수 필드입니다.


- 주소 표기법

이진수로 표시한 아래의 IPv6를 보고 생각해 봅시다.

01011000 00000000 00000000 11000101

11100011 11000011 11110001 10101010

01001000 11100011 11011001 00100111

11010100 10010101 10101010 11111110

위의 IPv6 주소는 다음과 같습니다.

88.0.0.192.227.195.241.170.72.227.217.39.212.149.170.254

점 십진 표기법을 사용하였을 경우 간결하지 않음을 알 수 있습니다.

그래서 설계자들은 콜론 16진 표기법을 사용하기로 결정하였습니다.

16진 값은 콜론(:) 문자로 분리된 16bit로 표기합니다.

위의 IPv6 주소를 16진 표기법으로 다시 나타내어 보겠습니다.

5800:00C3:E3C3:F1AA:48E3:D923:D495:AAFE

훨씬 더 효율적으로 표기할 수 있음을 알 수 있습니다.

이것을 더욱 효율적으로 표기하기 위해서 세 가지 약식 표기 기법을 사용할 수 있습니다.

첫 째는 앞부분의 0을 생략할 수 있도록 한 것입니다.

다음과 같은 IPv6 주소가 있다고 합시다.

48A6:0000:0000:0000:0000:0DA3:003F:0001

0을 제거하여 표현하면 다음과 같이 됩니다.

48A6:0:0:0:0:DA3:3F:1

두 번째는 0 압축을 사용하는 방법입니다.

반복되는 0의 문자열을 겹콜론(::)으로 처리하는 방법입니다.

48A6:0:0:0:0:DA3:3F:1

0을 제거한 위 주소를 겹콜론(::)을 사용하여 표현하면 다음과 같이 됩니다.

48A6::DA3:3F:1

하지만 겹콜론을 한 번 이상 사용하면 해석이 모호해지므로 잘못된 것입니다.

마지막으로  겹콜론을 접두어나 접미어로 사용하는 방법입니다.

170.1.1.1의 IPv6 표시는 다음과 같습니다.

0:0:0:0:0:0:AA01:101

이것은 다음과 같이 표현이 가능합니다.

::AA01:101


IPv4와 IPv6 노드의 혼합환경을 취급하는 형식은 다음과 같습니다.

X:X:X:X:X:X:d.d.d.d

X -> hex(16진), d -> decimal(10진)


0:0:0:0:0:0:210.12.34.28

위 주소는 ::210.12.34.28로 표현이 가능하며 IPv4 네트워크 인프라 구조를 경유해서 다른 IPv6 호스트와 통신하는 경우에

표현되는 방식입니다.


0:0:0:0:0:FFFF:141.83.25.192

위 주소는 ::FFFF:141.83.25.192로 표현 가능하며 IPv4만을 지원하는 호스트와 통신하는 IPv6 호스트의 표현방식입니다.
	
	
	
- 주소 종류

IPv6는 3가지 Address 유형에 관한 규칙을 가지고 있습니다.



 유니캐스트(Unicast)
 
 단일 인터페이스를 지정하며 Unicast 주소로 보내진 패킷은 그 어드레스에 해당하는 인터페이스로 전달됩니다.
 
 IPv6에서 Unicast 주소를 할당하는 형태는 여러가지가 있습니다. 그 종류로는 global provider based Unicast 주소,
 
 geographic based Unicast 주소, NSAP 주소, IPX hierarchical 주소, site-local-use 주소, link-local-use 주소,
 
 IPv4-capable host 주소 등이 있으며 앞으로 여러 형태가 추가 될 것 입니다. Unicast 주소는 내부 구조를 갖는 주소와
 
 내부 구조를 갖지 않는 주소로 나눠집니다. 단순한 IPv6노드는 주소의 내부 구조를 인식하지 못하므로 내부 구조가 없는
 
 주소가 사용되고 IPv6 노드의 성능이 좋아질수록 보다 복잡한 내부 구조를 인식하게 됩니다.
 
| node address(128bit) |

 <내부 구조가 없는 Unicast 주소>

| subnet prefix(n bits) | interface ID(128-n bits) |

<단순한 내부 구조를 갖는 Unicat 주소>
 
 Unicast의 예를 들면 다음과 같은 것들이 있습니다.
 
LAN이나 IEEE 802 MAC 주소를 갖는 환경에서의 일반적인 unicast 주소의 구조는 다음과 같습니다.

여기서 48비트 인터페이스 ID는 IEEE 802 MAC 주소를 지시합니다.

| Subscriber prefix(n bits) | Subnet ID (80 - n bits) | Interface ID (48bits) |

<MAC 주소를 갖는 Unicast 구조>

또 하나의 Unicast주소 구조의 예로 subnet ID가 area ID와 subnet ID 로 분리된 경우입니다.

이러한 구조는 내부 계층 구조에 부가적인 계층이 요구되는 곳에서 유용합니다.

| Subscriber prefix(s Bits) | area ID (n bits) | subnet ID (m bits) | Interface ID (128 - n - m bits) |

 <area ID와 subnet ID로 분리된 Unicast 주소 구조의 예>
 
 
 
 
 애니캐스트(Anycast)
 
 여러 노드들에 속한 인터페이스의 집합을 지정하며 Anycast 주소로 보내진 패킷은 그 어드레스에 해당하는
 
 인터페이스들 중 하나의 인터페이스에 전달됩니다. 전달되는 인터페이스는 라우팅 프로토콜의 거리 측정에
 
 의해 같은 Anycast 주소를 갖는 인터페이스 중에서 가장 거리가 짧은 인터페이스에 전달됩니다.
 
 Anycast 주소는 Unicast 주소공간으로 부터 할당되어졌고 Unicast 주소구조를 갖습니다. 따라서 Anycast주소는
 
 구문적으로 Unicast주소와 구별할 수 없습니다. IPv6 anycast주소는 다음의 제한이 있습니다. Anycast주소는
 
 IPv6 패킷의 소스 주소로 사용될 수 없으며 IPv6 호스트에 할당 될 수 없고 단지 IPv6 라우터에만 할당될 수 있습니다.
 
 | 0 subnet prefix (n bits) | 000000000000000000 (128 - n bits) |
 
 <Subnet-Router anycast 주소 구조>
 
 subnet prefix는 특정 링크를 명시합니다. 이러한 anycast 주소는 interface 인식자가 0으로 설정된 unicast 주소와 
 
 구문적으로 동일한 것입니다. Subnet-Router anycast주소로 전송되는 패킷은 subnet상의 하나의 라우터에 전달될
 
 것이며, 모든 라우터는 Subnet-Router anycast 주소 전송을 제공해야 합니다.
 
 
 


 멀티캐스트(Multicast)
 
 여러 노드들에 속한 인터페이스의 집합을 지정하며 Multicast 주소로 보내진 패킷은 그 어드레스에 해당하는
 
 모든 인터페이스에 전달된다. IPv6에는 broadcast 주소는 없고, 그 기능은 Multicast 주소로 대체됩니다.
 
 Muticast주소는 주소의 상위 Octet이 FF(11111111)값을 가짐으로써 unicast주소와 구별됩니다.
 
 | 11111111 (8bits) | flag (4bits) | scop (4bits) | group ID (112bits) |
 <Multicast 주소 구조>
 
 Flag의 상위 3개의 bit는 예약되었으며 0으로 초기화되어 있고 하위 1bit(T)는 다음의 위미를 가집니다.
 
 T = 0 : 영구히 할당받은 Multicast 주소임을 지시합니다. ("well-known")
 T = 1 : 일시적으로 할당받은 Multicast 주소임을 지시합니다. ("transient")
 
 scope는 4bit multicast scope 값이며 multicast 그룹의 범위를 제한하는데 사용며 다음과 같은 값을 갖습니다.
 
 0	예약됨
 1	node-local scope
 2	link-local scope
 3	(할당되어 있지 않음)
 4	(할당되어 있지 않음)
 5	site-local scope
 6	(할당되어 있지 않음)
 7	(할당되어 있지 않음)
 8	organization-local scope
 9	(할당되어 있지 않음)
 A	(할당되어 있지 않음)
 B	community-local scope
 C	(할당되어 있지 않음)
 D	(할당되어 있지 않음)
 E	global scope
 F	예약됨
 
 group ID는 주어진 범위(scope) 내에서 영구적이거나 일시적인 Multicast 그룹을 지정하게 됩니다.
 "영구적"이란 것은 할당받은 multicast의 주소가 범위와 무관하다는 뜻이며 "일시적"이란 것은 할당받은 Multicast의 주소가
 단지 주어진 범위 내에서만 의미가 있다는 것을 말합니다. Multicast 주소는 IPv6 데이터그램의 소스 주소로 사용될 수 없습니다.
 



- 이 Tutorial을 만드는데 사용된 문서

TCP/IP 완전정복		KARANJIT S. SIYAN     	성안당

Network Programming 	신동규, 신동일		ITC
  Comments,     Trackbacks