<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>怡水若寒/王聪的博客 &#187; dns</title>
	<atom:link href="http://www.ysrh.com/index.php/tag/dns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ysrh.com</link>
	<description>Cory WONG &#039;s Blog</description>
	<lastBuildDate>Sat, 17 Jul 2010 02:17:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>详解DNS原理 &#8211; 六省断网其实和DNSPod无关</title>
		<link>http://www.ysrh.com/index.php/dns-error-dnspod/</link>
		<comments>http://www.ysrh.com/index.php/dns-error-dnspod/#comments</comments>
		<pubDate>Sat, 23 May 2009 10:22:31 +0000</pubDate>
		<dc:creator>怡水若寒</dc:creator>
				<category><![CDATA[生活杂记]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[dnspod]]></category>

		<guid isPermaLink="false">http://blog.ysrh.com/?p=10</guid>
		<description><![CDATA[最近在CB上看到多篇存在关于DNS故障的文章，其中大多存在谬误，让人产生问题在于DNSPod，而暴风影音是无辜的受害者的错觉。这里我觉得有必要出来说说DNSPod才是无辜受害者，错全在暴风（还有黑客）。首先说说DNS是怎么注册的：
一个域名注册成功以后上级域名的拥有者把这个域名的解析授权（Delegate）给用户指定的域名服务器，此时该服务器成为该域的权威（Authoritative）服务器，一切到该域名的查询以此服务器提供的结果为准。（也存在不授权只设置NS记录的情况。）
比如新浪注册了sina.com，向VeriSign交了钱以后，VeriSign在他们的根域名服务器里面添加如下的记录：
sina.com. 60 IN NS ns3.sina.com.cn.
sina.com. 60 IN NS ns1.sina.com.cn.
sina.com. 60 IN NS ns2.sina.com.cn.
ns1.sina.com.cn. 37305 IN A 202.106.184.166
ns2.sina.com.cn. 37305 IN A 61.172.201.254
ns3.sina.com.cn. 37305 IN A 202.108.44.55
然后我们看如何解析：
因为DNS是非常基础的服务直接关系到网络访问的效率，所以DNS是采用多级缓存的方式运作的。通常一个程序发出DNS请求以后，系统会先搜索自己的DNS 缓存，没有找到则会向网络设置中的DNS服务器发出请求。对一个电信用户来说这个服务器被DHCP协议自动配制成电信指定的服务器。
电信的DNS服务器在收到请求后还是检查自己的缓存，与个人电脑的缓存机制不同的是，一般公共DNS服务器为了加快解析减少流量，都将一个成功的解析缓存域名记录中指定的最长时间（即TTL值，常见的是3600秒）。但如果缓存里没有这个域名的记录，此时根据配置不同有两种选择：一是向自己的上级DNS服务器请求（Forwarder），二是从root-hints开始逐级向下解析。比如当收到www.sina.com的请求的时候，DNS发现缓存里有.com的域名的NS（域名服务器指向）记录，随即向该服务器请求sina.com，获得一个新浪的域名的NS记录以后转而向该服务器请求 www.sina.com。新浪的服务器返回结果，解析成功并将结果返回用户，同时将中间所有的结果都缓存下来以备下次使用。
从上面的过程可以看出，绝大多数的用户频繁访问的域名都已经在比较低级的DNS缓存了，一般几小时才会向该域名 的权威服务器发送请求。
再来看看此次断网事件：
首先DNSPod被攻击了，其实在断网前几天DNSPod的Web服务器（和NS1）也被攻击过。因为流量巨大，当地电信在骨干网上封掉了他们电信主域名服务器的IP。
3600 秒以后，缓存在各地DNS服务器上的暴风的记录过期，但此时暴风指向DNSPod的NS记录还没有过期（一般是24小时），于是各地的DNS继续向已经被封掉IP的服务器发送查询。由于域名查询使用UDP协议，服务器不会马上意识到对方主机已经下线（也可能与电信封IP的方式也有关，没有返回ICMP 包），在超时以后才放弃查询。但由于DNS服务器一般被配置为不缓存失败的查询，所以下一个DNS请求来的时候它还是得去向那个封掉的IP发送查询。
（注意此时DNSPod的IP被电信封了，后续所有的内容都和DNSPod无关。）
然后我们看看暴风客户端在干什么，首先它很”无辜“地向自己的服务器请求一个广告或者升级，于是需要解析服务器的域名。电信的DNS服务器收到请求以后，等待两秒没收到结果，只好对客户端说sorry。可是暴风客户端马上开始重试重试再重试，于是全国上亿的暴风用户都向DNS服务器发出的请求。由于这些服务器始终无法解析出域名，这些请求逐渐被堆积在内存里。最悲哀的是每个请求需要有一个请求ID以对应每一个客户端，而这个ID数量是有限的，当并发请求数达到一定数量的时候内存或者ID耗尽，服务器拒绝服务了。
从以上可以看出，此次的元凶除了最早攻击DNSPod的黑客以外，大概就是暴风流氓式的程序设计了。
]]></description>
			<content:encoded><![CDATA[<p>最近在CB上看到多篇存在关于DNS故障的文章，其中大多存在谬误，让人产生问题在于DNSPod，而暴风影音是无辜的受害者的错觉。这里我觉得有必要出来说说DNSPod才是无辜受害者，错全在暴风（还有黑客）。<strong>首先说说DNS是怎么注册的：</strong><br />
一个域名注册成功以后上级域名的拥有者把这个域名的解析授权（Delegate）给用户指定的域名服务器，此时该服务器成为该域的权威（Authoritative）服务器，一切到该域名的查询以此服务器提供的结果为准。（也存在不授权只设置NS记录的情况。）<br />
比如新浪注册了sina.com，向VeriSign交了钱以后，VeriSign在他们的根域名服务器里面添加如下的记录：<span id="more-10"></span><br />
sina.com. 60 IN NS ns3.sina.com.cn.<br />
sina.com. 60 IN NS ns1.sina.com.cn.<br />
sina.com. 60 IN NS ns2.sina.com.cn.<br />
ns1.sina.com.cn. 37305 IN A 202.106.184.166<br />
ns2.sina.com.cn. 37305 IN A 61.172.201.254<br />
ns3.sina.com.cn. 37305 IN A 202.108.44.55<br />
然后我们看如何解析：<br />
因为DNS是非常基础的服务直接关系到网络访问的效率，所以DNS是采用多级缓存的方式运作的。通常一个程序发出DNS请求以后，系统会先搜索自己的DNS 缓存，没有找到则会向网络设置中的DNS服务器发出请求。对一个电信用户来说这个服务器被DHCP协议自动配制成电信指定的服务器。<br />
电信的DNS服务器在收到请求后还是检查自己的缓存，与个人电脑的缓存机制不同的是，一般公共DNS服务器为了加快解析减少流量，都将一个成功的解析缓存域名记录中指定的最长时间（即TTL值，常见的是3600秒）。但如果缓存里没有这个域名的记录，此时根据配置不同有两种选择：一是向自己的上级DNS服务器请求（Forwarder），二是从root-hints开始逐级向下解析。比如当收到www.sina.com的请求的时候，DNS发现缓存里有.com的域名的NS（域名服务器指向）记录，随即向该服务器请求sina.com，获得一个新浪的域名的NS记录以后转而向该服务器请求 www.sina.com。新浪的服务器返回结果，解析成功并将结果返回用户，同时将中间所有的结果都缓存下来以备下次使用。<br />
从上面的过程可以看出，绝大多数的用户频繁访问的域名都已经在比较低级的DNS缓存了，一般几小时才会向该域名 的权威服务器发送请求。<br />
再来看看此次断网事件：<br />
首先DNSPod被攻击了，其实在断网前几天DNSPod的Web服务器（和NS1）也被攻击过。因为流量巨大，当地电信在骨干网上封掉了他们电信主域名服务器的IP。<br />
3600 秒以后，缓存在各地DNS服务器上的暴风的记录过期，但此时暴风指向DNSPod的NS记录还没有过期（一般是24小时），于是各地的DNS继续向已经被封掉IP的服务器发送查询。由于域名查询使用UDP协议，服务器不会马上意识到对方主机已经下线（也可能与电信封IP的方式也有关，没有返回ICMP 包），在超时以后才放弃查询。但由于DNS服务器一般被配置为不缓存失败的查询，所以下一个DNS请求来的时候它还是得去向那个封掉的IP发送查询。<br />
（注意此时DNSPod的IP被电信封了，后续所有的内容都和DNSPod无关。）<br />
然后我们看看暴风客户端在干什么，首先它很”无辜“地向自己的服务器请求一个广告或者升级，于是需要解析服务器的域名。电信的DNS服务器收到请求以后，等待两秒没收到结果，只好对客户端说sorry。可是暴风客户端马上开始重试重试再重试，于是全国上亿的暴风用户都向DNS服务器发出的请求。由于这些服务器始终无法解析出域名，这些请求逐渐被堆积在内存里。最悲哀的是每个请求需要有一个请求ID以对应每一个客户端，而这个ID数量是有限的，当并发请求数达到一定数量的时候内存或者ID耗尽，服务器拒绝服务了。<br />
<strong>从以上可以看出，此次的元凶除了最早攻击DNSPod的黑客以外，大概就是暴风流氓式的程序设计了。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ysrh.com/index.php/dns-error-dnspod/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
