網頁/圖片加載慢的求解指南
一、前言與問題描述
今天剛換上華為的HUAWEI AX3 Pro New
,連上WIFI后測速雖然比平時慢,但是也不算太離譜,如下圖所示:
估計讀者們有也和作者一樣,還沒意識到事情的嚴重性😁。
直到晚上刷六級真題時使用有道查詞,竟然延遲好高:幾乎是輸入詞匯點確定后需要1秒
才能顯示結果,偶爾還會顯示網絡錯誤,這我真受不了。
然后上QQ空間刷動態時,發現一張圖片要轉9-10秒
才能加載出來,嚴重影響我的用機體驗,勢必要解決這個問題。
二、解決方案
主要辦法是關閉IPv6
網絡,關閉方法主要有兩種:
2.1 方法1:從路由器上關閉IPv6
讀者需要簡單的網絡管理知識,找到路由器管理的IP地址,比如我的是:
192.168.1.3
在瀏覽器中輸入該地址就會進入路由器管理頁的登錄界面,以我的為例,為如下界面:
然后登錄路由器即可,如果你不知道管理員密碼,一般在路由器的背面有寫上,如果沒寫(比如我的就沒寫),那么一般是與你的WiFi密碼一致。再不濟,讀者可以上網查,查詢提示語句
是:
XX路由器默認管理員密碼是什么?
登錄進去后,讀者自行尋找IPv6的按鈕(不同路由器管理頁不一樣,俺就不演示了),例如我找到時是這樣的:
讀者找到類似按鈕后,將其關閉即可。
2.2 方法2:在終端上關閉IPv6(僅適用于電腦)
按住Win+R
快捷鍵,打開“運行
”窗口,輸入control
并回車即可打開控制面板。如下圖所示:
然后在控制面版中單擊網絡和Internet
”接著單擊網絡和共享中心
打開如下頁面:
然后在中間右邊點擊你的網絡,比如我將點擊WLAN(HUAWEI AX3 Pro New)
,然后看到如下頁面
單擊屬性,打開如下頁面:
取消勾選Internet 協議版本 6(TCP/IPv6)
確定后即可完成操作。
搞完之后我再次嘗試發現加載什么的都不卡了,然后我測了下網速如下圖所示:
三、附錄
以下內容需要讀者具備一定計算機網絡的相關知識才能看懂,望讀者周知
3.1 為什么開了IPv6會慢?
3.1.0 DNS解析問題
如果您啟用了 IPV6,則 DNS 查找速度比 IPV4 慢 2 到 3 倍。這就是為什么您的計算機似乎“無法連接”網站。當您發起與任何站點的連接時,它所做的第一件事就是在 DNS 中查找 IP 地址。
由于多種原因,IPV6 上的 DNS 查找速度很慢。 首先,DNS 目前是串行處理的,而不是并行處理的。始終首先處理 IPV4 查找,然后處理 IPV6,因此至少需要兩倍的時間。 其次,由于 IPV6 查找頻率較低,因此它們不會經常緩存在 DNS 服務器上,從而導致進一步的延遲。 這就是為什么啟用 IPV6 時網站看起來需要更長的時間才能開始加載,因為它們確實需要更長的時間才能開始加載!
另外,請記住,大多數網頁會從許多不同的 URL 加載內容,并且每次瀏覽器必須查找圖像、Flash 對象或頁面上其他任何內容的地址時,頁面速度都會加快。 您無法在操作系統中執行任何操作來加快速度。它影響所有操作系統,包括 Windows、Mac 和 Linux 最好暫時禁用 IPV6,除非您對此有特定要求(幾乎沒有人這樣做)
3.1.1 關于 PMTU 黑洞
目前國內確實存在支持 IPv6 的服務器、CDN 節點不夠多,IPv6 國際帶寬比 IPv4 帶寬小的問題,但也不至于會打開國內網站都卡。通常情況下遇到這個問題說明你到目標服務器的鏈路上存在 PMTU 黑洞。
MTU (Maximum transmission unit) 是一條鏈路上可以通過的三層數據包的最大尺寸(包含 IP 包頭)。以太網上默認的 MTU 是 1500 字節,但是你和目標服務器之間的路徑上可能存在小于 MTU 1500 的鏈路。這條路徑上最小的 MTU 值就是整條路徑的 PMTU 值。路由器在轉發包時,超過 MTU 大小的包會被分片( Fragmentation ),也就是一個大包會被分切為多個不超過 MTU 的小包進行傳輸,傳輸效率會下降。
終端設備在發包時,也可以設置 DF ( Don’t Fragment )標記來告訴路由器不要分片。這時中間路由器會丟掉超過 MTU 的包,回復一條 ICMP Fragmentation Needed 消息。發送者收到這個包后,下次就會發小一點的包,這個過程叫做 PMTU Discovery 。現實中可以看到 HTTPS ( TLS )的流量大都是帶 DF 標記的。
然而,互聯網上有大量的中間設備為了所謂的“安全”或者沒有正確配置,不回應 ICMP Fragmentation Needed 包,這使得訪問某些網站時如果某個包的大小超過了 PMTU,會被無聲地丟棄,直到 TCP 協議發現超時丟包進行重傳,這非常緩慢。遇到這種情況,我們可以說你和目標服務器的路徑上存在 PMTU 黑洞。
此外,IPv6 不支持分片,換句話說可以理解為 IPv6 下所有的包都是帶 DF 標記的。中間路由器在遇到包尺寸大于 MTU 的情況時,應該回應 ICMPv6 Packet Too Big 消息。同樣的,由于種種原因,某些中間設備可能會直接丟包而不回應 ICMPv6 Packet Too Big 消息,直到 TCP 協議發現超時丟包進行重傳。。。
3.1.2 為什么 IPv4 沒有這個問題
其實 IPv4 也有這個問題,我不只一次見網友說自己搭的軟路由訪問某些網站非常慢,而換回硬路由就正常。這是因為多數家用路由器默認對 IPv4 下的 TCP 開啟了 MSS (maximum segment size) Clamping (使用 OpenWRT 軟路由的朋友們可以在防火墻設置中找到 MSS Clamping 開關)。MSS Clamping 是針對 PMTU 黑洞的 Workaround,簡單來說就是 TCP 握手時有個 MSS 字段決定單個 TCP 包的最大尺寸。路由器可以通過嗅探 TCP 握手包,把 MSS 值改小,使最終的三層 IP 包的尺寸( MSS+TCP 頭大小+IP 頭大小)不超過某個特定的值。
3.1.3 總結
現在國內 ISP 一般都是通過 PPPoE 虛擬撥號建立 WAN 口連接的。Ethernet 的默認 MTU 是 1500,但是 PPPoE 隧道有 8 個 bytes 的開銷,所以 PPPoE 虛連接的 MTU 就是 1500-8=1492,減掉 IPv4 包頭( 20 字節)和 TCP 包頭( 20 字節),可以得知 IPv4 下需要把 MSS 設為 1452 以下。
IPv6 的包頭是 40 字節,所以 IPv6 下需要把 MSS 設為 1432 以下。
這時問題來了,目前很多光貓、家用路由器對 IPv6 的優化很差,不支持對 IPv6 下的 TCP 包進行 MSS Clamping,這就導致訪問 IPv6 網站時,若路徑中存在 PMTU 黑洞,則打開很慢。
四、參考文獻
[1] windows 7 - IPv6 feature in Network Adaptor is Slowing Internet - Super User
[2] 開啟 IPv6 后網速變得很慢?可能是 PMTU 黑洞的問題 - V2EX