Sei sulla pagina 1di 14

Chapter 10

IPv4 and IPv6 Interoperability

contents

Introduction
IPv4 Client, IPv6 Server
IPv6 Client, IPv4 Server
IPv6 Address Testing Macros
IPV6_ADDRFORM Socket Option
Source Code Portability

Introduction
Server and client combination

IPv4
IPv4
IPv6
IPv6

<=>
<=>
<=>
<=>

IPv4(most server and client)


IPv6
IPv4
IPv6

How IPv4 application and IPv6 application can


communicate with each other.
Host are running dual stacks, both an IPv4 protocol stack
and IPv6 protocol stack

Dualstack

A station should simultaneously run both IPv4 & IPv6 protocols until all Internet uses
IPv6.
To determine which version to use, the source host queries the DNS and send
whichever version of IP packet the DNS returns.

IPv4 Client , IPv6 Server


IPv6 dual stack server can handle both IPv4
and IPv6 clients.
This is done using IPv4-mapped IPv6
address
server create an IPv6 listening socket that is
bound to the IPv6 wildcard address

IPv4 Mapped IPv6 Address

IPv6
client

IPv4
client

TCP

TCP

IPv6

IPv6 listening socket,


bound to 0::0, port 8888

IPv6
server
TCP

IPv4 mapped
IPv6 address

IPv4

IPv6 address

IPv4

IPv6

206.62.226.42

Data
link

Data
link

Data
link

Enet
Type0800 hdr
Enet
hdr
Type0800

IPv4
hdr
IPv4
hdr

TCP
TCP
hdr
data
Dport 8888
TCP
TCP
hdr
data
Dport 8888

5flb:df00:ce3
e:e200:20:80
0:2b37:6426

IPv4
sockets
IPv6
sockets

AF_INET
AF_INET
SOCK_DGRAM
SOCK_STREAM
sockaddr_in
sockaddr_in
AF_INET6
AF_INET6
SOCK_STREAM
SOCK_DGRAM
sockaddr_in6
sockaddr_in6

TCP

UDP
IPv4 mapped

Address
returned by
accept or
recvfrom

IPv4

IPv6

IPv4
IPv4 datagram

IPv6
IPv6 datagram

IPv6 client, IPv4 server


IPv4 server start on an IPv4 only host and
create an IPv4 listening socket
IPv6 client start, call gethostbyname. IPv4
mapped IPv6 address is returned.
Using IPv4 datagram

IPv4
sockets
IPv6
sockets

AF_INET
AF_INET
SOCK_DGRAM
SOCK_STREAM
sockaddr_in
sockaddr_in
AF_INET6
AF_INET6
SOCK_DGRAM
SOCK_DGRAM
sockaddr_in6
sockaddr_in6

UDP

TCP
IPv6
Address
for connect
or sendto

IPv4 mapped

IPv4

IPv6

IPv4
IPv4 datagram

IPv6
IPv6 datagram

IPv6 Address Testing Macros


There are small class of IPv6 application that
must know whether they are talking to an
IPv4 peer.
These application need to know if the peers
address is an IPv4-mapped IPv6 address.
Twelve macro defined
Eg: int IN6_IS_ADDR_LOOPBACK(const
struct in6_addr * aptr ) ;

IPV6_ADDRFORM Socket Option


Can change a socket from one type to
another, following restriction.
An IPv4 socket can always be changed to an
IPv6. Any IPv4 address already associated with
the socket are converted to IPv4- mapped IPv6
address.
An IPv6 socket can changed to an IPv4 socket
only if any address already associated with the
socket are IPv4-mapped IPv6 address.

Converting an IPv4 to IPv6


Int
af;
socklen_t
clilen;
struct sockaddr_int6
struct hostent *ptr;

cli; /* IPv6 struct */

af = AF_INT6;
Setsockopt(STDIN_FILENO, IPPROTO_IPV6,
IPV6_ADDRFORM, &af, sizeof(af));
clilen = sizeof(cli);
Getpeername(0, &cli, &clilen);
ptr = gethostbyaddr(&cli.sin6_addr, 16, AF_INET);

setsockopt => change the Address format of


socket from IPv4 to IPv6.
Return value is AF_INET or AF_INET6

getpeername =>return an IPv4-mapped IPv6


address

Potrebbero piacerti anche