RSS icon Home icon
  • Slow page load (IPv6) with Internet Explorer 11

    Posted on November 21st, 2015 admin No comments

    Recently, I found a website which loads very slowly in Internet Explorer 11 (under Windows 7) while other browsers did not affected (Chrome, Firefox). The site has both IPv6 and IPv4 addresses. Tcpdump showed that connection to the IP address is failed, Destination unreachable ICMPv6 messages returned in reply to SYN packets.

    Despite the address is unreachable the operating system retransmists the SYN packets in a 9 seconds interval. There was a 12 seconds silence, and after a total waiting of 21 seconds the browser switched to the IPv4 address then the connection established under 2 milliseconds. Google Chrome behaves differently: after 300 milliseconds of the first failed IPv6 SYN attempt it immediately switched to IPv4 which is cannot be noticeable by the user. No annoying waiting, no unnecessary retransmissions.

    An hour surfing on the net did not reveal any valid explanation. Interestingly, Internet Explorer 9 suffers from the same phenomena. I suppose this is by desing albeit very frustrating.

    There are many solutions. By default, Windows prefers IPv6 addresses over IPv4 addresses. There is a Microsoft Fix which reverses it, so IPv4 will be preferred over IPv6. Even I can disable the IPv6 interface. At KB929852 you can find five different approaches. However, none of these satisfied my needs.

    The temporary solution was to modify the IPv6 prefix policy to prefer IPv4 address over IPv6 for a specific website only. The prefix policy table is a precedence list determines which is the preferred IP address when making a connection.

    To query the list, enter the following command:

    C:\>netsh in ipv6 show prefixpolicies Precedence Label Prefix ---------- ----- -------------------------------- 50 0 ::1/128 40 1 ::/0 30 2 2002::/16 20 3 ::/96 10 4 ::ffff:0:0/96 5 5 2001::/32

    A higher precedence value means higher preference, so by default IPv6 addresses (::/0) are preferred over IPv4 addresses (::/96, ::ffff:0:0/96).

    To make an exception and prefer IPv4 over IPv6 for a given website, its IPv6 address must have lower precedence value than the IPv4 addresses in this list (<10).

    First, find the site’s IPv6 address. In the example I use Wikipedia’s hostname.

    C:\>nslookup en.wikipedia.org Addresses: 2620:0:862:ed1a::1 91.198.174.192

    To create a new entry in the list enter the following command:

    C:\>netsh in ipv6 add prefixpolicy 2620:0:862:ed1a::1/128 1 6

    Now the list becomes like this:

    Precedence Label Prefix ---------- ----- -------------------------------- 50 0 ::1/128 40 1 ::/0 30 2 2002::/16 20 3 ::/96 10 4 ::ffff:0:0/96 5 5 2001::/32 1 6 2620:0:862:ed1a::1/128

    After this, a connection attempt to the website will be made via the IPv4 interface at first.

    When the IPv6 connectivity problem to the site solved you can remove the entry with the following command:

    C:\>netsh in ipv6 delete prefixpolicy 2620:0:862:ed1a::1/128

    Hope Microsoft will address this issue in their next generation Internet Browser.

     

    Leave a Reply

    Your email address will not be published. Required fields are marked *