RFC4291
(https://tools.ietf.org/html/rfc4291)을 기준으로 작성되었음을 밝힙니다. 당연히 본 문서보다 해당 표준을 보시는게 더 권장할만 합니다. 그리고
RFC5952
(https://tools.ietf.org/html/rfc5952)도 함께 보시는 것을 권장합니다.
IPv6 Tunnel Broker 구축 메뉴얼
(https://vsix.kr/frt/biz/bbs/layout01/selectBoardArticle.do?bbsId=BBSMSTR_000000000022&nttId=20019)을 통해서 IPv6 환경을 먼저 준비하시고 본 문서를 읽으시면서 실습하신다면 보다 쉽게 이해가 가능할 것으로 예상됩니다.

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Description | |
| 4bit Version | 8bit Traffic class | 20bit Flow labal | ↑↓8 bytes | ↑↓40 bytes(IPv6 header size) | |||||||||||||||||||||||||||||
| 16-bit Payload length | 8-bit Next header | 8bit Hop limit | |||||||||||||||||||||||||||||||
| 128bit Source address | ↑↓32 bytes | ||||||||||||||||||||||||||||||||
| 128bit Destination address | |||||||||||||||||||||||||||||||||
| nexthdr | hdrlen | extension-header | ↑↓IPv6 extension header size | ↑↓Variable size | |||||||||||||||||||||||||||||
| ~ | |||||||||||||||||||||||||||||||||
| nexthdr | hdrlen | extension-header | |||||||||||||||||||||||||||||||
| ~ | |||||||||||||||||||||||||||||||||
| extension-header ... | |||||||||||||||||||||||||||||||||
| Upper layer (ICMP/UDP/TCP/SCTP/AH/ESP/IPCOMP/...) | ↑↓Upper layer protocol | ||||||||||||||||||||||||||||||||
RFC6437 - IPv6 Flow Label Specification
(https://tools.ietf.org/html/rfc6437)
RFC6294 - Survey of Proposed Use Cases for the IPv6 Flow Label
(https://tools.ietf.org/html/rfc6294)
https://docs.oracle.com/cd/E19683-01/816-5250/chapter1-26/index.html
http://www.tta.or.kr/data/ttas_view.jsp?where=15925&pk_num=TTAE.IF-RFC6437&nowSu=1
RFC4007 - IPv6 Scoped Address Architecture
(https://tools.ietf.org/html/rfc4007))
| 주소유형 | 프리픽스 | 관련 C macro 또는 전역상수 | 비고(참고) |
| 미지정(Unspecified) | ::/128 | IN6_IS_ADDR_UNSPECIFIED(a), IN6ADDR_ANY_INIT, struct in6_addr in6addr_any | RFC4291 (https://tools.ietf.org/html/rfc4291) |
| 루프백(Lookback) | ::1/128 | IN6_IS_ADDR_LOOPBACK(a), IN6ADDR_LOOPBACK_INIT, struct in6_addr in6addr_loopback | RFC4291 (https://tools.ietf.org/html/rfc4291) |
| IPv4 호환 IPv6 주소(IPv4-compatible IPv6 address) | ::<IPv4-address>/96, Ex) ::123.123.123.123 | IN6_IS_ADDR_V4COMPAT(a) | deprecated by RFC4291 (https://tools.ietf.org/html/rfc4291) |
| IPv4 맵핑 IPv6 주소(IPv4-mapped IPv6 address) | ::ffff:<IPv4-address>/96, Ex) ::ffff:123.123.123.123 | IN6_IS_ADDR_V4MAPPED(a) | RFC4291 (https://tools.ietf.org/html/rfc4291) |
| Well Known Prefix (IPv4-IPv6 Translation) | 64:ff9b::/96 | RFC6052 (https://tools.ietf.org/html/rfc6052) | |
| Well Known Prefix (Local-Use IPv4-IPv6 Translation) | 64:ff9b:1::/48 | RFC8215 (https://tools.ietf.org/html/rfc8215) | |
| Discard-Only Address Block | 100::/64 | RFC6666 (https://tools.ietf.org/html/rfc6666) | |
| IETF Protocol Assignments | 2001::/23 | RFC2928 (https://tools.ietf.org/html/rfc2928) | |
| TEREDO | 2001::/32 | RFC4380 (https://tools.ietf.org/html/rfc4380), RFC8190 (https://tools.ietf.org/html/rfc8190) | |
| Port Control Protocol Anycast | 2001:1::1/128 | RFC7723 (https://tools.ietf.org/html/rfc7723) | |
| Traversal Using Relays around NAT Anycast | 2001:1::2/128 | RFC8155 (https://tools.ietf.org/html/rfc8155) | |
| Benchmarking | 2001:2::/48 | RFC5180 (https://tools.ietf.org/html/rfc5180), RFC Errata 1752 (http://www.rfc-editor.org/errata_search.php?eid=1752) | |
| AMT | 2001:3::/32 | RFC7450 (https://tools.ietf.org/html/rfc7450) | |
| AS112-v6 | 2001:4:112::/48 | RFC7535 (https://tools.ietf.org/html/rfc7535) | |
| Deprecated (previously ORCHID) | 2001:10::/28 | RFC4843 (https://tools.ietf.org/html/rfc4843) | |
| ORCHIDv2 | 2001:20::/28 | RFC7343 (https://tools.ietf.org/html/rfc7343) | |
| 문서에만 사용할 목적의 전역 유니캐스트(Global unicast for document only) | 2001:db8::/32 | RFC3849 (https://tools.ietf.org/html/rfc3849) | |
| 6to4 | 2002::/16 | RFC3056 (https://tools.ietf.org/html/rfc3056) | |
| Direct Delegation AS112 Service | 2620:4f:8000::/48 | RFC7534 (https://tools.ietf.org/html/rfc7534) | |
| 로컬 유니캐스트(Local unicast, Unique-Local) | fc00::/7 | RFC4193 (https://tools.ietf.org/html/rfc4193), RFC8190 (https://tools.ietf.org/html/rfc8190) | |
| 링크로컬 유니캐스트(Link-Local unicast) | fe80::/10 | IN6_IS_ADDR_LINKLOCAL(a) | RFC3513 (https://tools.ietf.org/html/rfc3513), RFC4291 (https://tools.ietf.org/html/rfc4291) |
| 사이트로컬 유니캐스트(Site-Local unicast) | fec0::/10 | IN6_IS_ADDR_SITELOCAL(a) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC3879 - Deprecating Site Local Addresses (https://tools.ietf.org/html/rfc3879) |
| 멀티캐스트(Multicast) | ff00::/8 | IN6_IS_ADDR_MULTICAST(a), IN6_IS_ADDR_MC_NODELOCAL(a), IN6_IS_ADDR_MC_LINKLOCAL(a), IN6_IS_ADDR_MC_SITELOCAL(a), IN6_IS_ADDR_MC_ORGLOCAL(a), IN6_IS_ADDR_MC_GLOBAL(a) | RFC3513 (https://tools.ietf.org/html/rfc3513), RFC4291 (https://tools.ietf.org/html/rfc4291) |
| 전역 유니캐스트(Global unicast) | 위의 유형을 제외한 나머지 모든 비트 | RFC4291 (https://tools.ietf.org/html/rfc4291) |
| 7bits | 1bit | 40bits | 16bits | 64bits |
| 1111 110 (fc00::/7) | L | Global ID | Subnet ID | Interface ID |
RFC4193 Section-3.2
(https://tools.ietf.org/html/rfc4193#section-3.2)을 참고
RFC4193 Section-3.2
(https://tools.ietf.org/html/rfc4193#section-3.2) 참고)
| 10bits | 54bits | 64bits |
| 1111 1110 10 (fe80::/10) | 0 | Interface ID |
| MAC Address (EUI-48) | |||||
| OUI (Organizationally Unique Identifier) | NIC(Network Interface Controller) Specific | ||||
| 0110 1100 | 0110 0010 | 0110 1101 | 1010 1001 | 0111 1110 | 1101 0000 |
| (6C) | (62) | (6D) | (A9) | (7E) | (D0) |
| 상위 24bits | Mark 16bits (FF FE) | 하위 24bits | |||||
| OUI (Organizationally Unique Identifier) | NIC(Network Interface Controller) Specific | ||||||
| 0110 1100 | 0110 0010 | 0110 1101 | 1111 1111 | 1111 1110 | 1010 1001 | 0111 1110 | 1101 0000 |
| (6C) | (62) | (6D) | (FF) | (FE) | (A9) | (7E) | (D0) |
RFC4291 IP Version 6 Addressing Architecture
(https://tools.ietf.org/html/rfc4291))
| EUI-64 | |||||||
| 상위 24bits | Mark 16bits (FF FE) | 하위 24bits | |||||
| 상위(MSB) 7번째 bit set | |||||||
| 0110 1110 | 0110 0010 | 0110 1101 | 1111 1111 | 1111 1110 | 1010 1001 | 0111 1110 | 1101 0000 |
| (6E) | (62) | (6D) | (FF) | (FE) | (A9) | (7E) | (D0) |
| IPv6 Link-local address by EUI-64 | |||||||||||||||
| Prefix (fe80::/10) | 0 | 상위 24bits | Mark 16bits (FF FE) | 하위 24bits | |||||||||||
| 1111 1110 | 1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000 | 0110 1110 | 0110 0010 | 0110 1101 | 1111 1111 | 1111 1110 | 1010 1001 | 0111 1110 | 1101 0000 |
| (FE) | (80) | (00) | (00) | (00) | (00) | (00) | (00) | (6E) | (62) | (6D) | (FF) | (FE) | (A9) | (7E) | (D0) |
| 10bits | 54bits | 64bits |
| 1111 1110 11 (fec0::/10) | Subnet ID | Interface ID |
RFC4291 Section-2.6 Anycast Addresses 참고
(https://tools.ietf.org/html/rfc4291#section-2.6)
RFC3306
(https://tools.ietf.org/html/rfc3306))
| 8bits | 4bits | 4bits | 112bits |
| 1111 1111 | flags | scope | Group ID |
RFC3306
(https://tools.ietf.org/html/rfc3306))
| 8bits | 4bits | 4bits | 8bits | 8bits | 64bits | 32bits |
| 1111 1111 | flags | scope | reserved(MUST be zero) | plen | network prefix | group ID |
| 0(항상 zero) | R( RFC3956 (https://tools.ietf.org/html/rfc3956)) | P( RFC3306 (https://tools.ietf.org/html/rfc3306)) | T( RFC4291 (https://tools.ietf.org/html/rfc4291)) |
| 값 | 설명 | 비고(참고) |
| 0 | 예약 (reserved) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 1 | 로컬 범위의 인터페이스 (interface-local scope) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 2 | 로컬 범위의 링크 (link-local scope) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 3 | 예약 (reserved) / 로컬 범위의 서브넷 (subnet) / Realm-Local scope | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 4 | 로컬 범위의 관리 (admin-local scope) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 5 | 로컬 범위의 사이트 (site-local scope) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 6 | 할당되지 않음 (unassigned) | |
| 7 | 할당되지 않음 (unassigned) | |
| 8 | 로컬 범위의 조직 (organization-local scope) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 9 | 할당되지 않음 (unassigned) | |
| 10 | 할당되지 않음 (unassigned) | |
| 11 | 할당되지 않음 (unassigned) | |
| 12 | 할당되지 않음 (unassigned) | |
| 13 | 할당되지 않음 (unassigned) | |
| 14 | 글로벌 범위 (global scope) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
| 15 | 예약 (reserved) | RFC4291 (https://tools.ietf.org/html/rfc4291), RFC7346 (https://tools.ietf.org/html/rfc7346) |
getaddrinfo.tar.gz (1.44 KB)
iec_sockaddr_t s_remote, s_bind;
iec_socket_t s_socket;
iec_const_string_t s_remote_address;
iec_socket_t s_socket;
s_remote_address = "http://test.minzkn.com:80/index.php";
/* 먼저 remote 주소의 sockaddr을 설정한다. (node는 uri를 허용한다) */
if(iec_xapi_resolve_sockaddr(AF_UNSPEC, (iec_sockaddr_t *)(&s_remote), s_remote_address, iec_xapi_int_const(80), def_iec_true) == def_iec_true) {
/* 설정된 s_remote의 family를 bind address family 로 결정한다. (node는 uri를 허용하지 않는다) */
if(iec_xapi_resolve_sockaddr(s_remote.ss.ss_family, (iec_sockaddr_t *)(&s_bind), def_iec_null_string, iec_xapi_int_const(0), def_iec_false) != def_iec_error) {
/* 결정된 bind address family에 맞는 소켓을 연다. */
s_socket = iec_xapi_socket(s_bind.ss.ss_family, SOCK_STREAM, IPPROTO_TCP);
if(s_socket != def_iec_invalid_socket) {
if(iec_xapi_bind(s_socket, (iec_sockaddr_t *)(&s_bind)) == def_iec_true) {
if(iec_xapi_connect(s_socket, (iec_sockaddr_t *)(&s_remote), s_timeout) == def_iec_true) {
/* connected */
}
}
s_socket = iec_xapi_closesocket(s_socket);
}
}
}
iec_const_string_t s_bind_address;
iec_int_t s_bind_port;
iec_sockaddr_t s_sockaddr_bind, s_sockaddr_accept;
iec_socket_t s_listen_socket, s_accept_socket;
iec_socklen_t s_socklen;
if(iec_xapi_resolve_sockaddr(AF_UNSPEC, (iec_sockaddr_t *)(&s_sockaddr_bind), s_bind_address, s_bind_port, def_iec_false) == def_iec_true) {
s_listen_socket = iec_xapi_socket(s_sockaddr_bind.ss_family, SOCK_STREAM, IPPROTO_TCP);
if(s_listen_socket != def_iec_invalid_socket) {
if(iec_xapi_bind(s_listen_socket, (iec_sockaddr_t *)(&s_sockaddr_bind), (iec_socklen_t)sizeof(s_sockaddr_bind)) == def_iec_true) {
if(iec_xapi_listen(s_listen_socket, def_iec_max_backlog) == def_iec_true) {
for(; /* exit condition */ ;) {
s_socklen = (iec_socklen_t)sizeof(s_sockaddr_accept);
s_accept_socket = iec_xapi_accept(s_listen_socket, (iec_sockaddr_t *)(&s_sockaddr_accept), (iec_socklen_t *)(&s_socklen), 0/* timeout */);
if(s_accept_socket != def_iec_invalid_socket) {
if(s_sockaddr_accept.ss_family == AF_INET) {
/* IPv4 accept process */
}
else if(s_sockaddr_accept.ss_family == AF_INET6) {
/* IPv6 accept process */
}
else {
/* Unspec accept process */
}
iec_xapi_closesocket(s_accept_socket);
}
else {
iec_xapi_load_balance();
}
}
}
}
iec_xapi_closesocket(s_listen_socket);
}
}
struct ip_mreq
{
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_interface; /* local IP address of interface */
};
setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (struct ip_mreq *)(&r), sizeof(struct ip_mreq));
struct ipv6_mreq {
/* IPv6 multicast address of group */
struct in6_addr ipv6mr_multiaddr;
/* local IPv6 address of interface */
int ipv6mr_ifindex;
};
setsockopt(socket, IPPROTO_IPV6, IPV6_JOIN_GROUP, (struct ipv6_mreq *)(&r), sizeof(struct ipv6_mreq));
int s_ttl; /* unicast ttl */ setsockopt(socket, IPPROTO_IP, IP_TTL, &s_ttl, sizeof(s_ttl)); /* multicast ttl */ setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, &s_ttl, sizeof(s_ttl));
int s_hops; /* unicast ttl */ setsockopt(socket, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &s_hops, sizeof(s_hops)); /* multicast ttl */ setsockopt(socket, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &s_hops, sizeof(s_hops));
EPRT<space><d><net-prt><d><net-addr><d><tcp-port><d> 여기서 <d>는 구분자로써 '|'을 사용하는것으로 되어 있습니다. <net-prt>는 '1'은 IPv4를 의미하고 '2'는 IPv6를 의미합니다. EPSV<space><net-prt> 229 Entering Extended Passive Mode (|||<tcp-port>|) EPSV에 대한 응답형식은 EPRT와 유사합니다. EPSV의 <net-prt>에는 '1', '2', 'ALL'이 사용될수 있다고 합니다. 하지만 실험결과 'ALL'은 제대로 동작하지 않는 경우가 많았습니다.
/*
s_ipv6hdr : IPv6 Header에 대한 pointer 입력
s_nexthdr_ptr : nexthdr 가 명시된 부분에 대한 pointer 입력
반환 : IPv6 extension header 의 크기 반환
*/
size_t hwport_ipv6_extension_header_size(struct ipv6hdr *s_ipv6hdr, u8 *s_nexthdr_ptr)
{
size_t s_offset = (size_t)0; /* payload start offset == 40 */
u8 *s_u8_ptr = (u8 *)(&s_ipv6hdr[1]); /* payload start entry */
u8 s_nexthdr = s_ipv6hdr->nexthdr;
struct ipv6_opt_hdr *s_exthdr;
size_t s_exthdr_size;
while(ipv6_ext_hdr(s_nexthdr)) {
if(s_nexthdr == NEXTHDR_NONE) {
break;
}
if(unlikely((s_offset + sizeof(struct ipv6_opt_hdr)) > ((size_t)s_ipv6hdr->payload_len))) {
/* invalid extension header coding */
s_offset = (size_t)s_ipv6hdr->payload_len;
s_nexthdr = NEXTHDR_NONE;
break;
}
s_exthdr = (struct ipv6_opt_hdr *)(&s_u8_ptr[s_offset]);
if(s_nexthdr == NEXTHDR_FRAGMENT) {
s_exthdr_size = (size_t)8u;
}
else if(s_nexthdr == NEXTHDR_AUTH) { /* AH header */
s_exthdr_size = (s_exthdr->hdrlen + 2) << 2;
}
else {
s_exthdr_size = ipv6_optlen(s_exthdr);
}
if(unlikely((s_offset + s_exthdr_size) > ((size_t)s_ipv6hdr->payload_len))) {
/* invalid extension header size coding */
s_offset = (size_t)s_ipv6hdr->payload_len;
s_nexthdr = NEXTHDR_NONE;
break;
}
s_nexthdr = s_exthdr->nexthdr;
s_offset += s_exthdr_size;
}
if(s_nexthdr_ptr != ((u8 *)0)) {
*s_nexthdr_ptr = s_nexthdr;
}
return(s_offset);
}
/*
s_ipv6hdr : IPv6 Header에 대한 pointer 입력
s_transport_size_ptr : Transport layer 의 크기를 반환 (IPv6 Header 및 IPv6 extension header를 제외한 IPv6 payload 의 크기)
s_nexthdr_ptr : nexthdr 가 명시된 부분에 대한 pointer 입력
반환 : Transport layer에 대한 pointer 반환
*/
void *hwport_ipv6_transport_entry(struct ipv6hdr *s_ipv6hdr, size_t *s_transport_size_ptr, u8 *s_nexthdr_ptr)
{
u8 *s_u8_ptr = (u8 *)s_ipv6hdr;
size_t s_header_size = sizeof(struct ipv6hdr);
size_t s_ext_header_size = hwport_ipv6_extension_header_size(s_ipv6hdr, s_nexthdr_ptr);
if(s_transport_size_ptr != ((size_t *)0)) {
*s_transport_size_ptr = ((size_t)s_ipv6hdr->payload_len) - s_ext_header_size;
}
return((void *)(&s_u8_ptr[s_header_size + s_ext_header_size]));
}
/* 사용예 */
struct sk_buff *skb; /* 인입된 패킷을 담고 있는 skbuff pointer */
size_t s_ipv6h_size = sizeof(struct ipv6hdr); /* IPv6 Header 크기 (IPv6 extension header는 제외) */
struct ipv6hdr *s_ipv6hdr = ip_hdr(skb); /* skb로부터 IPv4/IPv6 Header 위치 pointer */
u8 s_nexthdr; /* IPv6 externsion header 를 건너뛰고 마지막 nexthdr */
size_t s_ipv6h_ext_size; /* IPv6 extension header 크기 */
void *s_transport_entry; /* Transport layer entry pointer */
size_t s_transport_size; /* Transport layer 크기 */
ASSERT(s_ipv6hdr->version == 6);
s_ipv6h_ext_size = hwport_ipv6_extension_header_size(s_ipv6hdr, (u8 *)(&s_nexthdr));
s_transport_entry = hwport_ipv6_transport_entry(s_ipv6hdr, (size_t *)(&s_transport_size), (u8 *)(&s_nexthdr));
if(s_nexthdr == IPPROTO_TCP) {
struct tcphdr *s_tcphdr = (struct tcphdr *)s_transport_entry;
}
else if(s_nexthdr == IPPROTO_UDP) {
}
else {
...
}
Ethernet frame
(https://en.wikipedia.org/wiki/Ethernet_frame)
https://en.wikipedia.org/wiki/Address_Resolution_Protocol
https://en.wikipedia.org/wiki/Reverse_Address_Resolution_Protocol
https://www.juniper.net/documentation/en_US/junose10.3/information-products/topic-collections/swconfig-ip-ipv6/id-37225a.html
http://www.cisco.com/en/US/technologies/tk648/tk872/technologies_white_paper0900aecd8054d37d.html
RFC791 - INTERNET PROTOCOL / DARPA INTERNET PROGRAM / PROTOCOL SPECIFICATION
(https://tools.ietf.org/rfc/rfc791.txt)
RFC826 - An Ethernet Address Resolution Protocol or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware
(https://tools.ietf.org/html/rfc826)
RFC903 - A Reverse Address Resolution Protocol
(https://tools.ietf.org/html/rfc903)
RFC1112 - Host Extensions for IP Multicasting
(https://tools.ietf.org/rfc/rfc1112.txt)
RFC1466 - Guidelines for Management of IP Address Space
(https://tools.ietf.org/rfc/rfc1466.txt)
RFC1770 - ASSIGNED NUMBERS
(https://tools.ietf.org/rfc/rfc1700.txt)
RFC1884 - IP Version 6 Addressing Architecture
(https://tools.ietf.org/rfc/rfc1884.txt)
RFC2365 - Administratively Scoped IP Multicast
(https://tools.ietf.org/rfc/rfc2365.txt)
RFC2373 - IP Version 6 Addressing Architecture
(https://tools.ietf.org/html/rfc2373)
RFC2390 - Inverse Address Resolution Protocol
(https://tools.ietf.org/html/rfc2390)
RFC2460 - Internet Protocol, Version 6 (IPv6) Specification
(https://tools.ietf.org/rfc/rfc2460.txt)
RFC2928 - Initial IPv6 Sub-TLA ID Assignments
(https://tools.ietf.org/html/rfc2928)
RFC3041 - Privacy Extensions for Stateless Address Autoconfiguration in IPv6
(https://tools.ietf.org/html/rfc3041)
RFC3053 - IPv6 Tunnel Broker
(https://tools.ietf.org/html/rfc3053)
RFC3056 - Connection of IPv6 Domains via IPv4 Clouds
(https://tools.ietf.org/html/rfc3056)
RFC3306 - Unicast-Prefix-based IPv6 Multicast Addresses
(https://tools.ietf.org/html/rfc3306)
RFC3344 - IP Mobility Support for IPv4
(https://tools.ietf.org/rfc/rfc3344.txt)
RFC3484 - Default Address Selection for Internet Protocol version 6 (IPv6)
(https://tools.ietf.org/html/rfc3484)
RFC3513 - Internet Protocol Version 6 (IPv6) Addressing Architecture
(https://tools.ietf.org/html/rfc3513)
RFC3633 - IPv6 Prefix Options for Dynamic Host Configuration Protocol (DHCP) version 6
(https://tools.ietf.org/html/rfc3633)
RFC3849 - IPv6 Address Prefix Reserved for Documentation
(https://tools.ietf.org/html/rfc3849)
RFC3879 - Deprecating Site Local Addresses
(https://tools.ietf.org/html/rfc3879)
RFC3927 - Dynamic Configuration of IPv4 Link-Local Addresses
(https://tools.ietf.org/html/rfc3927)
RFC3956 - Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast Address
(https://tools.ietf.org/html/rfc3956)
RFC4007 - IPv6 Scoped Address Architecture
(https://tools.ietf.org/html/rfc4007)
RFC4122 - A Universally Unique IDentifier (UUID) URN Namespace
(https://tools.ietf.org/html/rfc4122)
RFC4193 - Unique Local IPv6 Unicast Addresses
(https://tools.ietf.org/html/rfc4193)
RFC4291 - IP Version 6 Addressing Architecture
(https://tools.ietf.org/html/rfc4291)
RFC4380 - Teredo: Tunneling IPv6 over UDP through Network Address Translations (NATs)
(https://tools.ietf.org/html/rfc4380)
RFC4607 - Source-Specific Multicast for IP
(https://tools.ietf.org/html/rfc4607)
RFC4843 - An IPv6 Prefix for Overlay Routable Cryptographic Hash Identifiers (ORCHID)
(https://tools.ietf.org/html/rfc4843)
RFC4941 - Privacy Extensions for Stateless Address Autoconfiguration in IPv6
(https://tools.ietf.org/html/rfc4941)
RFC5180 - IPv6 Benchmarking Methodology for Network Interconnect Devices
(https://tools.ietf.org/html/rfc5180)
RFC5214 - Intra-Site Automatic Tunnel Addressing Protocol (ISATAP)
(https://tools.ietf.org/html/rfc5214)
RFC5227 - IPv4 Address Conflict Detection
(https://tools.ietf.org/html/rfc5227)
RFC5342 - IANA Considerations and IETF Protocol Usage for IEEE 802 Parameters
(https://tools.ietf.org/html/rfc5342)
RFC5942 - IPv6 Subnet Model: The Relationship between Links and Subnet Prefixes
(https://tools.ietf.org/html/rfc5942)
RFC5952 - A Recommendation for IPv6 Address Text Representation
(https://tools.ietf.org/html/rfc5952)
RFC6052 - IPv6 Addressing of IPv4/IPv6 Translators
(https://tools.ietf.org/html/rfc6052)
RFC6294 - Survey of Proposed Use Cases for the IPv6 Flow Label
(https://tools.ietf.org/html/rfc6294)
RFC6603 - Prefix Exclude Option for DHCPv6-based Prefix Delegation
(https://tools.ietf.org/html/rfc6603)
RFC6437 - IPv6 Flow Label Specification
(https://tools.ietf.org/html/rfc6437)
RFC6666 - A Discard Prefix for IPv6
(https://tools.ietf.org/html/rfc6666)
RFC6724 - Default Address Selection for Internet Protocol Version 6 (IPv6)
(https://tools.ietf.org/html/rfc6724)
RFC7136 - Significance of IPv6 Interface Identifiers
(https://tools.ietf.org/html/rfc7136)
RFC7343 - An IPv6 Prefix for Overlay Routable Cryptographic Hash Identifiers Version 2 (ORCHIDv2)
(https://tools.ietf.org/html/rfc7343)
RFC7346 - IPv6 Multicast Address Scopes
(https://tools.ietf.org/html/rfc7346)
RFC7371 - Updates to the IPv6 Multicast Addressing Architecture
(https://tools.ietf.org/html/rfc7371)
RFC7450 - Automatic Multicast Tunneling
(https://tools.ietf.org/html/rfc7450)
RFC7534 - AS112 Nameserver Operations
(https://tools.ietf.org/html/rfc7534)
RFC7535 - AS112 Redirection Using DNAME
(https://tools.ietf.org/html/rfc7535)
RFC7723 - Port Control Protocol (PCP) Anycast Addresses
(https://tools.ietf.org/html/rfc7723)
RFC7954 - Locator/ID Separation Protocol (LISP) Endpoint Identifier (EID) Block
(https://tools.ietf.org/html/rfc7954)
RFC8064 - Recommendation on Stable IPv6 Interface Identifiers
(https://tools.ietf.org/html/rfc8064)
RFC8155 - Traversal Using Relays around NAT (TURN) Server Auto Discovery
(https://tools.ietf.org/html/rfc8155)
RFC8190 - Updates to the Special-Purpose IP Address Registries
(https://tools.ietf.org/html/rfc8190)
RFC8215 - Local-Use IPv4/IPv6 Translation Prefix
(https://tools.ietf.org/html/rfc8215)
IANA IPv4 Address Space Registry
(https://www.ietf.org/assignments/ipv4-address-space/ipv4-address-space.txt)
Internet Protocol Version 6 Address Space
(https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml)
IANA IPv4 Special-Purpose Address Registry
(https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml)
IANA IPv6 Special-Purpose Address Registry
(https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml)
IPv6 Global Unicast Address Assignments
(https://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xhtml)
https://developers.cloudflare.com/1.1.1.1/setting-up-1.1.1.1/
Interface ID, Interface Identifier
(http://www.ktword.co.kr/abbr_view.php?m_temp1=5421)
The ipv6calc Homepage
(https://www.deepspace6.net/projects/ipv6calc.html)
Understanding IPv6 EUI-64 Bit Address
(https://supportforums.cisco.com/t5/network-infrastructure-documents/understanding-ipv6-eui-64-bit-address/ta-p/3116953)
Organizationally unique identifier
(https://en.wikipedia.org/wiki/Organizationally_unique_identifier)
Guidelines for Use of Extended Unique Identifier (EUI), Organizationally Unique Identifier (OUI), and Company ID (CID)
(http://standards.ieee.org/develop/regauth/tut/eui.pdf)
https://vsix.kr/frt/biz/bbs/layout01/selectBoardArticle.do?bbsId=BBSMSTR_000000000022&nttId=20019
https://www.cisco.com/en/US/technologies/tk648/tk872/technologies_white_paper0900aecd8054d37d.html
http://www.ipv6forum.com/
https://yurmagccie.wordpress.com/2016/11/05/ipv6-part-1/
https://m.blog.naver.com/PostView.nhn?blogId=ree31206&logNo=44158348&proxyReferer=https%3A%2F%2Fwww.google.com%2F
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6/configuration/15-2mt/ip6-15-2mt-book/ip6-uni-routing.html
https://vincent.bernat.ch/en/blog/2017-ipv6-route-lookup-linux
https://etherealmind.com/ipv6-which-address-multiple-ipv6-address-default-address-selection/
http://biplane.com.au/blog/?p=22
http://egloos.zum.com/dstein/v/2324104
https://blog.bravi.org/?p=506
http://computer-outlines.over-blog.com/article-static-ipv6-networking-part-10-address-selection-rfc-6724-119131859.html
https://mirrors.deepspace6.net/Linux+IPv6-HOWTO/resolver.html
https://vsix.kr/frt/biz/contents/0000000008/getContents.do
Service Name and Transport Protocol Port Number Registry
(https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml)
https://m.blog.naver.com/PostView.nhn?blogId=nackji80&logNo=220525751654&proxyReferer=https%3A%2F%2Fwww.google.com%2F
http://www.ktword.co.kr/abbr_view.php?m_temp1=5236
Multicast Routing Protocol, Multicast Routing
(http://www.ktword.co.kr/word/abbr_view.php?m_temp1=3606)
IPv6 Multicast Address IPv6 멀티캐스트 주소
(http://www.ktword.co.kr/abbr_view.php?m_temp1=5575)
IPv6 기반 SSM 기술 동향!
(https://ettrends.etri.re.kr/ettrends/82/0905000429/18-4_047_055.pdf)
MLDv2 linux kernel
(https://en.wikipedia.org/wiki/Multicast_Listener_Discovery)
IP Multicast: PIM Configuration Guide, Cisco IOS XE Release 3S
(https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipmulti_pim/configuration/xe-3s/imc-pim-xe-3s-book/ip6-mcast-pim-ssm.html)
IPv6 멀티캐스트 망 구축 및 IPv6 멀티캐스트 응용 설치
(http://iotlab.skku.edu/publications/white-paper/ipv6-multicast-jaehoon.pdf)
IPv6 Multicast Over TEIN - 테스트 환경 정보
(https://apan.net/meetings/Sydney2010/Session/Slides/IPv6/06%20APAN29-IPv6%20Multicast%20Over%20TEIN_Sydney.pdf)
IPv6 Multicast Test Tools (ssmpingd, asmping/ssmping)
(https://launchpad.net/ubuntu/trusty/+package/ssmping)
IPv6 Multicast Test Tools (ssm-iperf)
(https://howdoesinternetwork.com/2016/ssm-iperf)
Source-specific multicast
(https://en.wikipedia.org/wiki/Source-specific_multicast)
PIM-Static-Sparse-Mode-PIM-SSM-2 Bidir
(https://gapbune.tistory.com/entry/PIM-Static-Sparse-Mode-PIM-SSM-2)
How to build an IPv6 tunnel over IPv4 GRE and IPSec or Set up your own 6in4 tunnel broker with Free Software
(https://markus.wernig.net/en/it/ip6tunnel.phtml)
https://github.com/troglobit/pim6sd
https://github.com/Quagga/quagga/blob/master/pimd/CAVEATS
https://github.com/hugosantos/mrd6
ISC - DHCPv6 Prefix Length Mode
(https://www.isc.org/blogs/dhcpv6-prefix-length-mode/)
Chapter: IPv6 Multicast: PIM Source-Specific Multicast
(https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipmulti_pim/configuration/xe-3s/imc-pim-xe-3s-book/ip6-mcast-pim-ssm.html)
https://www.calix.com/content/calix/en/site-prod/library-html/systems-products/e-series/sysop/leg-e-ud/4-1e3-35/ug/index.htm?toc36210203.htm?63338_1.htm
IPv6 Extension Header, Route Header 패킷 분석 - 땅콩킹땅콩
(https://gomguk.tistory.com/30)