IPv4與IPv6的互操作性

2021-07-25 07:40:29 字數 1101 閱讀 5044

雙棧主機的乙個基本特性是其上的ipv6伺服器既能處理ipv4客戶,也能處理ipv6客戶,這是通過ipv4對映ipv6位址實現的

>ipv6伺服器建立乙個ipv6監聽套接字,ipv4客戶端通過gethostbyname找到伺服器的乙個a記錄,(雖然ipv6伺服器有a記錄和aaaa記錄),ipv4客戶端只使用a記錄,客戶端通過connect,導致客戶端向伺服器主機傳送乙個ipv4 syn到伺服器,  伺服器(ipv6)接收這個ipv4 syn,設定乙個標誌指示本鏈結使用ipv4對映ipv6位址,然後響應乙個ipv4 syn/ack, 建立鏈結後,accept返回給伺服器的位址就是個ipv4對映的ipv6位址

當伺服器往這個ipv4對映的ipv6位址傳送tcp分節時,,其ip棧產生的目的位址為所對映ipv4位址的ipv4載送資料報

ipv4監聽套接字只能接受來自ipv4客戶的連線

如果乙個伺服器繫結了乙個ipv6監聽套接字,而且該套接字未設定ipv6_v6only套接字選項,那麼該監聽套接字既能接收來自ipv4客戶端的請求,也能接受來自ipv6客戶端的請求

那麼ipvc6的客戶端會呼叫getaddrinfo() 查詢ipv4的位址,,既然伺服器值支援ipv4,那麼伺服器主機只有a記錄, getaddrinfo()返回給客戶的是乙個ipv4位址到ipv6位址的對映

nt in6_is_addr_mc_nodelocal(const struct in6_addr *aptr);

int in6_is_addr_mc_linklocal(const struct in6_addr *aptr);

int in6_is_addr_mc_sitelocal(const struct in6_addr *aptr);

int in6_is_addr_mc_orglocal(const struct in6_addr *aptr);

int in6_is_addr_mc_global(const struct in6_addr *aptr);

前7個測 試ipv6位址的基本型別, 後5個測試ipv6多播位址的範圍

《網路程式設計》IPv4 與 IPv6 相互操作

由於網際網路終端不斷增加,ipv4 位址長度 32位 已不能夠滿足要求,所以出現了 ipv6位址 128位 但是現有應用程式大部分還是採用 ipv4 位址形式,所以必須解決 ipv4 與 ipv6 之間的相互操作,使現有基於 ipv4 的應用程式能夠與基於 ipv6 的應用程式相互通訊。那麼我們怎麼...

《網路程式設計》IPv4 與 IPv6 相互操作

因為網際網路終端不斷新增。ipv4 位址長度 32位 已不可以滿足要求。所以出現了 ipv6位址 128位 可是現有應用程式大部分還是採用 ipv4 位址形式,所以必須解決 ipv4 與 ipv6 之間的相互操作,使現有基於 ipv4 的應用程式可以與基於 ipv6 的應用程式相互通訊。那麼我們怎麼...

IPV4與IPV6的區別

在windows 7以上系統中,在設定本地ip位址的時候經常會看到同事含有ipv4協議項與ipv6協議項,並不同於以往windows xp系統中僅有tcp ip協議項,不少朋友都覺得比較奇怪,詢問編輯ipv4與ipv6的區別,下面編輯就為大家權威的介紹下ipv4與ipv6有什麼區別。目前的全球網際網...