Happy Eyeballs

{{Short description|Algorithm for applications supporting both Internet protocol versions 4 and 6}}

Happy Eyeballs (also called Fast Fallback) is an algorithm published by the IETF that makes dual-stack applications (those that understand both IPv4 and IPv6) more responsive to users by attempting to connect using both IPv4 and IPv6 at the same time (preferring IPv6), thus minimizing IPv6 brokenness and DNS whitelisting experienced by users that have imperfect IPv6 connections or setups. The name "happy eyeballs" derives from the term "eyeball" to describe endpoints which represent human Internet end-users,{{cite encyclopedia |entry=eyeballs |dictionary=Cambridge Business English Dictionary |publisher=Cambridge University Press |access-date=2014-12-05 |at={{webarchive |url=https://web.archive.org/web/20141213193732/http://dictionary.cambridge.org/dictionary/business-english/eyeballs |date=2014-12-13 |nolink=y}} |entry-url=http://dictionary.cambridge.org/dictionary/business-english/eyeballs}} as opposed to servers.

Happy Eyeballs is designed to address the problem that many IPv6 networks are unreachable from parts of the Internet,{{Cite journal|first1=Dan|last1=Wing|first2=Andrew|last2=Yourtchenko|journal=Internet Protocol Journal|volume=13|issue=3|pages=16–21|title=Happy Eyeballs: Improving User Experiences with IPv6 and SCTP|date=September 2010|issn=1944-1134|url=https://ipj.dreamhosters.com/wp-content/uploads/issues/2010/ipj13-3.pdf|accessdate=2022-02-02}} and applications that try to reach those networks appear unresponsive, which frustrates users. Happy Eyeballs solves this problem by determining which transport would be better used for a particular connection by trying them both in parallel.{{Ref RFC|8305}} An application that uses a Happy Eyeballs algorithm checks both IPv4 and IPv6 connectivity (with a preference for IPv6) and uses the first connection that connects successfully.

Implementations of Happy Eyeballs stacks exist in Google Chrome 11,{{Cite web |last=Aben |first=Emile |date=2011-11-12 |title=Hampering Eyeballs - Observations on Two "Happy Eyeballs" Implementations |url=https://labs.ripe.net/author/emileaben/hampering-eyeballs-observations-on-two-happy-eyeballs-implementations/ |access-date=2025-03-02 |website=RIPE Labs |quote=The first "Happy Eyeballs" implementation that I'm aware of that made it into production software is included in the Chrome webbrowser since version 11.0.696.71 which was released on 24 May 2011.}} Opera 12.10,{{cite web|url=http://www.opera.com/docs/changelogs/unified/1210|archiveurl=https://web.archive.org/web/20121109045127/http://www.opera.com/docs/changelogs/unified/1210|archivedate=2012-11-09|title=Opera 12.10 Changelog|publisher=Opera|quote=[...] RFC-3484 and RFC-6555 ("Happy Eyeballs") implemented}} Firefox 7 (which falls back to IPv4 for dual-stack hosts),{{Cite web |title=Necko Lingo — Firefox Source Docs documentation |url=https://firefox-source-docs.mozilla.org/networking/necko_lingo.html#happy-eyeballs |access-date=2025-03-02 |website=Firefox Source Docs |at=Happy Eyeballs |quote=We implement [RFC 6555/8305] in a different way.}}{{Cite web |title=DnsAndConnectSocket.cpp - mozsearch |url=https://searchfox.org/mozilla-central/rev/23e7e940337d0e0b29aabe0080e4992d3860c940/netwerk/protocol/http/DnsAndConnectSocket.cpp#202-206 |access-date=2025-03-02 |website=Searchfox |publication-date=2023-12-07 |quote=For backup connections, we disable IPv6. [...] This strategy is also known as "happy eyeballs".}}{{Cite web |title=Firefox 7 for developers |url=https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/7 |access-date=2025-03-02 |website=Mozilla Developer Network |language=en-US |publication-date=2024-07-26 |quote=[...]; this causes a socket to only attempt to connect to IPv4 addresses, ignoring any available IPv6 addresses. [...]; this causes domain name resolution to only consider IPv4 hosts, ignoring any available IPv6 addresses. These changes are used to implement the "happy eyeballs" strategy for improving response time when attempting to connect on hosts that support both IPv4 and IPv6 (especially those that have broken IPv6 connectivity).}} OS X Lion, iOS 5,{{Cite web |title=NSURLConnection/Session with DNS round robin |website=Apple Developer Forums |url=https://developer.apple.com/forums/thread/61488?answerId=174287022#174287022 |date=2016-08-16 |author=Quinn “The Eskimo!” |at=Answer }}{{r|g=lower-alpha|n=osx|r=The iOS 9 and OS X El Capitan implementation (said as implemented at ~99%) is biased towards IPv6 with a 25 ms headstart, though previously iOS 8 and OS X Yosemite (at ~50%) used the fastest connection with no protocol preference.{{cite mailing list |last=Schinazi |first=David |title=[v6ops] Apple and IPv6 - Happy Eyeballs |mailing-list=v6ops |url=https://mailarchive.ietf.org/arch/msg/v6ops/DYiI9v_O66RNbMJsx0NsatFkubQ/ |publisher=IETF Mail Archive |accessdate=2025-03-02 |date=2015-07-09 }}}} cURL 7.34.0{{Cite web |title=curl - Changes in 7.34.0 |url=https://curl.se/ch/7.34.0.html |access-date=2025-03-02 |website=cURL}} and OpenBSD.{{Cite web |title=unwind(8) gains "Happy Eyeballs"-like flexibility |url=https://undeadly.org/cgi?action=article;sid=20191128040647 |access-date=2025-03-02 |date=2019-11-28 |author=rueda |website=OpenBSD Journal}}

Happy Eyeballs testing was part of World IPv6 Day in 2011.{{cite web|url=https://blogs.cisco.com/news/happy-eyeballs-for-world-ipv6-day|title=Happy Eyeballs for World IPv6 Day|first=Mark|last=Townsley|accessdate=2012-01-15|date=2011-06-07|website=Cisco Blog|archive-date=2019-09-03|archive-url=https://web.archive.org/web/20190903205045/https://blogs.cisco.com/news/happy-eyeballs-for-world-ipv6-day|url-status=dead}}

The Happy Eyeballs algorithm may be extended for choosing between types of transport protocols as well, such as TCP and SCTP, but development is still in an experimental phase.{{Cite news |last1=Naeem |first1=Khademi |last2=Anna |first2=Brunstrom |last3=Per |first3=Hurtig |last4=Karl-Johan |first4=Grinnemo |date=July 21, 2016 |title=Happy Eyeballs for Transport Selection |url=https://tools.ietf.org/html/draft-grinnemo-taps-he |access-date=2017-01-09 |newspaper=IETF Datatracker |publisher=}}

See also

Notes

{{Reflist|group=lower-alpha}}

References