No, *something* is needed so that the other application knows where to send the data to. That identifier does not and should not be a network specific implementation in my opinion.
Then what do you suggest that identifier is? Can't use DNS because there is absolutely no guarantee that a host has correct DNS records (when was the last time you saw a home user create public DNS records for all their workstations?). And even if you could guarantee that the DNS records are correct, it still doesn't help when there is NAT involved since your DNS lookup (or whatever identifier you use) is going to have to resolve to a globally reachable network address, and no such thing exists when machines are hidden behind a NAT on local scope addresses.
Sorry, I already explained how it would be possible to take things like SRV records and deal hostname resolution through NAT. It's certainly possible to do. Now you are dismissing DNS as not usable. I'm not sure if there's going to be fruitful discussion.
You're not talking about network address translation. You're talking about protocol translation, which is rather different. And also isn't really possible to do in the way you're suggesting. Lets look at the IPv4 to IPv6 migration as an example:
Alice is on IPv6, Bob is on IPv4 (12.34.56.78), Charlie is on IPv6.
So Alice wants to connect to Bob. Since they have different protocols, there will need to be a protocol translation system involved (NAT64). As IPv6 has a larger address space than IPv4, a chunk of that address space can be mapped 1:1 to IPv4 addresses. So Alice takes Bob's IPv4 address and shoves the designated NAT64 prefix on it to turn it into an IPv6 address - ::ffff:0:12.34.56.78. Alice sends a packet to that address, the NAT64 box gets the packet and translates it into an IPv4 packet. But Alice's address is IPv6 so can't go in the IPv4 packet so the NAT64 box puts its own IPv4 address on the packet and sends it along to Bob. When Bob sends a reply, it goes back to the NAT64 box, which looks up the IPv6 address associated with the connection (Alice) and is then able to translate the packet back to IPv6 and forward it along. So far so good, and all this really does work in practice and is in common use today - it works pretty well for simple client/server protocols such as HTTP.
Now, Alice needs to tell Bob to send some data to Charlie (pretty common in peer to peer applications). Here's where you hit a problem - there's no way that Charlie's address can be encoded within an IPv4 address. This means that no matter how you pass that addressing information within the protocol, when it is eventually translated back into an IP address to connect to, it is nonsensical - Bob has no idea how to connect to Charlie's IPv6 address. It didn't matter whether you passed an IPv6 address within the application's data stream, or a hostname that Bob's OS resolved to an IPv6 address - either way, Bob can't connect.
I'm sure you could invent a protocol extension whereby Bob can know to connect to the NAT64 box when he sees an IPv6 address and somehow hand the NAT64 box Charlie's address. But that requires Bob to know about IPv6, so it pretty pointless - if you're forcing Bob to implement new protocols like that then you may as well force Bob to upgrade to IPv6 properly.
Another option is that you could invent a protocol so that Alice can tell the NAT64 box to expect a connection from Bob and to forward it to Charlie. But now Alice needs to know lots of information about the NAT64 box's addresses (which you claim is always a bad thing), and more importantly, the NAT64 box could well now be subject to having to forward lots of traffic between two third party networks! That's not satisfactory.
Wow. You are very IP address-centric. Have you ever considered that there are other network types out there?
Try this:
Alice wants to talk to Bob. She puts a universal identifier for Bob (say, 'bob@bob.com') in. Her local system contacts the local network (which runs protocol A) directory service resolution for "bob@bob.com". It's not a locally known identifier, so the local directory checks its peer system for knowledge of that identifier. (Like route discovery for a block of IP addresses, even.) The AB gateway from network A to network B thinks it handles "bob.com" and checks its internal network (which runs protocol B) for "bob@bob.com", and finds it at The AB gateway sets up a translation so that on the A network is mapped to the B network to (with a reverse mapping). The AB gateway returns to Alice's machine, and says use this.
Now, Alice tells Bob to talk to "Charlie@charlie.com". Bob's network, running protocol B, does a directory look up on that, and decides it's not local. It contacts it's various gateways/peers, and the gateway BC thinks it can handle it. It sets up the translation between BC just like the translation for Alice to Bob was done between A and B.
Maybe network A is running IPv4, maybe not. Maybe network B is running IPv6, maybe not. Maybe network C is running IPX. Doesn't matter because the applications don't concern themselves with it.
This is already widely done on the telephone network. The way it is done is by having gateways that understand the high level protocols so that they can be translated at the highest level necessary.
You almost have it! Except the 'highest level necessary'. It should be as low as possible.
That isn't going to work on the internet - you can't expect your internet provider to run an application level gateway for every protocol under the sun. Peer to peer protocols *require* all peers to be globally reachable using a unified addressing system.
Yes -- that is correct. Which should be independent of IPv4, IPv6, or IPvWhatever. The unified addressing system CANNOT be IP addresses, because you can't hand an IPv6 address to an IPv4 system.
You can pass whatever peer identifier you like within the protocol, but at some point the remote peer has to translate it into a real IP address and if it happens to be an IP version that peer doesn't understand then you're screwed whatever you do.
See the above system. Identifiers are resolved within the local network to locally understood protocols.
Here's how I look at the situation. IPv4 was a 32-bit box. It started getting crowded, so people started carving crude doorways in the side of the box to join other boxes (i.e. private network address spaces) to the main box with things like NAT. This was a bit of a hack and wasn't always perfect, and the box was still getting crowded.
However, people decided the solution was to make one reallllly big box, the 128 bit box, and trap everyone inside it. There was enough space for everyone in the monocultural entity that was the One Big Box, and that that way no one would have to ever make doors again. A lot of people think that the One Big Box is so good, we will never need another, because it's just so big. And it's easier to monitor/manage/control.
My feelings it that instead of making One Big Box, the door thing should have been developed more, so people could have kept adding their own boxes. Or cylinders. Or dodecahedrons, and the doors should have let people wander from one to the other as they wanted without hindering them, so that people could choose what worked best for them instead of being stuck in the One Big Box all the time. It also provides escape routes and competition to the One Big Box should problems happen with the Titanic v6.
So, because I like the ideas of doorways and freedom, I find people who keep insisting that doorways and gateways and translations are bad or unnecessary because we should all be Happy in the One Big Box to be tiresome.
If ultimately, that's all you want is the One Big Box, then that's fine.