网络层课件整理
网络层总结
网络层的功能
网络层的核心功能: 分组转发与路由选择
分组转发(forwarding): 将分组从路由器的输入端口转移到合适的输出端口;
路由(routing)选择: 根据路由算法 (routing algorithms),确定分组从源到目的经过的路径。
4.1 数据报服务和虚电路服务
面向连接的服务
电信网络使用面向连接的方式为电话服提供可靠的传输服务。两个计算机在通信时,也可以先建立虚电路 (Virtual Circuit)连接,保证双方通信所需要的网络资源。双方沿着已建立的虚电路发送分组 分组的首部不需要填写完整的目的主机地址,只需要填写这个虚电路的编号,减少了分组的开销。在通信结束后,要释放建立的虚电路。 在此基础上,使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
一条虚电路的组成如下:源和目的主机之间的路径(即一系列链路和路由器);VC号,沿着该路径的每段链路一个号码;沿着该路径的每台路由器(即虚电路交换机,这里我们统一使用路由器这一名称)中的转发表表项。属于一条虚电路的分组将在它的首部携带一个VC号。
一条虚电路在每段链路上可能具有不同的VC号。
面向无连接的服务
无论子网是如何设计的,从本质上说都无法保证传输的可靠。主机应当接受“网络不可靠”的事实,并有其主机自己完成错误控制和流量控制。路由器的任务就是传送分组。
Inernet阵营提出:计算机具有很强的智能性,具有较强的差错处理能力。可以将差错的处理工作由通信两端的计算机来完成,而不需要网络协议来保证。
设计思路:
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
尽最大努力交付的优势:由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
4.2网际协议IP
与IP协议配套使用的三个协议:
地址解析协议ARP
网际控制报文协议ICMP
网际组管理协议IGMP
ICMP和IGMP要使用IP协议;IP协议要使用ARP协议
4.2.1虚拟互联网络
将网络互连起来需要使用一些中间设备:
物理层:转发器(repeater)
数据链路层:网桥(bridge)
网络层:路由器(router)
网络层以上:网关(gateway)
由于历史原因,也把网络层的路由器都叫做网关
许多不同的计算机网络可以通过路由器互连,使用相同的网际协议IP,即可看作一个虚拟互联网络(在网络层上看起来是一个统一的网络,但是本质还是有区别的)
4.2.2 分类的IP地址
IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
IP 地址现在由互联网名字和数字分配机构ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。
4.2.2.1 IP地址及其表示方法
IP地址的编址方法:(经历了三个历史阶段)
l分类的 IP 地址。这是最基本的编址方法,在1981年就通过了相应的标准协议。
l子网的划分。这是对最基本的编址方法的改进,其标准[RFC 950]在1985年通过。
l无分类IP地址,构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用
IPv4地址表示采用点分十进制记法
l 将IP地址划分为若干个固定类。
l 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
l 主机号在它前面的网络号所指明的网络范围内必须是唯一的。
l 由此可见,一个 IP 地址在整个互联网范围内是唯一的。
各类 IP 地址的网络号字段和主机号字段:
A类B类C类地址都是单播地址(一对一通信)
- A类、B类、C类地址的网络号字段(net-id)分别为1个、2个、3个字节长,而在网络号字段的最前面有1~3bit的类别位,其数值分别规定为0,10,110
- A类、B类、C类地址的主机号字段分别为3个、2个、1个字节长
- D类地址(前四位是1110)用于多播(一对多通信)
- E类地址(前四位1111)保留为以后使用
4.2.2.2 常用的三类IP地址
4.2.3
硬件地址=MAC地址=物理地址
4.2.4 ARP协议
1、定义:即地址解析协议,用于将设备在网络层使用的 IPV4 地址,解析得到在数据链路层使用的硬件地址。
2、ARP高速缓存:每个设备都设有一个 ARP 高速缓存 (ARP cache),按以下格式存放最近获得的,本地局域网上各主机和路由器的 IP 地址到 MAC 地址的映射定,以减少 ARP 广播的数量:
ARP报文格式
在图4-2所示的以太网ARP帧各字段含义如下:
DST:6字节,目的以太网地址,对于ARP请求,为广播地址FF-FF-FF-FF-FF-FF;对于ARP 应答,为发送ARP 请求的请求方的以太网地址。
SRC:6字节,源以太网地址。对于ARP请求,为发送ARP 请求的请求方的以太网地址;对于ARP 应答,为发送ARP响应分组的响应方的以太网地址。
硬件类型:2字节,指明硬件地址类型 对于以太网该值为1
协议类型:2字节,指出映射的协议地址类型,对于IPv4地址,该值为0x0800
硬件大小:1字节,指出硬件地址的字节数,对于以太网为6
协议大小:1字节,指出协议地址的字节数,对于IPV4协议为4
Op:2字节,指出该数据帧中ARP分组的类型:ARP请求(值为1)、 ARP应答(2)、 RARP请求(3)或RARP应答(4)
发送方硬件地址:6字节以太网地址;
对于ARP请求,为发送ARP 请求的请求方的以太网地址;
对于ARP 应答,为发送ARP应答的应答方的以太网地址。
发送方协议地址:4字节IPV4地址;
对于ARP请求,为发送ARP 请求的请求方的IPV4地址;
对于ARP 应答,为发送ARP应答的应答方的IPV4地址。
目的硬件地址:6字节以太网地址;
对于ARP请求,为全0;
对于ARP 应答,为发送ARP请求的请求方的以太网地址。
目的协议地址:4字节IPV4地址;
对于ARP请求,为待解析的目标主机的IPV4地址(即收到ARP请求后,会发送ARP应答的应答方的IPV4地址);
对于ARP应答,为发送ARP请求的发送方的IPV4地址。
ARP解析过程
STEP1: A要向B(B是本地局域网内的主机或路由器)发送数据报, 先在A的ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,查出B对应的硬件地址,直接使用此硬件地址做为目的地址,向B 发送包含数据报的MAC帧。否则,执行STEP2
STEP2:ARP进程在本地局域网上,以目的地MAC地址 = FF-FF-FF-FF-FF-FF在本地广播发送 ARP 请求分组,LAN上的所有主机和路由器都接收到此ARP请求,并将A的IP地址和MAC地址映射写入各自ARP高速缓存(或更新已有条目)
STEP3:主机B将包含自己MAC 地址的ARP响应分组,封装入应答帧,单播发送到A的MAC地址
STEP4:收到B的 ARP 响应分组后,A将得到的B的IP 地址与硬件地址的映射,写入A的 ARP 高速缓存。
至此,ARP 解析完成,图例如下所示:
4.2.5 IP数据报
IP数据报格式
一个 IP 数据报由首部和数据两部分组成。
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的。
版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)。
首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
区分服务——占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段
总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元MTU。
标识(identification) ——占 16 位,它是一个计数器,用来产生 IP 数据报的标识。
标志(flag) ——占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF=1 表示后面“还有分片”。MF=0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF=0 时才允许分片。
片偏移——占13 位,指出:较长的分组在分片后某片在原分组数据部分中的相对位置。片偏移以 8 个字节为偏移单位。
生存时间——占8 位,记为 TTL (Time To Live),指示数据报在网络中可通过的路由器数的最大值。
协议——占8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给那个处理过程
首部检验和——占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法,与udp检验相同。
源地址和目的地址都各占 4 字节
IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
4.2.6 IP层转发分组的流程
4.3 划分子网和构造超网
4.3.1划分子网
l 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
l 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
子网掩码
l 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
l 使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分。
规则:
l 子网掩码长度 = 32 位
l 子网掩码左边部分的一连串 1,对应于网络号和子网号
l 子网掩码右边部分的一连串 0,对应于主机号
4.3.2 使用子网时分组的转发
4.3.3 CIDR
l CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
l CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
l IP 地址从三级编址(使用子网掩码)又回到了两级编址。
构成超网
l 前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。
l 这些 C 类地址合起来就构成了超网。
l CIDR 地址块中的地址数一定是 2 的整数次幂。
l 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
l CIDR 的一个好处是:可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。
最长前缀匹配
4.4 ICMP
为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。其报文格式如下:
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
常用的ICMP报文类型有:
ICMP差错报告报文
终点不可达(Destination Unreachable-type3)
源站抑制(Source Quench-type4)
超时(Time Exceeded-Type11)
参数问题(Parameter Problem-Type12)
重定向(Redirect-Type5)
ICMP询问报文
回送请求和响应报文(Echo Request/Reply-Type0/8)
时间戳请求和响应报文(TimeStamp Request/Reply-Type13/14)
掩码地址请求和响应报文(Address Mask Request/Relpy-Type17/18)
路由器询问和通告报文(Router Advertisement/Solicitation-Type9/10)
4.5路由选择协议
4.5.1有关路由选择协议的几个基本概念
算法必须是正确的和完整的。
算法在计算上应简单。
算法应能适应通信量和网络拓扑的变化,即要有自适应性。
算法应具有稳定性。
算法应是公平的。
算法应是最佳的。
静态路由选择也叫非自适应路由选择
动态路由选择也叫自适应路由选择
4.5.2 RIP
RIP (Routing Information Protocol)协议是内部网关协议IGP中最先得到广泛使用的协议。RIP是一种分布式的、基于距离向量的路由选择协议。RIP 协议要求网络中每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。RIP 只适用于小型互联网。
“距离”的定义:从一个路由器到直接连接的网络的距离定义为1。从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加1。RIP 协议中“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加1。这里“距离”实际上是“最短距离”。RIP认为一个好的路由是它通过的路由器的数目少,即“距离短”。RIP允许一条路径最多只能包含15个路由器。
“距离”的最大值为16时即相当于不可达。RIP不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP 协议的三个特点:仅和相邻路由器交换信息。交换的信息是当前本路由器所知道的全部信息,即自己的路由表。按固定的时间间隔交换路由信息,例如每隔30秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为 1)。它的路由表是空的。以后每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
RIP距离向量算法(met中无)
RIP报文格式(met中无)
4.5.3 OSPF
内部网关协议 OSPF
开放最短路径优先 OSPF (Open Shortest Path First)是为克服 RIP 的缺点在 1989 年开发出来的。
“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF
采用分布式的链路状态协议 (link state protocol)。
注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
三个要点
l 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
l 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。
l 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
链路状态数据库 (link-state database)
l 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
l 这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。
l OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。
l OSPF 的更新过程收敛得快是其重要优点。
OSPF 的区域 (area)
l 为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。
l 每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
l 区域也不能太大,在一个区域内的路由器最好不超过 200 个。
l 划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
l 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
l OSPF 使用层次结构的区域划分。在上层的区域叫做主干区域 (backbone area)。
l 主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
OSPF的分组
OSPF 的五种分组类型
l 类型1,问候 (Hello) 分组。
l 类型2,数据库描述 (Database Description) 分组。
l 类型3,链路状态请求 (Link State Request) 分组。
l 类型4,链路状态更新 (Link State Update) 分组,用洪泛法对全网更新链路状态。
l 类型5,链路状态确认 (Link State Acknowledgment)分组
OSPF基本操作
4.5.4 BGP
• BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
• 每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
• BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
• 在BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
BGP-4 共使用四种报文19~4096B
(1) 打开(OPEN)报文,用来与相邻的另一个BGP发言人建立关系。
(2) 更新(UPDATE)报文,用来发送某一路由的信息,以及列出要撤消的多条路由。
(3) 保活(KEEPALIVE)报文19B,用来确认打开报文和周期性地证实邻站关系。
(4) 通知(NOTIFICATION)报文,用来发送检测到的差错。
在 RFC 2918 中增加了 ROUTE-REFRESH 报文4B,用来请求对等端重新通告。
4.5.5 路由器构成
4.6 IPv6
4.6.1 IPv6格式
IPv6 数据报由两大部分组成:
-
基本首部 (base header)
-
有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
IPv6 将首部长度变为固定的 40 字节,称为基本首部。
把首部中不必要的功能取消了,使得 IPv6 首部的字段数减少到只有 8 个。
IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。
l 数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部)。
l 这样就大大提高了路由器的处理效率。
版本(version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6。
通信量类(traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
下一个首部(next header)—— 8 位。它相当于 IPv4 的协议字段或可选字段。
跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为零时,就要将此数据报丢弃。
源地址—— 128 位。是数据报的发送站的 IP 地址。
目的地址—— 128 位。是数据报的接收站的 IP 地址。
4.6.2IPv6地址
IPv6 数据报的目的地址可以是以下三种基本类型地址之一:
- 单播 (unicast)****:传统的点对点通信。
- 多播 (multicast)****:一点对多点的通信。
- 任播 (anycast)****:这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
冒号十六进制记法
l 在 IPv6 中,每个地址占 128 位,地址空间大于 3.4 ´ 1038 。
l 为了使地址再稍简洁些,IPv6 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex)。
l 每个 16 位的值用十六进制值表示,各值之间用冒号分隔。例如:
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0
零压缩
l 冒号十六进制记法可以允许零压缩 (zero compression),即一连串连续的零可以为一对冒号所取代。
FF05:0:0:0:0:0:0:B3 可压缩为:FF05::B3
注意:在任一地址中只能使用一次零压缩。
点分十进制记法的后缀
l 冒号十六进制记法可结合使用点分十进制记法的后缀,这种结合在 IPv4 向 IPv6 的转换阶段特别有用。
l 例如:0:0:0:0:0:0:128.10.2.1
再使用零压缩即可得出: ::128.10.2.1
l CIDR 的斜线表示法仍然可用。
l 例如:60 位的前缀 12AB00000000CD3 可记为:
12AB:0000:0000:CD30:0000:0000:0000:0000/60
或 12AB::CD30:0:0:0:0/60 (零压缩)
或 12AB:0:0:CD30::/60 (零压缩)
4.6.3IPv4向IPv6过渡
目前IPV4向 IPv6 过渡采用逐步演进方法,主要有两种策略:使用双协议栈和使用隧道。
双协议栈是指:主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6,通信流程如下图所示:
隧道是指:在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4 数据报,整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。当 IPv4 数据报离开 IPv4 网络中的隧道时,再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议栈。通信流程如下图所示:
4.6.4 ICMPv6
ICMPv6协议
由于IPv6 也不保证数据报的可靠交付,因此 IPv6 也需要如同IPV4使用 ICMPv4协议一样,使用ICMPV6协议来反馈一些差错信息。ICMPv6报文与IPv6报文的关系如下图所示:
ICMPv6报文除了保留ICMPV4中的部分差错控制和信息报文以外,还增加了邻站发现及多播听众交付报文,类型如下图所示:
4.7 IP多播
4.7.1 IP多播基本概念
IP 多播 (multicast,以前曾译为组播) 已成为互联网的一个热门课题。
目的:更好的支持一对多通信。
一对多通信:一个源点发送到许多个终点。
例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议及其他多媒体通信。
在互联网上进行多播就叫作 IP 多播。互联网范围的多播要靠路由器来实现。能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。从1992年起,在互联网上开始试验虚拟的多播主干网MBONE (Multicast Backbone On the InterNEt)。 现在多播主干网已经有了相当大的规模。
多播 IP 地址
IP 多播所传送的分组需要使用多播 IP 地址。在多播数据报的目的地址写入的是多播组的标识符。多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。每一个D类地址标志一个多播组。多播地址只能用于目的地址,不能用于源地址。
多播数据报
多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议 IGMP。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。
4.7.2 在局域网进行硬件多播
D 类 IP 地址与以太网多播地址的映射关系
TCP/IP 协议使用的以太网多播地址块的范围是
从 01-00-5E-00-00-00
到 01-00-5E-7F-FF-FF
在每一个地址中,只有23位可用作多播。
D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。
由于多播IP地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
4.7.3 网际组管理协议 IGMP
IP多播需要两种协议——IGMP+多播路由选择协议
IGMP
网际组管理协议 IGMP (Internet Group Management Protocol):是让连接在本地局域网上多播路由器知道本局域网上是否有主机(严格讲主机上某个进程)参加或退出了某个多播组。
1989年RFC1112(IGMPv1)早已成为了互联网的标准协议。1997年公布的RFC2236(IGMPv2,建议标准)对IGMPv1进行了更新。2002年10月公布了RFC 3376(IGMPv3,建议标准),宣布RFC 2236(IGMPv2)是陈旧的,IGMP是整个网际协议 IP 的一个组成部分。
IGMP 工作可分为两个阶段:第一阶段:加入多播组。第二阶段:探询组成员变化情况。
IGMP在主机和多播路由器之间的所有通信都是使用IP多播。多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,默认询问速率是每125秒发送一次。当同一个网络上连接有几个多播路由器时,它们能迅速和有效地选择其中一个来探询主机的成员关系。在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
多播路由选择协议
多播转发必须动态地适应多播组成员的变化,多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。多播路由选择协议尚未标准化,多播路由选择实际上就是要找出以源主机为根结点的多播转发树。多播路由选择协议在转发多播数据报时使用三种方法:
(1) 洪泛与剪除
(2) 隧道技术 (tunneling)
(3) 基于核心的发现技术
4.8 虚拟专用网VPN和网络地址转换NAT
4.8.0 专用地址
由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。
本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。
问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
解决:RFC 1918指明了一些专用地址 (private address)。专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
三个专用 IP 地址块:
(1) 10.0.0.0 到 10.255.255.255
A类,或记为10.0.0.0/8,它又称为24位块
(2) 172.16.0.0 到 172.31.255.255
B类,或记为172.16.0.0/12,它又称为20位块
(3) 192.168.0.0 到 192.168.255.255
C类,或记为192.168.0.0/16,它又称为16位块
采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫作专用网。因为这些专用地址仅在本机构内部使用。专用IP地址也叫作可重用地址(reusable address)。
4.8.1 虚拟专用网VPN
利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN (Virtual Private Network)。“专用网”是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。“虚拟”表示“好像是”,但实际上并不是,因为现在并没有真正使用通信专线,而VPN只是在效果上和真正的专用网一样。如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。一个机构要构建自己的 VPN 就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。
远程接入 VPN (remote access VPN)可以满足外部流动员工访问公司网络的需求。在外地工作的员工拨号接入互联网,而驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
4.8.2 网络地址转换NAT
问题:在专用网上使用专用地址的主机如何与互联网上的主机通信(并不需要加密)?
解决:
(1) 再申请一些全球 IP 地址。但这在很多情况下是不容易做到的。
(2)采用网络地址转换 NAT。这是目前使用得最多的方法。
网络地址转换 NAT (Network Address Translation) 方法于1994年提出。需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫作 NAT路由器,它至少有一个有效的外部全球IP地址。所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
内部主机 A 用本地地址 IP*A* 和互联网上主机 B 通信所发送的数据报必须经过 NAT 路由器。NAT 路由器将数据报的源地址 IP*A* 转换成全球地址 IP*G*,并把转换结果记录到NAT地址转换表中,目的地址 IP*B* 保持不变,然后发送到互联网。NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IP*B* 而目的地址是 IP*G*。根据 NAT 转换表,NAT 路由器将目的地址 IP*G* 转换为 IP*A*,转发给最终的内部主机 A。
当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用 NAT 路由器有限数量的全球 IP 地址。通过 NAT 路由器的通信必须由专用网内的主机发起。专用网内部的主机不能充当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务。
为了更加有效地利用 NAT 路由器上的全球IP地址,现在常用的 NAT 转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。使用端口号的 NAT 叫作网络地址与端口号转换NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫作传统的 NAT (traditional NAT)。