A Little-Heralded New iOS 7 Feature: Multipath TCP
Olivier Bonaventure writes "Besides changes in UI, multitasking and other features that the press discusses, iOS7 also includes support for Multipath TCP. Multipath TCP is a major extension to TCP that is able to use different interfaces for the same connection. Until now, Multipath TCP has been mainly used by researchers with a modified Linux kernel. iOS7 changes that, with millions of Multipath-TCP enabled devices that can switch from 3G to WiFi without losing existing TCP connections. This is not yet the case on iOS7, which currently seems to only enable it for SIRI, but other use cases will likely appear in the future."
Missed the whole, "Until now, Multipath TCP has been mainly used by researchers with a modified Linux kernel," part did ya?
An enigma, wrapped in a riddle, shrouded in bacon and cheese
How could Tim Cook forgot to present this feature ?
The headline says IOS7 has it, but the synopsis says that it doesn't yet.
The reality is that for Multipath TCP to work, both ends of the connect must be Multipath TCP capable. That is NOT the case in 99.999% of connections.
It seems that Apple has made Siri multipath TCP capable, ergo... What all this means to you or me is, not much, but hopefully a more reliable Siri connection and response. That means she might ask you if you want her to search the web for you more quickly than in the past.
I can understand that Apple wants to speed up Siri (the latency on Siri can be horrible, even over a fast WiFi connection), but why do it this way rather than enabling simultaneous client-side speech recognition a la Google Now (even in the Google app on iOS)?
Google's method allows the speech recognition process to appear instantaneous. On a Nexus 4, Google Now recognizes speech almost as fast as you can speak.
Siri on the other hand can often take several seconds to understand a request, even under iOS 7. To me, this more than anything else is what diminishes the user experience.
Multipath TCP is a very cool idea, but there are lots of barriers keeping people from really using it. Those barriers have jack shit to do with peoples' own computers, and everything to do with everyone else they want to talk to, whose machines aren't expecting a single conversation to be taking place with two different addresses.
If I could get away with it, I would be delighted to have my home router use several different ISPs, wrapped together. Sure, I can do that now, but not at the individual connection level.
I think that indeed Safari is a bit slower in IOS7 than it was on IOS6 (on ipad 2, already an older machine). In general the look and feel of IOS7 is appealing. Still not explored everything of course.
Maybe because:
This is not yet the case on iOS7, which currently seems to only enable it for SIRI
If it's just for Siri, then at this point, it's still a highly technical feature that the user won't be able to see obvious benefits from. Apple generally won't present technical features in their Keynote unless they can explain how users will benefit.
Anybody know if IPv6 is any better in this regard?
-- hendrik
It is open source itself. troll.
http://multipath-tcp.org/pmwiki.php/Users/DoItYourself
Safari is typically forced to use HTTP1.0 with no pipelining because it doesn't implement the standard correctly. Because of this, it has to create new connections for each object which requires a 3-way handshake over a high latency connection.
It does officially support HTTP1.1, but most servers detect Safari and use HTTP1.0 instead.
It seems to me that Siri is a bad use case for Multipath TCP. Siri transactions seem to be fast and short-lived. i.e. You wouldn't need a persistent connection that could service transitions between Wifi and 3G. So why use MultipathTCP on it?
For dummies, Cook presents, silence is the rest.
This seems like a very fundamental improvement to the Internet for handling mobility, and a popular product like the iPhone should really boost adoption. Cellular communication is defined by the ability to pair with the best of several available routers, and switch from one to the other without dropping the connection - this is essentially what makes a cellphone different than a plain old cordless phone. But there has always been this annoying disconnect between the cellular network and the Internet, and this sounds like a big step in that direction. If we want super-mobile devices, like dick-tracy wristwatches, they will only have enough power for short-range communication so they will need super-dense infrastructure of some sort, like dynamically pairing with the nearest available wifi or smartphone - migrating connections to the Nth degree.
multipath TCP doesn't really have anything to do with message routing. It's just an extension that allows multiple TCP connections to be bound together but presented to the application layer as a single socket. One use case would be where you're sitting at a coffee shop streaming over wifi and you walk away and lose the connection because you walk out of range of the wifi network and break your TCP connection. With multipath TCP you'd have established a connection over both wifi and mobile networks to support that connection. When the wifi drops out the everything will just go over the mobile network and your TCP connection is never lost.
meanwhile everyone with an iPhone is now enjoying the benefits of multipath tcp.
Obvious troll is obvious.
It does recognize you said "google" to start recognition, but assuming you pressed the button to start instead of that, it's all done on the server. Even on the Moto X, the processor just figures out that you said the trigger phrase, the recognition of the natural-language speech you say after that is all done on the server.
If you don't believe me, just try it when your phone only has an EDGE connection some time.
Google just has better feedback, they seem to have a better design.
http://lkml.org/lkml/2005/8/20/95
Um, they're still benefiting. Even if it's only in Siri.
And Apple gets a widespread beta test that no one knows about, but most people will participate in.
But let's say I connect from A to B over the normal (wired) internet. The packet goes through router X or router Y. Then, when X fails, the message may be routed through Y or the other way around.
Same with multipath: when wifi fails, use mobile network, and vice versa.
No modification of TCP necessary!
Only the kernel (it has to set up "virtual" routers for wifi and mobile).
If Pandora's box is destined to be opened, *I* want to be the one to open it.
You're right but consider this scenario. You're at a coffee shop that offers wifi and you also have mobile network. You're streaming something to your phone which naturally prefers the wifi network. You get up and walk away and lose wifi. The TCP connection is lost, even though you have a perfectly good moble network also available. The TCP connection needs to be reestablished.
With multipath TCP in the same scenario your phone would have the option of setting up two TCP connections, one over each network. It would present a single socket to the streaming application (who is none the wiser). The multipath TCP socket sends packets over both networks (using whatever spread it feels appropriate). When you walk out of the coffee shop and lose the wifi the multipath TCP socket would stop using the dead network and only use the good network (mobile in this case). No loss in connection.
what UDP is for?
An example of an application that uses UDP is Mosh
http://mosh.mit.edu/
You can have various disconnections and reconnections (Since it's written by someone at MIT, say you're going in to the T @Davis and coming out at Kendall/MIT) and the connection with mosh looks like you never disconnected.
--
BMO
Android got offline speech recognition a while ago:
http://www.androidcentral.com/google-search-update-allows-third-party-developers-use-offline-speech-recognition
Yes, it really actually is extremely hard. Even detecting when a TCP connection has died is extremely hard, and ends up coming down to "try to ping them every few seconds and see if it gets there" type hacks, which have high latency of detection.
Don't they get that anyway, every time they release a new iOS?
(And yes, I know, MS do the same thing with v1 of any of their Windows OS's - never trust 'em 'til SP1 comes out)
I say we take off and nuke it from orbit. It's the only way to be sure...
In cases where the NSA/five eyes hasn't compromised one of the two endpoints (or a spot close to an endpoint in the sense of multipath diversity), how much more difficult would multipathing make it to reconstruct the stream flowing through the connection?
It does officially support HTTP1.1, but most servers detect Safari and use HTTP1.0 instead.
I haven't hit this problem myself on any of our large websites, but googling yields this, which seems to indicate that the problem may be on caching proxies. I haven't seen it with Linux Virtual Server (using Direct Routing), Apache, Squid, or Apache Traffic Server (with pipelining support enabled).
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
But let's say I connect from A to B over the normal (wired) internet.
Slow down cowboy. What is "A" and "B"?
They are IP addresses.
The packet goes through router X or router Y.
Correct.
Same with multipath: when wifi fails, use mobile network, and vice versa.
No, In the A-B scenario above there are 2 routes from A to B. Or to be more precise there are 2 routes from "IP Address A" to "IP Address B".
With multipath, A has 2 different IP addresses: A0 and A1. A router knows the routes it has available to send a packet down, but it has no idea that A0 and A1 are different interfaces on the same device, and that it can send packets addressed to A0 to A1.
Indeed, packets arriving on the A1 interface addressed to A0 would be ignored unless the interface was in promiscuous mode.
Only the kernel (it has to set up "virtual" routers for wifi and mobile).
That doesn't solve the problem that the two interfaces have different IP addresses, in completely disparate networks.
So, you are saying that when you have a stable connection from A to B through X, and X goes dead, your connection drops even though there is another route through Y?
In that case, I'd say TCP contains some serious design error.
If Pandora's box is destined to be opened, *I* want to be the one to open it.
Smooth transitioning from 802.11abgn to mobile networks would sure be nice. Granted, it's not all VoIP, but that would be awesome.
In SOVIET RUSSIA... erm...NSA AMERICA, the Internet logs onto YOU!
I'd imagine they'll gradually add it to services they control such as maps, iMessage, FaceTime and lastly iCloud.
With that final addition it would probably be an added feature of iOS 8.0 or 9.0 and extended to developers. Once they pick it up and the idea becomes more widely known hopefully it'll spur adoption in Apache and web browsers.
It's real annoying when I'm in the passenger seat looking for directions and we drive past a McDonalds or Starbucks and my page loading stalls as it jumps on the known network. Or when leaving the house and it goes from wifi to cellular.
Cwm, fjord-bank glyphs vext quiz
Yeah, but if you're streaming something wouldn't it be better just to have like a big buffer? If your connection dies, you keep grabbing data out of the buffer, and in the meantime, the connection is re-established on a working network. You could easily store 5 minutes of audio in memory incase your connection drops. With phones now having gigabytes of memory, having 10 megs dedicated to an audio buffer isn't a lot to ask. Even if you're streaming video, you could easily store up enough of the video for the amount of time that you would lose a connection for.
Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
Funny how old technology becomes new all over again. Multitasking, improved UI, and tcp protocol improvements? Sounds like it came straight out of the DOS era. :)
In this example, X and Y are each providing a different subnet address. Your device just moved to a different network and now has a different IP address. This is not a design error but an appropriate design. Multipath TCP is a standard that allows your device to have uninterrupted mobility.
ipv6 is my vpn
Try Dolphin. I've been pretty happy with that.
Look back up at my post, now look back down, you're on the Internet. Now look back up. I'm a signature.
If a new protocol is needed at both ends of the connection why not use a less experimental and more capable one like SCTP? It is heavily used in telephony networks for SIGTRAN and is also supported by some servers for SIP and HTTP.
Wait, I know, because it's Apple!
This feature may be causing performance issues. Since upgrading to iOS 7 wifi connectivity has been crap. When I turn off wifi and just use LTE it's great. I just tested wifi without the cellular data connection active...and it's great! Both turned on at the same time? Timeouts and heavy lag for anything that needs an internet connection.
I know, MS do the same thing with v1 of ...
WTF cares what they do, and why drag them into this triumph/tragedy?
"Tongue tied and twisted, just an Earth bound misfit
Where it also helps is when you are connnect to both cellular and wifi, but one of them isn't actually responding. The multipath TCP will notice that traffic isn't flowing and try directing traffic over the other one. I believe (though I may be misremembering) it's also possible to use this technology to bond different network connections, so if you have 10Mbps over WiFi and 10Mbps over LTE, you could turn them into something comparable to a 20Mbps connection.
However, iOS 7 was announced at WWDC which is a conference for developers.
Surely this is exactly the technology you want your app developers using to enhance the experience of your mutual customers?
Backup not found: (A)bort (R)etry (P)anic
I think I get the mechanics of what goes on (switch from LTE to wifi without breaking the connection). Can anybody explain the significance, or how it would improve phone functionality and app functionality? I'm sure there's a killer application, but I don't see it.
Yes, but that not how IP networks work. When the server sends you a packet, it needs to pick exactly one IP address as the destination. Because your WiFi and Cell are on different networks, they give you different IP addresses. So the server has to pick either your WiFi or your cell IP address. Once that packet is sent, it's not going to ever get to you via the "other" network.
That's why the multipath needs special support. Among other things, lots of web sites which are on multiple load-balanced servers need to affinitize your session to a single server. Those load balancers are currently (AFAICT) knowledgeable about Multipath.
My prediction: apps will have to opt-in to get this feature, but beyond setting a flag when they set up the connection, nothing more is needed.
Want a sig like mine? Join ACM's SigSig today!
But, as I was trying to say, the same can happen on a regular network.
When sending from A to B through X, and X dies, the path may have to go through Y, where Y is on a completely different part of the network.
So what makes this phone-case so special?
If Pandora's box is destined to be opened, *I* want to be the one to open it.
Yeah, except (a) their isn't an indication from what I'm reading that Apple is opening up this tech for use by developers yet; (b) the keynote for the WWDC is still aimed at the non-technical; and (c) I'm pretty sure there was some mention of it when iOS was announced, because I knew that Apple was starting to use multipath TCP at the time (though I don't remember where I learned it).
You certainly would use streaming audio in that situation... And you might check your phone when getting out of the car and send a message of some kind. Now that message fails to send because you interrupt the connection mid way through. Or it just does something else unexpected. An uninterrupted internet connection is pretty much always better than an interrupted one.
But the thing is, since mobile devices have so long been in that situation of often dropping/switching connections, almost any decently written application or function already does that, and will silently retry or reconnect. Sure, this is a more elegant solution in theory, but we already have solutions in practice.
I remember sigs. Oh, a simpler time!
I am getting to the point that I hate the free Wifi at McDonalds and Starbucks. In theory it is great, but because of their TOS page, it ends up blocking data from various apps when you drive past one. Constantly adding and removing the connection manually isn't the answer. On the other hand, I feel a bit rediculous complaining about a free service that I could just ignore and not have these issues.
Yeah, but if you're streaming something wouldn't it be better just to have like a big buffer? If your connection dies, you keep grabbing data out of the buffer, and in the meantime, the connection is re-established on a working network. You could easily store 5 minutes of audio in memory incase your connection drops.
Phone calls with a five minute lag can be fun, but are not what most people want.
There is no network. Been sitting here in Raleigh for 2 full years listening to them tell me they're 'improving' and 'rolling out' LTE. If anything it's gotten worse. Of course no data but now dialtone is an iffy thing.
Couldn't you just quickly turn off WiFI with the new Control Center?
Yes, but driving down the road with music streaming, the solution of spotting McDonald's and turning off WiFi, and turning it back on when you get out of range isn't really a viable solution.
There are a bunch of apps in the Play Store that can turn wifi on and off automatically. Llama can do it too, among many other things, and it's free.
"Those who consume the bulk of goods are those who make them. We must never forget this secret of our prosperity."