ipv6的普及離不開DNS(域名系統)對IPv6的支持。管理日本域名的DNS服務器已經開始支持IPv6。不過,位于其上游、管理路由域名的服務器(路由服務器)在這一方面卻相對滯后。其原因就是存在“512Byte問題”。此次我們就來探討一下DNS支持IPv6方面的障礙——“512Byte問題”。 DNS是負責根據域名分配IP地址的系統。在DNS標準中,數據量均控制在512Byte以下,通過一個UDP數據包進行傳輸。 目前, 通過DNS發出路由服務器地址請求時,就會接收到在全球運行的13臺路由服務器的域名和IPv4地址。服務器之所以為13臺,是因為其數量受到DNS可交換數據量--512Byte的限制。也就是說,僅有13份域名和IPv4地址的話,還勉強可以控制在512Byte以內的容量內。 DNS不能通過UDP傳輸超過512Byte的數據。這就是所謂的“512Byte問題”。 如果DNS支持IPv6的話,在請求的應答當中,IPv6地址就會與IPv4地址一起發送過來。在請求路由服務器地址時,除13份的域名和IPv4地址外,還需要發送13份的IPv6地址。這樣一來,返回的信息量自然就超過了512Byte。 DNS服務器在交換超過512Byte的數據時采用TCP代替UDP。但是,采用TCP會增大DNS服務器的負荷。這是因為需要進行TCP連接的確立和切斷等處理。假如位于域名上游的所有路由服務器均由于高負荷的TCP處理而導致性能下降,那么整個DNS就會停止工作。這一點是采用TCP無論如何也無法避免的。 那么,管理日本域名的DNS服務器為什么可以支持IPv6呢?這是因為通過在登錄到上游路由服務器的信息上采取措施,將應答數據包的容量控制在了512Byte以內。在將日本域名登錄至路由服務器時,需要登錄的服務器只有6臺,減少了需要登錄的路由服務器數量,此外,還將這些域名統一縮短為a.dns.jp和b.dns.jp等。 不過,從根本上解決512Byte問題的方案也已經亮相。人們已開始利用旨在通過UDP幫助DNS交換超過512B的數據的“EDNS0(Extension Mechanisms For DNS Version 0)”。使用EDNS0,在向DNS發出請求時,可以通知對方自己可接收的UDP數據包的最大數據容量。使用這一功能,就可以通過一個UDP數據包來交換超過512Byte的數據。應用最廣泛的DNS服務器軟件“BIND”的最新版本Version 9即可支持EDNS0。