<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          IPV6、IPV4雙棧問題

          共 2062字,需瀏覽 5分鐘

           ·

          2021-05-06 11:21

          ??

          PS: 人生和代碼一樣,不反思、不迭代就無法獲得成長。
          最近接觸到單雙棧問題,簡單梳理下,雙棧與單棧,也就是 IPV4 相比,雙棧客戶端的應(yīng)用程序會遇到明顯的連接延時(shí),使得雙??蛻舳说挠脩趔w驗(yàn)變差,下面了解一下雙棧問題以及其解決方法,主要內(nèi)容如下:
          1. 雙棧選擇問題

          2. IPV6無法訪問時(shí)的延時(shí)

          3. Happy Eyeballs

          4. 實(shí)際運(yùn)用

          雙棧選擇問題

          雙棧選擇問題及 IPV6/IPV4 選擇問題,首見于 RFC1671 文檔,IPV6(Internet Protocol version 6) 就是互聯(lián)網(wǎng)協(xié)議第六版,IPV4(Internet Protocol version 4) 就是互聯(lián)網(wǎng)協(xié)議第四版,IPV6 主要解決的問題是 IPV4 的地址資源日益枯竭,IPv6 增強(qiáng)的關(guān)鍵是將 IP 地址空間從 32 位擴(kuò)展到 128 位,從根本上實(shí)現(xiàn)不受限制的唯一 IP 地址,雙棧選擇問題是在互聯(lián)網(wǎng)迅速發(fā)展的大背景下出現(xiàn),當(dāng)處于雙棧狀態(tài)下,DNS 解析出來的地址有兩類地址,,單棧狀態(tài)下,DNS 解析出來是 IPV4 或 IPV6 地址,當(dāng)然目前說到單棧一般都是默認(rèn)單棧 IPV4。

          IPV6無法訪問時(shí)的延時(shí)

          當(dāng) IPV6 不能訪問時(shí),支持 IPV6 的程序需要延遲幾秒鐘才能正常切換到 IPV4,這會影響用戶體驗(yàn),為了不影響用戶體驗(yàn)有些系統(tǒng)會直接禁用 IPV6。
          IPV6 不能訪問的原因如下:
          Reasons for such failure include no connection to the IPv6 Internet,  broken 6to4 or Teredo tunnels, and broken IPv6 peering.
          下面看下 IPV6 連接失敗的流程圖:
          如上圖所示,客戶端域名解析獲取到 IPV6、IPV4 地址,然后先請求 IPV6 未連接成功,幾秒后切換到 IPV4 連接成功,其中 IPV6 等待連接到連接失敗的這段時(shí)間就是 IPV6 無法訪問時(shí)的耗時(shí)。

          Happy Eyeballs

          RFC6555 中定義了一種減少可見延遲的算法要求 Happy Eyeballs,其最基礎(chǔ)的兩個(gè)目標(biāo)如下:
          1. 為用戶提供快速連接 IPV6 和 IPV4 的能力,即快速嘗試使用 IPV6 進(jìn)行連接,如果快速連接未成功,則切換到 IPV4 進(jìn)行連接。

          2. 避免同時(shí)連接 IPV6 和 IPV4 而對網(wǎng)絡(luò)造成沖擊。

          下面是上述思想的示意圖如下:
          如上圖所示,客戶端同時(shí)通過 IPV6 和 IPV4 發(fā)送兩個(gè) TCP SYN 包,IPV6 未連接成功,IPV4 則響應(yīng)成功,重試 IPV6 直到用戶放棄連接 IPV6 直接切換到 IPV4 即可。
          執(zhí)行完上述過程后,客戶端則知道 IPV6 和 IPV4 地址是否連接成功,客戶端可以把結(jié)果緩存起來,避免后續(xù)的連接嘗試中影響網(wǎng)絡(luò),如在上面示例中 IPV6 連接是失敗,后續(xù)連接中可以直接切換到 IPV4 進(jìn)行連接,可以為緩存連接結(jié)果設(shè)定一個(gè)有效期,如 10 分鐘,之后可刷新連接狀態(tài),這就是在一定程度上減少了 IPV6 連接異常時(shí)的耗時(shí),有助于增加用戶體驗(yàn)。
          下面是一個(gè) IPV6 工作正常的示意圖:
          如上圖所示,客戶端同時(shí)通過 IPV6 和 IPV4 發(fā)送兩個(gè) TCP SYN 包,IPV6 和 IPV4 都連接成功,IPV6 直接連接成功,則直接走 IPV6,忽略 IPV4 即可,同樣記錄 IPV6 連接狀態(tài),可在設(shè)定的有效期內(nèi)直接 IPV6 進(jìn)行連接,
          只要客戶端主機(jī)是支持雙棧的,Happy Eyeballs 機(jī)制就會一直存在,只要存在僅支持 IPV4 的服務(wù)器存在,Happy Eyeballs 就會一直存在,隨著時(shí)間的推移,IPV4 將會逐漸退出歷史舞臺,Happy Eyeballs 的實(shí)現(xiàn)場景可能不同,但是基本遵循上述要求。

          實(shí)際運(yùn)用

          一般應(yīng)用層使用到的域名解析 API 如下:
          1public static InetAddress[] getAllByName(String host)
          上述方法會返回域名 host 對應(yīng)的 IP 地址,此時(shí)就可以根據(jù) IP 地址是 IPV6 地址還是 IPV4 地址進(jìn)行單雙棧問題的適配了,具體實(shí)現(xiàn)可以根據(jù)需求進(jìn)行調(diào)整和完善,上面介紹的 Happy Eyeballs 主要就是在解決雙棧時(shí)帶來的延時(shí)問題,大型 App 應(yīng)該都有自己的對應(yīng)算法實(shí)現(xiàn),有的甚至 DNS 這塊也是自己實(shí)現(xiàn)的,這里了解一下即可。
          推薦閱讀:
          ?

          ?

          瀏覽 218
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕国产在线观看 | 做爱视频网站免费看 | 999999精品| 五月天中文字幕 | 亚洲性爱小视频 |