1 ipv4 and ipv6 interoperability ipv4 client, ipv6 server over dual-stack server host ipv6 client...

7
1 IPv4 and IPv6 Interoperability • IPv4 client, IPv6 server over dual-stack server host • IPv6 client over dual-stack client host, IPv4 server • IPv6 address macro, function and option • Source code portability

Upload: zachariah-tunstill

Post on 22-Dec-2015

233 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

1

IPv4 and IPv6 Interoperability

• IPv4 client, IPv6 server over dual-stack server host

• IPv6 client over dual-stack client host, IPv4 server

• IPv6 address macro, function and option

• Source code portability

Page 2: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

2

IPv4 Client, IPv6 Serverover Dual-Stack Server Host

IPv6client

TCP

IPv6

datalink

IPv4client

TCP

IPv4

datalink

IPv6 server

TCP

IPv4 IPv6

data link

IPv6 listeningsocket boundedto 0::0, port 8888

IPv4-mappedIPv6 address

IPv6 address

206.62.226.43 5f1b:df00:ce3e:e200:20:800:2b37:6426

Ether IPv4 TCP TCPhdr hdr hdr datatype dport8000 8888

Ether IPv6 TCP TCPhdr hdr hdr datatype dport86dd 8888

Page 3: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

3

Dual-Stack Kernel at Server Side

TCP UDP

IPv4 IPv6

AF_INETSOCK_STREAMsockaddr_in

IPv4 sockets

AF_INET6SOCK_STREAMsockaddr_in6

IPv6 sockets

AF_INETSOCK_DGRAMsockaddr_in

AF_INET6SOCK_DGRAMsockaddr_in6

IPv4 datagram IPv6 datagram

IPv4IPv4-mapped

IPv6

IPv6

IPv4

IPv4-mapped

addressreturned byaccept orrecvfrom

Page 4: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

4

Dual-Stack Kernel at Client Side

TCP UDP

IPv4 IPv6

AF_INETSOCK_STREAMsockaddr_in

IPv4 sockets

AF_INET6SOCK_STREAMsockaddr_in6

IPv6 sockets

AF_INETSOCK_DGRAMsockaddr_in

AF_INET6SOCK_DGRAMsockaddr_in6

IPv4 datagram IPv6 datagram

IPv4IPv4-mapped

IPv6

IPv6

IPv4

IPv4-mapped

address forconnect orsendto

Page 5: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

5

Interoperability between IPv4 and IPv6Clients and Servers

IPv4 server IPv6 server IPv4 server IPv6 serverIPv4-only host IPv6-only host dual-stack host dual-stack host(A only) (AAAA only) (A and AAAA) (A and AAAA)

IPv4 client, IPv4 (no) IPv4 IPv4IPv4-only hostIPv6 client, (no) IPv6 (no) IPv6IPv6-only hostIPv4 client, IPv4 (no) IPv4 IPv4dual-stack hostIPv6 client, IPv4 IPv6 (no*) IPv6dual-stack host

*: IPv4-mapped IPv6 address if client chooses A record; no if client chooses AAAA recordNote that most implementations of IPv6 client/server will be on dual-stack hosts. (Secondrow and second column may disappear.)

Page 6: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

6

IPv6 Address Macro, Function, Option

• IPv6 address testing macros: – IN6_IS_ADDR_* (e.g. V4MAPPED)

• Protocol independent socket address functions: – sock_* (e.g. cmp_addr) (section 3.8)

• IPv6_ADDRFORM socket option: – change a socket type between IPv4 and IPv6, by

setsockopt function with IPv6_ADDRFORM option

Page 7: 1 IPv4 and IPv6 Interoperability IPv4 client, IPv6 server over dual-stack server host IPv6 client over dual-stack client host, IPv4 server IPv6 address

7

Source Code Portability

• Automatic program conversion from IPv4 to IPv6 (sockaddr_in, AF_INET, etc) and #ifdef to use IPv6 when possible

• Deal with socket address structures as opaque objects: – remove gethostbyname and gethostbyaddr, use

getaddrinfo and getnameinfo (which use #ifdef internally)