Hacker News new | past | comments | ask | show | jobs | submit login

I have a really hard time imagine a system that does not have those problems and provides the larger address space IPv6 provides. What would be your solution thats orders of magnitude easier to implement?



One that is backwards compatible with IPv4 would have eliminated a very large part of the friction here. I really think that if that were a feature of IPv6, we'd be at nearly 100% adoption by now, and IPv4 would be largely a dim memory.


IPv6 has backwards compatibility thats how the IPv6 only mobile networks work. If you think the other way around then my question is how?


I think we're talking about different things with "backwards compatibility". What I mean is the ability for IPv4-only software and hardware to be able to basically function on an IPv6 network. Maybe more slowly, certainly without any of the IPv6 features, but able to basically work.


Thats what I meant with the other way around. That would be awesome but how? Are there any protocolls that could do that? Any research? A paper? Because for my simple mind it seems impossible.


I'm no network engineer, but I can think of a few naive approaches. For instance, IPv6 could include IPv4 addresses inside its address scope, and provide for handling both IPv4 and IPv6 packets. Distinguishing between the two wouldn't be hard.

In reading the discussions leading up to IPv6, it was clear that the actual experts involved saw a few ways to maintain such compatibility. It was decided not to do that, though, because tradeoffs are (as always) involved. There are features they wanted to include that wouldn't have been possible while maintaining compatibility, and it was thought that a breaking change was worthwhile now as long as the IPv6 protocol was good enough that no breaking change would be required in the future.


Depending on what you mean exactly with "IPv6 could include IPv4 addresses inside its address scope", IPv6 actually does that.

For applications a subset of the IPv6 address space is set aside for IPv4 connections. So applications only need to support IPv6 and can communicate with IPv4 destinations using ::ffff:<ipv4-address>, so for example ::ffff:8.8.8.8 is a valid ipv6 address. But that still requires the host to have a IPv4 address for this to work (it's only so applications can support both while only requiring support for one address family).

For IPv6 hosts connecting to IPv4 hosts there are different methods that translate IPv6 to IPv4 (NAT64, SIIT, etc.), but most (if not all) just embed the whole IPv4 address space inside IPv6 (and again you can have something like 2001:db8::8.8.8.8) and then translate based on extracting the IPv4 address from the IPv6 address. And in combination with DNS64 you can have ipv6-only hosts that can communicate just fine with IPv4-only hosts (all ipv4 traffic gets routed via NAT64).

The problem is however the inverse. IPv4 is not forward-compatible. A IPv4-only host can only ever form outgoing connections to other IPv4 hosts, since there is no way to put more than 32-bits of information into the 32-bit destination field of the IPv4-packet. You can of course expose certain ipv6-only hosts to the ipv4-internet using for example SIIT, but that requires a 1:1 mapping between the IPv4 and IPv6 host. If you don't have that explicit mapping, how would a gateway know which IPv6 address you meant?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: