3 ms·
> 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
by londons_explore 3y ago
> 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.
- jeroenhd 3y agoI 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.
- gsich 3y agoThe fear is probably shitty corporate networks. So not a real issue.
- jeroenhd 3y agoFair enough, there's always a shitty corporate network that'll mess with your well-designed protocol.
- rsaxvc 3y agoIf 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).
- jeroenhd 3y agoAs 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.
- rsaxvc 3y agoI 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-control-protocol-tcp/116519-technote-mptcp-00.html#anc8 https://www.cisco.com/c/en/us/support/docs/ip/transmission-c.... Edit: here's checkpoint: https://support.checkpoint.com/results/sk/sk114666 https://support.checkpoint.com/results/sk/sk114666
- jeroenhd 3y agoIPPROTO_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.
- rsaxvc 3y agoI think you're right that it serves only as a way to communicate to the kernel that userspace wants MTCP socket.
- rkangel 3y agoThis does appear to be the plan: https://github.com/golang/go/issues/56539#issuecomment-1332585915 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.