1 ipv4 and ipv6 interoperability ipv4 client, ipv6 server over dual-stack server host ipv6 client...
TRANSCRIPT
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
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
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
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
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.)
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
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)