我知道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位整數或長度限制較短的字符串的任何位置都可能需要返工。
我強烈建議你爲自己設置一個測試網絡並開始試驗這些東西。
感謝您解決困惑。這件事情看起來很複雜,我發言的大多數開發人員對此知之甚少。 – Gruber
看來,不幸的是開發人員在規劃引入IPv6時沒有得到足夠的重視。這會在不久的將來引起一些頭痛。軟件改進組織(sig.eu)做了一些研究,發現12%的商業軟件並不是用來處理IPv6 ...... :-( –