6 IPv6
IP是互联网的核心协议,现在使用的IP(IPv4)是在20世纪70年代末期设计的。经过几十年的发展,IPv4的地址已经耗尽,ISP已经不能再申请到新的IP地址块了。为了解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即IPv6。
6.1 IPv6地址表示方法
IPv6地址总共有128位,为了便于人工阅读和输入,和IPv4地址一样,IPv6地址也可以用一串字符表示。IPv6地址使用16进制表示,IPv6地址划分成8个块,每块16位,块与块之间用“:”隔开。
# 一个IPv5地址的字符表示
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
# 带有子网前缀的IPv6地址表示
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789/64
# 带有端口的IPv6地址表示
[ABCD:EF01:2345:6789:ABCD:EF01:2345:6789]:8080
同时,对于多个地址块为0的情况时,可以使用“::”号,进行化简。化简原则:
- +全0块“0000”,可以化简为“0”
- +多个全0块,可以化简为“::”
- +一个IPv6地址中只能出现一个“::”,出现多个全0块时,“::”要化简最长的一段,没有最长的要就近(左)
- +“::”可以出现在地址开头或结尾
化简前 | 化简后 |
---|---|
ABCD:0000:2345:0000:ABCD:0000:2345:0000 | ABCD:0:2345:0:ABCD:0:2345:0 |
ABCD:EF01:0:0:0:0:0:6789 | ABCD:EF01::6789 |
ABCD:0:0:0:ABCD:0:0:6789 | ABCD::ABCD:0:0:6789 |
2001:0:0:0:0:0:0:0 | 2001:: |
FF01:0:0:0:0:0:0:101 (多播地址) | FF01::101 |
0:0:0:0:0:0:0:1 (环回地址) | ::1 |
0:0:0:0:0:0:0:0 (未指明地址) | :: |
12AB:0000:0000:CD30:0000:0000:0000:0000/60 | 12AB:0:0:CD30::/60 |
6.2 IPv6地址分类
IPv6地址整体上分为三类:单播地址,任播地址,组播地址。
- 单播地址:一个单播地址对应一个接口,发往单播地址的数据包会被对应的接口接收;
- 任播地址:一个任播地址对应一组接口,发往任播地址的数据包会被这组接口的其中一个接收,被哪个接口接收由具体的路由协议确定;
- 组播地址:一个组播地址对应一组接口,发往组播地址的数据包会被这组的所有接口接收;
地址类型 | 二进制前缀 |
---|---|
未指明地址 | 00…0(128位),可记为::/128 |
环回地址 | 00…1(128位),可记为::1/128 |
多播地址 | 11111111(8位),可记为FF00::/8 |
本地链路单播地址 | 1111111010(10位),可记为FE80::/10 |
全球单播地址 | (除上述四种外,所有其他的二进制前缀) |
- 未指定地址:16字节全0地址,可缩写为::,主要用于系统启动之初,尚未分配IP时,对外请求IP地址时,作为源地址使用,它不能用于数据包的目的地址之中。
- 环回地址:与IPv4环回地址一样,用于自己向自己发送数据包时使用,在日常网络排错中可以测试网络层协议状态。
- 多播地址:功能与IPv4一样,这类地址占IPv6地址总数的1/256。
- 本地链路单播地址:有些单位的网络使用TCP/IP协议,但是没有链接到互联网上。这种网络上的主机都可以使用本地地址进行通信,但不能与互联网上的其他主机通信。本地单播地址的前缀为FE80::/64。这类地址战IPv6地址总数的1/1024。
- 全球单播地址:IPv6中最终多的一类。其划分方法如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULhQnDOT-1653033084969)(https://note.youdao.com/yws/res/21518/WEBRESOURCE4b57b3b37397e0066765df1d7b125c84)]
6.2.1 全球单播地址
- 前3bit 固定001;
- 地址范围:2xxx:xxxxx/3 - 3FFF: :FFFF;
- 2001::/16 IPV6因特网地址;
- 2002::/16 6to4过渡地址;
- 3ffe::/16 用于6bone测试目的的前缀;
接口标识符:指64bit的MAC地址(未来网络适配器的MAC地址),或者是基于48bit MAC地址扩展为64bit(EUI 64)。在全球单播地址中,规定如2001:BCFF:FEA6::/48表示一个IPv6路由前缀,2001:BCFF:FEA6:6C01::/64表示一个IPv6子网前缀。
6.2.2 本地链路地址
固定前缀FE80::/10;当一个节点启用IPv6时自动生成,格式如下图,64位拓展由MAC地址按照EUI 64转换而来。
EUI-64格式:基于MAC地址自动构造;例如:MAC地址为0012:3400:ABCD;
# 首先把MAC地址对半分开,插入一个固定值FFFE;
0012:3400:ABCD ----> 0012:34FF:FE00:ABCD;
# 再把第七位翻转:0----> 1, 1---->0
0012:34FF:FE00:ABCD ----> 0212:34FF:FE00:ABCD;
# 最后加上前缀:
FE80::212:34FF:FE00:ABCD;
6.2.3 本地站点地址
类似于IPv4中的私有地址,仅在内部网络使用,如打印机。
固定前缀FEC0::/10;
对于IPv6本地站点地址的配置,必须通过DHCPv6进行地址的分配、无状态的前缀公告、或者手工的进行输入。
6.2.4 唯一本地地址
ULA,唯一本地地址,概念上相当于私有IP,仅能够在本地网络使用,在IPv6 Internet上不可被路由。上面提到的站点本地地址由于起初的标准定义模糊而被弃用,而后RFC又重新定义了唯一本地地址以满足本地环境中私有IPv6地址的使用。
在RFC4193中标准化了一种用来在本地通信中取代站点本地单播地址的类型。ULA拥有固定前缀FC00::/7,分为两块:FC00::/8暂未定义,FD00::/8定义如下:
6.2.5 未指定地址
形式:0:0:0:0:0:0:0:0/128 --> ::/128
;
表示地址未指定,或者在写默认路由时代表所有路由;
该地址作为某些报文的源IP地址,比如作为重复地址检测时DAD时发送的邻居请求报文的源地址,或者DHCPv6初始化过程中客户端所发送报文的源IP。
6.2.6 回环地址
形式:0:0:0:0:0:0:0:1
;
同IPV4中127.0.0.1地址的含义一样,表示节点自已。
6.2.7 内嵌IPv4
映射IPV4的IPV6地址–仅用于拥有IPV4和IPV6双协议栈节点的本地范围。其中高80bit设为0,后16bit设为1,再跟IPV4地址
0000:0000:0000:0000:0000:ffff:206.123.31.2
0000:0000:0000:0000:0000:ffff:ce7b:1f01
6.3.8.组播地址(IPv6通信的核心)
前缀:FFxx::/8;
在IPV6中没有广播的概念,而是使用用组播来代替;因此IPv6中存在大量的组播使用。
- 标志位为0000表示是永久保留的组播地址,分配给各种技术使用;
- 标志位为0001表示是用户可使用的临时组播地址;
范围段定义了组播地址的范围,其定义如下:
二进制 | 十六进制 | 范围类型 |
---|---|---|
0001 | 1 | 本地接口范围 |
0010 | 2 | 本地链路范围 |
0011 | 3 | 本地子网范围 |
0100 | 4 | 本地管理范围 |
0101 | 5 | 本地站点范围 类似组播的私网地址 |
1000 | 8 | 组织机构范围 |
1110 | E | 全球范围 类似组播的公网地址 |
下面是一些组播指定地址:
地址 | 范围 |
---|---|
FF02::1 | all nodes 在本地链路范围的所有节点 |
FF02::2 | all routers 在本地链路范围的所有路由器 |
FF02::5 | all ospf routers 所有运行OSPF的路由器 |
FF02::9 | all rip routers 所有运行RIP的路由器 |
FF02::A | all eigrp routers 所有运行eigrp的路由器 |
FF05::2 | 在一个站点范围内的所有路由器 |
6.3 IPv6协议格式
RFC2460定义了IPv6数据报格式。总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的,但在IPv6数据报数据部分还可以包括0个或者多个IPv6扩展报头(Extension header), 如下图所示。IP报头部分固定为40字节长度,而有效载荷部分最长不得超过65535字节。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-646TVzim-1653033084971)(https://note.youdao.com/yws/res/21611/WEBRESOURCE222d4c58f9e8946f0d0c063b939a63af)]
6.3.1 基本首部
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UqHilRsu-1653033084971)(https://note.youdao.com/yws/res/21618/WEBRESOURCE671e005b115f0c9e05445880dc1732c4)]
- 版本(version):占4位。指明了协议的版本,对IPv6该字段是6.
- 通信量类(trafiic class):占8位。这是为了区分不同的IPv6数据报的类别或优先级。
- 流标号(flow label):占20位。IPv6的一个新的机制是支持资源预分配,并且允许路由器把每一个数据报与一个给定的资源分配项联系。IPv6剔除了流(flow)的抽象概念。所谓“流”就是互联网上特定源点到特定终点(单播或多播)的一系列数据报(如实时音频或视频传输),而在这个“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有相同的流标号。因此,流标号对实时音频/视频数据的传输特别重要。对于传统的电子邮件或非实时数据,流标号没有用处,把它置为0即可,可以参考[RFC6437]。
- 有效载荷长度(payload length):占16位。指明IPv6数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内)。最大值为64KB(65535字节)
- 下一个首部(next header):占8位,相当于IPv4的协议字段或可选字段。
- 当IPv6数据报没有扩展首部时,此字段的作用和IPv4的协议字段一样,它的值指出基本首部后面的数据应交付IP层上面的哪一层高层协议(如6表示TCP)。
- 当出现扩展首部时,此字段的值就标识后面第一个扩展首部的类型。
- 跳数限制(hop limit):占8位。用来防止数据报在网络中无限期的存在。源点在每个数据报发出时设定某个跳数限制(最大为255)。每个路由器在转发数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为0时,则把这个数据报丢弃。
- 源地址:占128位。数据报发送端的IP地址。
- 目的地址:占128位。数据报接收端的IP地址。
6.3.2 扩展首部
在IPv6中,那些由IPv4选项提供的特殊功能,通过在IPv6头部之后增加扩展头部实现。路由、时间戳、分片和超大分组等功能都在IPv6扩展头部中实现,因此没有为这些特殊功能在IPv6的基本头部分配相应的位。基于这种设计,IPv6头部固定为40字节,扩展头部仅在需要时添加。通常情况下,扩展头部仅由终端主机处理。
IPv6的格式特点一定程度上简化了高性能路由器的设计和实现,因为IPv6路由器处理分组所需的命令比IPv4简单。由于在IPv4的报头中包含了几乎所有的可选项,因此每个中间路由器都必须检查这些选项是否存在。在IPv6中,这些相关选项被统一移到了扩展报头中,这样中间路由器不必处理每一个可能出现的选项(仅有“逐跳选项”报头是必须要处理的),提高了处理器处理数据报文的速度,也提高了其转发的性能。
IPv6扩展报头附加在IPv6报头目的IP地址字段后面,可以有0个,或者多个扩展报头。每一个扩展首部都由若干字段组成,它们的长度也各不同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段。此字段的值指出了在扩展首部后的字段是什么。当使用多个扩展首部时,应按以上的先后顺序出现。高层首部总是放在最后。扩展头部和更高层协议(例如TCP/UDP) 头部与IPv6头部链接起来,形成级联的头部。如下图:
6.3.2.1 扩展报头出现顺序
扩展头部和更高层协议(如TCP和UDP)头部与IPv6头部链接起来构成级联的头部。每个头部中的下一个头部字段标识紧跟着的头部的类型,常见的有逐跳选项、路由选项、分片选项、TCP、UDP和ICMPv6等。其扩展报头出现的顺序如下图所示:
头部类型 | 顺序 | 值 | 参考文献 |
---|---|---|---|
IPv6头部 | 1 | 41 | [RFC2460][RFC2473] |
逐跳选项 | 2 | 0 | [RFC2460]紧跟在IPv6头部之后 |
目的地选项 | 3,8 | 60 | [RFC2460] |
路由选项 | 4 | 43 | [RFC2460][RFC5095] |
分片选项 | 5 | 44 | [RFC2460] |
封装安全载荷(ESP) | 7 | 50 | |
认证(AH) | 6 | 51 | |
(无,没有下一个头部) | 9 | 59 | [RFC2460] |
ICMPv6 | 最后 | 58 | |
UDP | 最后 | 17 | |
TCP | 最后 | 6 | |
各种其他高层协议 | 最后 |
除了"逐跳选项"的位置之外(它是强制性的),扩展头部的顺序是建议性的,因此一个IPv6的实现必须按接收的顺序处理扩展头部。只有"目的地选项" 头部可以使用两次。第一次是指出包含在IPv6头部中的目的IPv6地址,第二次(位置8)是关于数据报的最终目的地。在某些情况下(例如使用路由头部),当数据报被转发到最终目的地时,IPv6头部中的目的IP地址字段将会改变。
基本报头、扩展报头和三层协议数据报文的相互关系如下图所示:
6.3.2.2 扩展报头选项
6.3.2.2.1 逐跳选项报头(Hop-by-hop Options Header)
相对于IPv4,IPv6提供了一种更灵活和可扩展的方式,将扩展和选项相结合。由于IPv4头部空间的限制(最大60字节),那些来自IPv4的选项已停止使用。而IPv6可变长度的扩展头部或编码在特殊扩展头部中的选项可以适应当前更大的Internet。如果选项存在,可放入逐跳选项(与一个数据报传输路径上每个路由器相关)或目的地选项(仅与接收方相关)。
逐跳选项(称为HOPOPT)是唯一由分组经过的每个路由器处理的选项。此扩展报头须被转发路径所有节点处理。目前在路由告警(RSVP和MLDv1)与Jumbo帧处理中使用了逐跳选项头,因为路由告警需要通知到转发路径中所有结点,而Jumbo帧是长度超过65535字节的报文,传输这种报文需要转发路径中所有结点都能正常处理。其格式如下:
- Next Header 表示下一个头的协议类型;
- Hdr Ext Len 表示选项头的长度(不包括 Next Header);
- Options 是一系列选项字段和填充字段的组合。
每个Option的格式又如下所示:
逐跳选项Option的编码为TLV集合(类型-长度-值),其字段说明如下:
- 第一个字节给出了选项类型,包括一些子字段,在选项没被识别时只是一个IPv6节点如何动作,以及在数据报转发时选项数据是否改变。
- 选项数据长度字段给出了选项数据的字节长度。
动作子字段识别规则如下:
值 | 动作 |
---|---|
00 | 跳过选项,继续处理 |
01 | 丢弃数据报 |
10 | 丢弃数据报,并向源地址发送一个“ICMPv6参数问题”消息 |
11 | 与10相同,但仅在分组的目的地不是组播时,发送这个ICMPv6消息 |
如果一个发往组播目的地的数据报中包含一个未知选项,那么大量节点将生成返回源节点的流量。这可通过将动作子字段设置为11来避免。这样设置的好处是,一个新的选项可携带在一个数据报中,并被哪些无法理解它的路由器忽略,这样有助于促进新选项的增量部署。
改变位字段(图中的Chg):
其作用是当选项数据在数据报转发过程中改变时提示(置为1)。
值 | 含义 |
---|---|
0 | 选项数据不会改变选路 |
1 | 选项数据可能改变选路 |
一些已经定义的选项如下:
选项名 | 头部 | 动作 | 改变 | 类型 | 长度 |
---|---|---|---|---|---|
填充1 | HD | 00 | 0 | 0 | N/A |
填充N | HD | 00 | 0 | 1 | 可变 |
超大有效载荷 | H | 11 | 0 | 194 | 4 |
隧道封装限制 | D | 00 | 0 | 4 | 4 |
路由器警告 | H | 00 | 0 | 5 | 4 |
快速启动 | H | 00 | 1 | 6 | 8 |
CALIPSO | H | 00 | 0 | 7 | 8+ |
家乡地址 | D | 11 | 0 | 201 | 16 |
- 头部HD分别表示:逐跳(H)选项或者目的地(D)
- 填充1和填充N
由于IPv6选项需要与8字节的偏移量对齐,因此较小的选项用0填充到满足长度为8字节。填充1选项(类型0)是唯一缺少长度字段和值字段的选项,它仅有1字节长,取值为0。填充N选项(类型1)向头部的选项区域填充2字节或更多字节,并使用TLV的格式。对于n各填充字节,选项数据长度字段包含的值为 (n-2)。 - IPv6超大有效载荷
在某些TCP/IP网络中(例如用于互连超级计算机的网络),由于正常的64KB的IP数据报大小限制,在传输大量数据时会导致不必要的开销。IPv6超大有效载荷选项指定了一种有效载荷大于普通MTU的IPv6数据报,称为超大报文。这个选项无法由MTU小于64KB的链路连接的节点来实现。超大有效载荷选项提供了一个32位的字段,用于携带有效载荷在65536~4294967295字节之间的数据报。当一个用于传输的超大报文形成时,其正常负载长度字段被设置为0。并且在上层协议(例如TCP)中使用Internet校验和算法应计算来自选项的长度值而不是基本头部中的长度字段值。 - 隧道封装限制
隧道是指将一个协议封装在另一个协议中,例如IP数据报可能被封装在另一个IP数据报的有效载荷部分。隧道可用于型号才能虚拟的覆盖网络,在覆盖网络中,一个网络可作为另一个IP的链路层使用。隧道可以嵌套,为让发送者控制最终用于封装的隧道层次,定义了隧道封装限制选项。这个选项的工作原理类似于IPv4的TTL和IPv6的跳数限制字段。 - 路由器警告
路由器警告选项指出数据报包含需要路由器处理的信息,它与IPv4的路由器警告选项相同。 - 快速启动
快速启动(QS)选项和[RFC4782]定义的TCP/IP“快速启动”程序配合使用。选项包括发送者需要的以比特/秒为单位的传输速率的编码值、QS TTL值和一些额外信息。如果沿途的路由器认为可以接受所需的速率,在这种情况下他们将递减QS TTL,并在转发数据报时保持所需的速率不变。如果路由器无法满足,则会将速率减小到一个可以接受的值。若路由器无法识别QS选项,则不递减QS TTL。接收方将向发送方提供反馈,包括接收到的数据报的IPv4 TTL或IPv6跳数限制字段和自己的QS TTL之间的差异,以及获得的速率可能被沿途的路由器所调整。这个消息将被发送方用于确定发送速率。对TTL值进行比较的目的是确保沿途每台路由器参与QS谈判。如果发现任何路由器递减IPv4 TTL或IPv6跳数限制字段,但没有修改QS TTL值,则说明它没有启用QS。 - 家乡地址
当使用IPv6移动选项时,这个选项保存发送数据报的IPv6节点的“家乡”地址。该选项允许移动节点提供自己正常的家乡地址以及它在漫游时的新地址(通常是临时分配)。当其他IPv6节点需要与移动节点通信时,它可以使用该节点的家乡地址。另外IPv6还定义如果家乡地址选项存在,包含它的目的地选项头部必须出现在路由头部之后,并且在分片、认证和ESP头部之前(如果这些头部也存在)。
6.3.2.2.2 目的选项头(Destination Options Header)
- 参数含义与逐跳选项报头相同,目的选项报头包含目的地需要处理的信息;
- 报文的最终目的地和路由头地址列表中的节点都会检查该选项;
- 可出现两次:路由报头之前和上层协议数据报文之前。
6.3.2.2.3 路由头(Routing Header)
IPv6路由头部为发送方提供了一种IPv6数据报控制机制,以控制(至少部分控制)数据报通过网络的路径。目前,路由扩展头部有两个不同版本,分别称为类型0(RH0)和类型2(RH2)。RH0出于安全方面的考虑已被否决[RFC5095], RH2被定义为与移动IP共同使用。用于指定报文转发必须经过的中间节点。
- Next header: 8bit 紧跟在路由首部后面的首部类型
- Hdr Ext Len: 8bit 路由首部长度(不包括 Next Header)
- Routing Type: 8bit 标识路由头部类型(RFC 定义为 0)
- Segements left:8bit 到达目的节点前仍然应当访问的中间节点数
- type-specific data: 可变长度,格式由路由类型(routing type)来决定。根据 Routing Type 的值,给出相应的转发数据。
6.3.2.2.4 分段报头(Fragment Header)
分片头部(Fragment Header)用于IPv6源节点向目的地发送一个大于路径MTU的数据报。1280字节是整个网络中针对IPv6定义的链路层最小MTU。在IPv6中,仅数据报的发送者可以执行分片操作,这点与IPv4不同。
分片头部包括的信息与IPv4头部中的相同,只不过标识符字段是32位,更大的标识符字段提供了切分更多分片的能力。
- 当报文超过了 MTU 时就需要将报文分段发送,分段发送通过分段扩展头来完成;
- Next Header 表示下一个报文头;
- Reserved 是保留字段设为 0;
- Framgment Offset 表示分段偏移量,就是指报文段在原始报文中的位置偏移量;
- Res 是保留字段设置为 0;
- M flag:1 表示后续还有分片报文,0 表示最后一个分片报文;
- Identification 表示分段的 ID 。
6.3.2.2.5 认证报头
- 认证扩展报头用于提供 IP 报文的认证等功能,应用于 IP 安全,提供报文验证、完整性检查;
- RFC2402 中定义了该扩展报头的具体细节。
6.3.2.2.6 封装安全有效载荷头
- 封装安全净载扩展报头主要应用于 IP 安全,提供报文验证、完整性检查和加密;
- RFC2406 中定义了该扩展报头的具体细节。
6.3.2.2.7 上层头
这是用来标识数据报中上层协议类型,如TCP、UDP、ICMP等。
7 网际组管理协议IGMP
了解IGMP,首先要了解下组播。具体见2.6节。下图就是一个典型的多播示例:
7.1 IGMP
IGMP(Internet Group Management Protocol)网际组管理协议,负责IPv4组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
IGMP协议(IPv4) 和MLD协议(IPv6)用来帮助主机指定对那些组感兴趣(加入哪一些多播组),以及确定来自某些特定源的报文应该被接收还是过滤掉。为了实现这一目标,主机需要向本地子网的组播路由器发送一些报文来向组播路由器交互一些多播成员关系管理的信息。
组播使用了D类IP地址,IP地址的范围为224.0.0.0-239.255.255.255。其中224.0.0.1代表子网上的所有计算机,224.0.0.2代表子网上的所有路由器。另外,多播ip地址只可作为目的地址,而且不能生成关于多播地址的差错报文。
IGMP的mac地址为01-00-5e-xx-xx-xx,其中后23bits是ip地址的低23bits。从这也说明了只要知道一个多播ip地址,即可换算出其mac地址,不需要通过arp请求获取mac地址。
IGMP协议到目前已经有三个版本:
- IGMPv1(由RFC 1112 定义) 支持host membership query 和host membership report
- IGMPv2(由RFC 2236 定义) 支持membership query,membership report,Leave Group message
- IGMPv3(由RFC 3376 定义) 支持membership report 和membershipquery
IGMP的两个阶段
1、当某主机加入新的多播组时,该主机向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其它多播路由器
2、组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,判断这些主机是否还继续是组的成员
详细参考:组播学习之——IGMP协议简介
7.2 多播路由选择协议
仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小的代码传送给所有的组成员,这就需要使用到多播路由选择协议。
在多播过程中一个多播组中的成员是动态变化的。多播组员通过IGMP协议向就近的多播路由器注册,表明自己属于哪个多播组某个路由器接收到一个多播分组后会判断是否与本多播组的成员相连,有则转发。
多播路由选择实际上就是要找出以源主机为根节点的多播转发树。同一个多播组,对不用的源点也会有不同的多播转发树。
多播路由协议一般在转发多播数据报时,使用以下三种方法:
- 洪泛和剪除
- 隧道技术
- 基于核心的发现技术。
一些常见的多播路由选择技术:
- 距离向量多播路由选择协议DVNRP
- 基于核心的转发树CBT
- 开发最短通过优先额多播扩展MOSPF
- 协议无关多播-稀疏方式 PIM-SM
- 协议无关多播-密集方式 PIM-DM
8 虚拟专用网VPN
由于IP地址的紧缺,一些机构能申请到的IP远远小于其所拥有的主机。此时并不能保证所有的主机均可以接入到互联网。许多情况下,在机构的网络中只允许部分主机可以链接互联网。故而,在这种网络中,对于仅在本机构内部有效的IP地址称为本地地址(即私网IP),而可以链接互联网的全球唯一IP为全球地址(即公网IP)。
为了防止私网IP与公网IP互相冲入,从RFC1918就指明了一些专用地址,用于私网。2013年4月,RFC6890全面的指出了所有私网IP。如下:
网络类型 | IP分类 | 地址范围 | IP数量 |
---|---|---|---|
私网 | A类 | 10.0.0.0到10.255.255.255 | 1658万个 |
私网 | B类 | 172.16.0.0到172.31.255.255 | 104万个 |
私网 | C类 | 192.168.0.0到192.168.255.255 | 6.5万个 |
公网 | A类 | 1.0.0.0到9.255.255.255 | 1.5亿个 |
公网 | A类 | 11.0.0.0到126.255.255.255 | 19.23亿个 |
公网 | B类 | 128.0.0.0到172.15.255.255 | 7.3亿个 |
公网 | B类 | 172.32.0.0到191.255.255.255 | 3.3亿个 |
公网 | C类 | 192.0.0.0到192.167.255.255 | 0.11亿个 |
公网 | C类 | 192.169.0.0到223.255.255.255 | 5.03亿个 |
采用这样的专用IP地址的网络称为专用网,因为专用IP仅在本机构使用,则很多专网的IP都类型,诸如大家使用的局域网IP就一般都是192.168.xxx.xxx
。故而,专用IP地址页叫做可重用地址(reusalbe address)。
虚拟专用网络(VPN)是一门新型的网络技术,它为我们提供了一种通过公用网络(如最大的公用因特网)安全地对企业内部专用网络进行远程访问的连接方式。我们知道一个网络连接通常由三个部分组成:客户机、传输介质和服务器。VPN网络同样也需要这三部分,不同的是VPN连接不是采用物理的传输介质,而是使用IP隧道技术来作为传输介质的,这个隧道是建立在公共网络或专用网络基础之上的,如因特网或专用Intranet等。
同时要实现VPN连接,企业内部网络中必须配置有一台基于Windows NT或Windows2000 Server(目前Windows系统是最为普及,也是对VPN技术支持最为全面的一种操作系统)的VPN服务器,VPN服务器一方面连接企业内部专用网络(LAN),另一方面要连接到因特网或其它专用网络,这就要VPN服务器必须拥有一个公网IP地址,也就是说企业必须先拥有一个合法的Internet或专用网域名。当客户机通过VPN连接与专用网络中的计算机进行通信时,先由NSP(网络服务提供商)将所有的数据传送到VPN服务器,然后再由VPN服务器将所有的数据传送到目标计算机。因为在VPN隧道中通信能确保通信通道的专用性,并且传输的数据是经过压缩、加密的,所以VPN通信同样具有专用网络的通信安全性。
整个VPN通信过程可以简化为以下4个通用步骤:
- 客户机向VPN服务器发出请求;
- VPN服务器响应请求并向客户机发出身份质询,客户机将加密的用户身份验证响应信息发送到VPN服务器;
- VPN服务器根据用户数据库检查该响应,如果账户有效,VPN服务器将检查该用户是否具有远程访问权限;如果该用户拥有远程访问的权限,VPN服务器接受此连接;
- 最后VPN服务器将在身份验证过程中产生的客户机和服务器公有密钥将用来对数据进行加密,然后通过VPN隧道技术进行封装、加密、传输到目的内部网络。
9 网络地址转换NAT
NAT(Network Address Translation),网络地址转换。通过将内部网络的私有IP地址翻译成全球唯一的公网IP地址,使内部网络可以连接到互联网等外部网络上。
具体参考:网络地址转换(NAT)