tags:

views:

311

answers:

3

I've got a little udp example program written using ipv4. If I alter the code to ipv6 would I still be able to communicate with anyone using the listener with an ipv4 address? I was looking at porting examples at

http://ou800doc.caldera.com/en/SDK_netapi/sockC.PortIPv4appIPv6.html

I'm not sure if simply altering the code would ensure that it worked or if I'd have to write it in duel-stack mode.

A: 

IPv4 and IPv6 are inherently incompatible with each other.
A few basic reasons:

  • the address space is completely different (IPv6 has 128 bit addresses, IPv4 has 32 bit addresses)
  • the protocol header of IPv6 looks nothing like the protocol header of IPv4. if you try to parse an IPv6 packet as IPv4 you'll get nonsense.

The obvious result of these is that if you open an IPv6 socket you can't listen to it using an IPv4 socket.

shoosh
This is strictly correct, but misleading. IPv6 applications can talk to IPv4 only hosts in a number of ways. The reverse is not true. It is also possible to listen for connections from IPv4 applications on an IPv6 socket.
Omnifarious
This answers emphasises the wrong things.
Matt Joiner
+4  A: 

Yes and no... IPv6 does contain completely different addressing, so you'll have to recode your app to use the alternative headers and structure sizes.

However, the IPv4 address range is available within IPv6, the syntax is to add two colons before the standard address (eg ::10.11.12.13). You can also embed IPv4 addresses within IPv6 packets.

gbjbaanb
That address range is only really useful if you want to send a IPv6 packet to a machine when you know only its IPv4 address. But if that other machine doesn't understand IPv6, your v6 packet to ::10.11.12.13 will still be lost.
MSalters
The correct syntax is actually `::ffff:n.n.n.n`. The IPv4 compatible IPv6 address has been deprecated and could never be used to communicate between IPv4 and IPv6 applications anyway.
Omnifarious
+1  A: 

Not without the assistance of an IPv4/IPv6 gateway in the network, and even then communication will be limited by the typical problems introduced by network address translating gateways. The traditional advice for programmers facing decisions like this is to recommend supporting both IPv4 and IPv6 at the same time.

james woodyatt