2012-10-02 58 views
2

我對作爲開發人員和我的遺留應用程序的IPv6的引入意味着什麼感到困惑。爲IPv4編寫的遺留應用程序中的IPv6地址

  1. 我知道IPv4和IPv6在本質上是不兼容的。 IPv4客戶端能夠訪問使用IPv6的網站嗎?IPv6客戶端能夠訪問IPv4網站嗎?

  2. 檢查我的Spring MVC的網站訪問者的IP地址是這樣的:

    private String getIp(HttpServletRequest request) { 
        return request.getRemoteAddr(); 
    } 
    

    到目前爲止,這一直返回IPv4地址的格式A.B.C.D。如果使用IPv6的客戶端連接到我的網站,這會改變嗎?或者可能發生的情況是,各種隧道技術使IPv6客戶端根據我的網站設置將自己僞裝成IPv4客戶端?

  3. 當涉及到檢索和處理IP地址時,是否還有其他可能會遇到的IPv6問題?

回答

4
  1. 並非沒有轉換設備或它們之間的代理服務器。僅支持IPv4和僅支持IPv6的系統之間的直接通信是不可能的。還有一些公共代理,如SixXS IPv4Gate and IPv6Gate,您可以在機器上同時支持IPv4和IPv6運行自己的代理,也可以使用DNS64/NAT64從一個純IPv6網絡連接到IPv4的服務器

  2. 是,request.getRemoteAddr()會給你客戶端使用IPv6連接到服務器時的IPv6地址。如果客戶端使用例如NAT64,那麼它們將看起來像您的IPv4客戶端,因此您將看不到IPv6地址。它看起來就像是一個很大的IPv4 NAT盒子。

  3. 是的。想想這樣的事情:

    • 存儲地址
    • 客戶有多個IPv6地址使用IPv4和IPv6

有一個whitepaper

  • 一個客戶端,突出顯示您作爲軟件開發人員遇到的最重要的問題。

  • +0

    感謝您解決困惑。這件事情看起來很複雜,我發言的大多數開發人員對此知之甚少。 – Gruber

    +1

    看來,不幸的是開發人員在規劃引入IPv6時沒有得到足夠的重視。這會在不久的將來引起一些頭痛。軟件改進組織(sig.eu)做了一些研究,發現12%的商業軟件並不是用來處理IPv6 ...... :-( –

    1

    我知道IPv4和IPv6在本質上是不兼容的。 IPv4客戶端能夠訪問使用IPv6的網站嗎?IPv6客戶端能夠訪問IPv4網站嗎?

    如果沒有某種轉換機制,ipv4 only客戶端將無法與僅ipv6服務器進行通信,反之亦然。

    最初的想法是,整個世界將從「單棧IPv4」移動到「雙棧」。然後,一旦每個人都在雙棧,我們可以開始關閉IPv4並轉移到「單棧IPv6」。

    但是這並沒有發生,網絡運營商已經看到小的壓力IPv6部署和IANA和大多數區域性互聯網註冊機構已經耗盡IPv4地址。因此,我們已經結束了大量IPv4的日子已經過去的情況,但仍然有很多僅有v4的客戶端和服務器。

    多種過渡機制已經彈出。其中包括:

    • 隧道機制,包括像6to4和teredo這樣的「自動隧道」,並配置到固定端點的隧道。這些允許v4專用網絡上支持v6的主機連接到僅支持v6的服務。他們並沒有太多幫助,因爲你無法控制其他人的網絡上的機器是否啓用了它們。
    • NAT64,無狀態(1:1)和有狀態(1:多)。這允許管理員運行僅限v6的網絡,並仍然與互聯網上僅限v4的計算機進行交互。這對於客戶端來說是合理的解決方案,但對於服務器來說,它並不能真正解決地址耗盡的問題,因爲您仍然發現自己需要爲每個服務器分配一個專用的ipv4地址。
    • 反向代理,這些可以看一下應用級數據,因此,如果更高層協議給出了主機名的指示(例如,HTTP與主機標頭,TLS與SNI),則代理可以在一個單一的公共IPv4地址聽並向多個內部服務器發送請求。

    他們都不是解決所有的問題,其中一些創建自己的問題,但在組合使用它們可以讓你與僅支持IPv4相對較少的運行V6-只有內部網絡地址去跟世界其他地區。

    我檢查我的Spring MVC網站訪問者的IP地址是這樣的:....到目前爲止,它總是返回格式爲a.b.c.d的IPv4地址。如果使用IPv6的客戶端連接到我的網站,這會改變嗎?或者可能發生的情況是,各種隧道技術使IPv6客戶端根據我的網站設置將自己僞裝成IPv4客戶端?

    如果您的服務器直接接受ipv6連接,它將顯然會看到一個ipv6地址。

    如果您的服務器通過使用「::」上的套接字來偵聽ipv4和ipv6連接(Linux默認啓用此功能,windows需要特定的套接字選項才能啓用它),那麼ipv4地址將被傳遞給應用程序該套接字爲「ipv4映射地址」。你使用的庫可能或我不會將它隱藏起來(我不熟悉MVC的功能)。

    如果您接受來自nat64或代理的連接,您將會明顯看到nat/proxy的地址。在代理服務器的情況下,可以從代理服務器發送的信息中確定客戶端的真實IP地址。

    當涉及到檢索和處理IP地址時,是否還有其他可能會遇到的IPv6問題?

    存儲/傳輸IPv4地址爲32位整數或長度限制較短的字符串的任何位置都可能需要返工。


    我強烈建議你爲自己設置一個測試網絡並開始試驗這些東西。