Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

But... it doesn't? TCP has no notion of IP address in the protocol, only the port. TCP with changing IPs can work e.g. on top of an ip-ip tunnel with applications not being aware at all.


> TCP has no notion of IP address in the protocol,

RFC793:

    To allow for many processes within a single Host to use TCP
    communication facilities simultaneously, the TCP provides a set of
    addresses or ports within each host.  **Concatenated with the network
    and host addresses from the internet communication layer,** this forms
    a socket.  A pair of sockets uniquely identifies each connection.
    That is, a socket may be simultaneously used in multiple
    connections.

TCP uses the combination of L3 source address, L3 destination address, L4 destination port, L4 source port to identify what connection a frame is on. We're discussing how using that L3 information isn't necessarily ideal for today's world.

> TCP with changing IPs can work e.g. on top of an ip-ip tunnel with applications not being aware at all.

That's just because the IPs have not changed from its point of view: it receives the same frame with the same destination/source IP addresses the entire time.

Part of the reason why we need things like IP-IP tunnels is because L4 connections can't "move" with TCP. In scenarios where we're using tunneling for this, we're accepting worse performance than if we could just directly send TCP to its true destination and have it processed.


So you want to implement persistent connections on L4 without implementing persistent addresses on L3 first?

This doesn't make much sense to me. The hardest problem here is not assigning uuids to pipes, it's the routing/mapping of the "true destination".

- If you manage to solve it on L3, ip-ip tunnels or not — you have it, TCP works unmodified and so does UDP and everything else including quic and http/3.

- If you didn't solve it, then support for persistent connections in TCP is useless.

In another words I don't see what a "transmission control protocol" has to do with it. It's very reasonable to assume that addreses are already figured out when designing transmission control and that's exactly what TCP did.


> - If you didn't solve it, then support for persistent connections in TCP is useless.

SCTP and multipath TCP (which is what we're talking about) already do pretty much this. Assuming that endpoints to a stream connection have single, unchanging network addresses isn't a reasonable assumption anymore. But we're stuck with the assumption that hosts won't move in one of our most common protocols.

https://en.wikipedia.org/wiki/Multipath_TCP#/media/File:Diff...

https://en.wikipedia.org/wiki/Stream_Control_Transmission_Pr...

In the OSI model, you got similar functionality up at layer 5, but TCP only handles the connection/disconnection aspect of the session layer. In the internet world, we have a bunch of haphazard sets of retries, session balancing, multihoming and reconnecting behavior that are protocol specific (and completely missing from many well-used protocols) kludged on top. (Actually arguably MP-TCP is a session layer on top of TCP).

The only way you solve this on layer 3 is to build some kind of messy overlay network, because addresses have no real relation to where things are anymore. And we know that overlay networks are suboptimal and inefficient. Solving it at layer 4 doesn't have to be (but it's too late for that now).




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

Search: