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

> By default, mptcp is disabled

By default, all TCP connections should be MPTCP. There is just upside and no real downside. It falls back to TCP when the network doesn't support it, and the vast majority of the internet supports that since iPhones use MPTCP by default.

Please reconsider the decision not to just use MPTCP by default. People using Go software for decades to come will have a buggy experience whenever they move networks from wifi to cell otherwise.




This does appear to be the plan: https://github.com/golang/go/issues/56539#issuecomment-13325...

   It would be up to the implementation whether the default result from MultipathTCP is on or off, and then programs could override that with SetMultipathTCP. In Go 1.21, we would default it off everywhere, and then in Go 1.22 or later, we would turn it on by default for systems that support it. Support might mean that it's an operating system that we have code for, or it might mean a more precise result, that we've sniffed the current kernel to see if it's available. That detail is up to the implementation and can change over time.


I haven't looked into mptcp much, but my understanding is that there's nothing the network needs to add to support it, right? I'm not sure why the system would ever need to fall back to standard TCP if the kernels on both ends support mptcp.

My understanding is also that MPTCP will send data over the backup link, which can incur data charges. Those charges shouldn't be very big, but I've seen carriers who round data up to the next megabyte, and a single background handshake at night can eat through your data cap surprisingly fast.

I would hope whatever data savings systems are built into mobile operating systems take care of this automatically, but I can see why one could want to disable this by default on mobile operating systems.


If I understand correctly, the protocol stack is built on TCP, but they use different IP protocol numbers, so a router or firewall may easily pass TCP, but not MPTCP(either by configuration or age).


As far as I understand, MPTCP works via a TCP option rather than a separate IP protocol number. To any normal firewall, the unknown option field shouldn't be cause for concern.


I had assumed that since IPPROTO_MPTCP(262)!=IPPROTO_TCP(6), they were using another protocol number for everything, but you're right that there's a TCP option involved too.

But also, plenty of stateful firewalls will strip unknown options. Here's how to enable Ciscos to forward it: https://www.cisco.com/c/en/us/support/docs/ip/transmission-c....

Edit: here's checkpoint: https://support.checkpoint.com/results/sk/sk114666


IPPROTO_MPTCP (262) is too big to fit into the byte that's reserved for the protocol number. I'm not sure what the reason is Linux has this protocol number, I'm guessing it's so that user mode sockets can easily request MPTCP sockets?

I'm not too surprised about Cisco and Checkpoint. I suppose corporate networks are intentionally always a pain when it comes to new protocols and features.


I think you're right that it serves only as a way to communicate to the kernel that userspace wants MTCP socket.


The fear is probably shitty corporate networks. So not a real issue.


Fair enough, there's always a shitty corporate network that'll mess with your well-designed protocol.




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

Search: