Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
339 lines (265 sloc) 14.4 KB
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IPv6 related</title>
<meta name="generator" content="muse.el" />
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" />
<style type="text/css">
body {
background: white; color: black;
margin-left: 3%; margin-right: 7%;
}
p { margin-top: 1% }
p.verse { margin-left: 3% }
.example { margin-left: 3% }
h2 {
margin-top: 25px;
margin-bottom: 0px;
}
h3 { margin-bottom: 0px; }
</style>
</head>
<body>
<h1>IPv6 related</h1>
<!-- Page published by Emacs Muse begins here -->
<hr />
<h2>Tips</h2>
<p class="first">socket API 中 gethostbyname 不支持 ipv6, 使用 getaddrinfo 替代.</p>
<dl>
<dt><strong>Classless Inter-Domain Routing (CIDR)</strong></dt>
<dd>Classless Inter-Domain Routing. A new IP addressing scheme that replaces the older system based on classes A, B, and C. With CIDR, a single IP address can be used to designate many unique IP addresses. A CIDR IP address looks like a normal IP address except that it ends with a slash followed by a number, called the IP prefix. For example: 172.200.0.0/16.</dd>
</dl>
<hr />
<h2>IPv6地址类型 <sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup></h2>
<h3>单点传送(单播)地址</h3>
<p class="first">一个IPv6单点传送地址与单个接口相关联。发给单播地址的包传送到由该地址标识的单接口上。但是为了满足负载平衡系统,在RFC 2373中允许多个接口使用同一地址,只要在实现中这些接口看起来形同一个接口。</p>
<p><strong><em>可聚集全球单点传送地址</em></strong></p>
<p>可聚集全球单点传送地址,顾名思义是可以在全球范围内进行路由转发的地址,格式前缀为001,相当于IPv4公共地址。</p>
<!-- This HTML table template is generated by emacs 24.0.50.1 -->
<table border="1">
<tr>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;8&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
&nbsp;001&nbsp;
</td>
<td align="left" valign="top">
&nbsp;TLA&nbsp;ID&nbsp;
</td>
<td align="left" valign="top">
&nbsp;Res&nbsp;
</td>
<td align="left" valign="top">
&nbsp;NLA&nbsp;ID&nbsp;
</td>
<td align="left" valign="top">
&nbsp;SLA&nbsp;ID&nbsp;
</td>
<td align="left" valign="top">
&nbsp;Interface&nbsp;ID&nbsp;
</td>
</tr>
</table>
<ul>
<li>001是格式前缀,用于区别其它地址类型</li>
<li>TLA(Top Level Aggregator,顶级聚合体)</li>
<li>Res是8位保留位,以备将来TLA或NLA扩充之用</li>
<li>NLA(Next Level Aggregator,下级聚合体)</li>
<li>SLA(Site Level Aggregator,节点级聚合体)</li>
</ul>
<p>TLA是与长途服务供应商和电话公司相互连接的公共骨干网络接入点,其ID的分配由国际Internet注册机构IANA严格管理。NLA通常是大型ISP,它从TLA处申请获得地址,并为SLA分配地址。SLA也可称为订户(subscriber),它可以是一个机构或一个小型 ISP。SLA负责为属于它的订户分配地址。SLA通常为其订户分配由连续地址组成的地址块,以便这些机构可以建立自己的地址层次结构以识别不同的子网。分层结构的最底层是网络主机。</p>
<p><strong><em>本地使用单点传送地址</em></strong></p>
<p>本地单点传送地址的传送范围限于本地,又分为链路本地地址和站点本地地址两类,分别适用于单条链路和一个站点内:</p>
<dl>
<dt><strong>链路本地地址</strong></dt>
<dd>链路本地地址,格式前缀为1111 1110 10,用于同一链路的相邻节点间通信,如单条链路上没有路由器时主机间的通信。链路本地地址相当于当前在Windows下使用169.254.0.0/16前缀的APIPA IPv4地址,其有效域仅限于本地链路。链路本地地址可用于邻居发现,且总是自动配置的,包含链路本地地址的包永远也不会被IPv6路由器转发。</dd>
<dt><strong>站点本地地址</strong></dt>
<dd>站点本地地址,格式前缀为1111 1110 11,相当于10.0.0.0/8、172.16.0.0/12和 192.168.0.0/16等IPv4私用地址空间。例如企业专用Intranet,如果没有连接到IPv6 Internet上,那么在企业站点内部可以使用站点本地地址,其有效域限于一个站点内部,站点本地地址不可被其他站点访问,同时含此类地址的包也不会被路由器转发到站外。一个站点通常是位于同一地理位置的机构网络或子网。与链路本地地址不同的是,站点本地地址不是自动配置的,而必须使用无状态或全状态地址配置服务。</dd>
</dl>
<p>站点本地地址允许和Internet不相连的企业构造企业专用网络,而不需要申请一个全球地址空间的地址前缀。如果该企业日后要连入Internet,它可以用它的子网ID和接口ID与一个全球前缀组合成一个全球地址。IPv6自动进行重编号。</p>
<p><strong><em>兼容性地址</em></strong></p>
<p>在IPv4向IPv6的迁移过渡期,两类地址并存,我们还将看到一些特殊的地址类型。</p>
<dl>
<dt><strong>IPv4兼容地址</strong></dt>
<dd>IPv4兼容地址,可表示为0:0:0:0:0:0:w.x.y.z或::w.x.y.z(w.x.y.z是以点分十进制表示的IPv4地址),用于具有IPv4和IPv6两种协议的节点使用IPv6进行通信。</dd>
<dt><strong>IPv4映射地址</strong></dt>
<dd>IPv4映射地址是又一种内嵌IPv4地址的IPv6地址,可表示为0:0:0:0:0:FFFF:w.x.y.z或::FFFF:w.x.y.z。这种地址被用来表示仅支持IPv4地址的节点。</dd>
<dt><strong>6to4地址</strong></dt>
<dd>6to4地址用于具有IPv4和IPv6两种协议的节点在IPv4路由架构中进行通信。6to4是通过IPv4路由方式在主机和路由器之间传递IPv6分组的动态隧道技术。</dd>
</dl>
<h3>多点传送(组播)地址</h3>
<p class="first">一个多点传送地址标识多个接口。发给组播地址的包传送到该地址标识的所有接口上。IPv6协议不再定义广播地址,其功能可由组播地址替代。</p>
<p>IPv6的多点传送(组播)与IPv4运作相同。多点传送可以将数据传输给组内所有成员。组的成员是动态的,成员可以在任何时间加入一个组或退出一个组。</p>
<p>IPv6多点传送地址格式前缀为1111 1111,此外还包括标志(Flags)、范围域和组ID等字段。</p>
<!-- This HTML table template is generated by emacs 24.0.50.1 -->
<table border="1">
<tr>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;112&nbsp;&nbsp;&nbsp;&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
&nbsp;1111&nbsp;1111&nbsp;
</td>
<td align="left" valign="top">
&nbsp;Flags&nbsp;
</td>
<td align="left" valign="top">
&nbsp;Scope&nbsp;
</td>
<td align="left" valign="top">
&nbsp;Group&nbsp;ID&nbsp;
</td>
</tr>
</table>
<ul>
<li>4位Flags,可表示为:000T。其中高三位保留,必须初始化成0。T=0 表示一个被IANA永久分配的多点传送地址;T=1表示一个临时的多点传送地址</li>
<li>4位Scope是一个多点传送范围域,用来限制多点传送的范围</li>
<li>Group ID标识一个给定范围内的多点传送组。永久分配的组ID独立于范围域,临时组ID仅与某个特定范围域相关</li>
</ul>
<p>在RFC 2373中定义的Scope字段值</p>
<table class="muse-table" border="2" cellpadding="5">
<thead>
<tr>
<th>Value</th>
<th>范围域</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>保留</td>
</tr>
<tr>
<td>1</td>
<td>结点本地</td>
</tr>
<tr>
<td>2</td>
<td>链路本地</td>
</tr>
<tr>
<td>5</td>
<td>站点本地</td>
</tr>
<tr>
<td>8</td>
<td>机构本地</td>
</tr>
<tr>
<td>E</td>
<td>全球范围</td>
</tr>
<tr>
<td>F</td>
<td>保留</td>
</tr>
</tbody>
</table>
<h3>任意点传送(任播)地址</h3>
<p class="first">任意点传送地址标识一组接口(通常属于不同的节点),发送给任播地址的包传送到该地址标识的一组接口中根据路由算法度量距离为最近的一个接口。如果说多点传送地址适用于one-to-many的通讯场合,接收方为多个接口的话,那么任意点传送地址则适用于one-to-one-of-many的通讯场合,接收方是一组接口中的任意一个。</p>
<p>一个 IPv6任意点传送地址被分配给一组接口(通常属于不同的节点)。发往任意点传送地址的包传送到该地址标识的一组接口中根据路由算法度量距离为最近的一个接口。目前,任意点传送地址仅被用做目标地址,且仅分配给路由器。任意点传送地址是从单点传送地址空间中分配的,使用了单点传送地址格式中的一种。</p>
<p>子网-路由器任意点传送地址必须经过预定义,该地址从子网前缀中产生。为构造一个子网-路由器任意点传送地址,子网前缀必须固定,余下的位数置为全“0”。</p>
<!-- This HTML table template is generated by emacs 24.0.50.1 -->
<table border="1">
<tr>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;bits&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</td>
<td align="left" valign="top">
&nbsp;128&nbsp;-&nbsp;n&nbsp;bits&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
&nbsp;Subnet&nbsp;Prefix&nbsp;
</td>
<td align="left" valign="top">
&nbsp;&nbsp;&nbsp;000...000&nbsp;&nbsp;
</td>
</tr>
</table>
一个子网内的所有路由器接口均被分配该子网的子网-路由器任意点传送地址。子网-路由器任意点传送地址用于一组路由器中的一个与远程子网的通信。
<h2>主机和路由地址</h2>
<h3>IPv6主机地址</h3>
<p class="first">在IPv4中,如果一台主机安装一张网卡,那么典型的情况是该主机有一个分配给网卡的IPv4地址。但IPv6则不同,通常一台IPv6主机有多个IPv6地址,即使该主机只有一个单接口。一台IPv6主机可同时拥有以下几种单点传送地址:</p>
<ul>
<li>每个接口的链路本地地址</li>
<li>每个接口的单点传送地址(接口的单点传送地址可以是一个站点本地地址和一个或多个可聚集全球地址)</li>
<li>环路(loopback)接口的环路地址(::1)</li>
</ul>
<p>一台典型的IPv6主机至少有两个地址:1、接收本地链路信息的链路本地地址 2、可路由的站点本地地址或全球地址。</p>
<p>此外,每台主机还需要时刻保持收听以下多点传送地址上的信息流:</p>
<ul>
<li>节点本地范围内所有节点组播地址(FF01::1)</li>
<li>链路本地范围内所有节点组播地址(FF02::1)</li>
<li>请求节点(solicited-node)组播地址(如果主机的某个接口加入请求节点组)</li>
<li>组播组多点传送地址(如果主机的某个接口加入任何组播组)</li>
</ul>
<h3>IPv6路由器地址</h3>
<p class="first">一台IPv6路由器可被分配以下几种单播地址:</p>
<ul>
<li>每个接口的链路本地地址</li>
<li>每个接口的单点传送地址(接口的单点传送地址可以是一个站点本地地址和一个或多个可聚集全球地址)</li>
<li>子网-路由器任意点传送地址</li>
<li>其他任意点传送地址(可选)</li>
<li>环路接口的环路地址(::1)</li>
</ul>
<p>此外,路由器需要时刻保持收听以下多点传送地址上的信息流:</p>
<ul>
<li>节点本地范围内的所有节点组播地址(FF01::1)</li>
<li>节点本地范围内的所有路由器组播地址(FF01::2)</li>
<li>链路本地范围内的所有节点组播地址(FF02::1)</li>
<li>链路本地范围内的所有路由器组播地址(FF02::2)</li>
<li>站点本地范围内的所有路由器组播地址(FF05::2)</li>
<li>请求节点(solicited-node)组播地址(如果路由器的某个接口加入请求节点组)</li>
<li>组播组多点传送地址(如果路由器的某个接口加入任何组播组)</li>
</ul>
<h2>IPv6与域名系统</h2>
<p class="first">IPv6的域名系统支持以下两个新特性(可参阅RFC 1886):主机地址(AAAA)资源记录和为逆向解析提供的IP6.INT域。</p>
<h3>AAAA资源记录类型</h3>
<p class="first">AAAA资源记录类型用来将一个合法域名解析为IPv6地址,与IPv4所用的A资源记录类型相兼容。之所以给这新资源记录类型取名为AAAA,是因为128位的IPv6地址正好是32位IPv4地址的四倍,下面是一条AAAA资源记录实例:</p>
<blockquote>
<p class="quoted">host1.microsoft.com IN AAAA FEC0::2AA:FF:FE3F:2A1C</p>
</blockquote>
<h3>IP6.INT域</h3>
<p class="first">IP6.INT域用于为IPv6提供逆向地址-主机名解析服务。逆向检索也称为指针检索,根据IP地址来确定主机名。为了给逆向检索创建名字空间,在IP6.INT域中,IPv6地址中所有的32位十六进制数字都逆序分隔表示。例如,为地址FEC0::2AA:FF:FE3F:2A1C(全表达式为:FEC0:0000:0000:0000:02AA:00FF:FE3F:2A1C)查找域名时,在IP6.INT域中是:</p>
<blockquote>
<p class="quoted">C.1.A.2.F.3.E.F.F.F.0.0.A.A.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.C.E.F.IP6.INT.</p>
</blockquote>
<hr />
<p class="footnote"><a class="footnum" name="fn.1" href="#fnr.1">1.</a> <a href="http://sj.media.edu.cn/xiayidai/index2.php?IDx=285">http://sj.media.edu.cn/xiayidai/index2.php?IDx=285</a></p>
<!-- Page published by Emacs Muse ends here -->
</body>
</html>