網絡編程第12章: IPV4和IPV6的互操作性

IPV4客戶和IPV6服務器

TCP: 假設IPV6服務器是一個雙協議棧,也就是包含一個IPV4處理模塊和IPV6處理模塊,當數字鏈路接收到IPV4套接字,IPV4模塊就把這個IPV4地址映射爲一個等價的IPV6地址. 當accept系統調用把這個已接受的IPV4客戶返回給服務器進程的時候,這個映射後的IPV6地址講會作爲客戶的IPV6地址.
UDP: 當UDP服務器接收到IPV4鏈接,那麼由recvfrom返回地址是客戶地址映射的IPV6地址. 服務器以這個映射的IPV6地址調用sendto相應客戶.

IPV6客戶和IPV4服務器.

在客戶端:
1 一個IPV4服務器建立一個IPV4套接字.
2 IPV6客戶啓動後,使用getaddrinfo查找IPV6地址, 因爲服務器是IPV4,所以返回給客戶的是一個IPV4映射的IPV6地址.
3 IPV6客戶以這個映射後的IPV6地址爲目的地址進行,調用connect,內核發送一個IPV6syn到服務器.
4 連接通過IPV4數據報建立.

IPV6地址測試宏

有些應用進程需要知道和自己通信的是IPV4還是IPV6. 所以有七個宏測試IPV6地址的基本類型,有5個宏測試IPV6多播的範圍.在P283頁,

比如一個IPV6的客戶必須弄清楚服務器是IPV4還是IPV6,因爲兩者所需要的port指令格式是不同的.

源代碼的可移植性

將IPV4的網絡應用程序轉換用上IPV6:
第一步去除所有的gethostbyname 和 gethostbyaddr, 改用getaddrinfo 和getnameinfo.

如果某個應用程序在不支持IPV6的網絡上運行,
如果,本地名字服務器可以通過getaddrinfo返回AAAA記錄,那就可以運行.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章