envoyproxy / envoyproxy/envoy

mobile connectivity: degraded performance for specific domains-carriers pairs

Open
#26,707 0 comments 0 reactions 0 assignees View on GitHub
help wanted mobile
Dominant language
C++
Stars
28.9k
Forks
5.6k
Avg merge
1d 20h
Merged PRs (30d)
437

Description

*Title*: *mobile connectivity: degraded performance for specific domains-carriers pairs*

*Description*:
_TL;DR:_
Forcing IPv6 (https://github.com/envoyproxy/envoy/pull/21803, https://github.com/envoyproxy/envoy/pull/24517) is needed to fix connectivity issues seen by some U.S. Cellular carrier users but at the time enabling feature degrades the connectivity of _Cricket_ users. The issue exists on both iOS and Android platforms.

_Context:_
Our past data analysis showed that Envoy Mobile on Android had issue to talk with one of Lyft owned domains that advertises IPv4 addresses only for _U.S. Cellular_ carrier users. It did not happen for all _U.S. Cellular_ users and it was common for an issue to go away after a few days/weeks. That being said, once the issue started happening for a given user they were unable to talk with aforementioned Lyft domain at all - all connections to that domain were failing.

To work around this issue @mattklein123 inspected the source code of Android and found out that Android uses dual stack IPv6 sockets for all of its connections. The change from https://github.com/envoyproxy/envoy/pull/21803 have fixed U.S. Cellular connectivity issues.

_Present:_
The same _U.S. Cellular_ connectivity issues happened on iOS and we confirmed that they went away after we applied dual stack IPv6 sockets change aforementioned above (PR adding config knob on iOS side of things https://github.com/envoyproxy/envoy/pull/24517). As we continued to look at the data we noticed other impact that enabling dual stack sockets had: it degraded the performance (success rate) of requests going to some 3rd party domains (s3 buckets) for _Cricket_ carrier users. _We confirmed that the _Cricket_ users issue exists on both iOS and Android._

So while forcing dual socket IPv6 sockets seems to be helping _U.S. Cellular_ users to talk with some domains they degrade the performance of some network requests performed by _Cricket_ users.

*Possible solution*
Instead of forcing dual stack sockets for all connections made by Envoy Mobile, make "IPv4 to IPv6 transformed address" to be one of the addresses that Happy Eyeballs mechanism tries out when trying to connect to a given domain.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.