计算机网络-网络层
注:内容根据《计算机网络第七版》以及相关PPT整理制作,图片主要源于{电子工程出版社},部分图片源于学校老师上课所画的图以及自己制作的思维导图
网络层提供何种服务
首先,从以下问题进入网络层的学习(书里就是这样)
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
让网络负责可靠交付
这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式。通信之前先建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
H1 发送给 H2 的所有分组都沿着同一条虚电路传送
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。请注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
这样的情况已经遇到很多次了且很重要,在上一章数据链路层也讲了这种逻辑链接,为了屏蔽掉复杂的数据传递过程,我们会频繁的使用逻辑连接这一方法来帮助我们理解对等层之间的通信问题,放心,在接下来的运输层(TCP、UDP)和应用层(HTTP)也同样会使用该方法
网络提供数据报服务
互联网的先驱者提出了一种崭新的网络设计思路。网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
这也证明了互连网能够发展到今日的规模,缘于当初采用这种设计思路的正确性。
最后的答案就是端系统负责可靠交付啦,然后网络负责提供无连接的、尽最大努力交付的数据报服务
丢出一张表对比下虚电路服务和数据报服务
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网际协议 IP
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
虚拟互连网络
将网络互连并能够互相通信,会遇到许多问题需要解决,如:
- 不同的寻址方案
- 不同的最大分组长度
- 不同的网络接入机制
- 不同的超时控制
- 不同的差错恢复方法
- 不同的状态报告方法
- 不同的路由选择技术
- 不同的用户接入控制
- 不同的服务(面向连接服务和无连接服务)
- 不同的管理与控制方式等
妈耶这也太多了,所以这一章的内容是最多的,同时理论上也是五层协议里面最复杂最重要的一章,也会包含了一些计算题
将网络互相连接起来要使用一些中间设备。 中间设备又称为中间系统或中继 (relay)系统。有以下五种不同的中间设备:
- 物理层中继系统:转发器 (repeater)。
- 数据链路层中继系统:网桥 或 桥接器 (bridge)。
- 网络层中继系统:路由器 (router)。
- 网桥和路由器的混合物:桥路器 (brouter)。
- 网络层以上的中继系统:网关 (gateway)。
当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。(回想下数据链路层的集线器以及交换机的工作) 网关由于比较复杂,目前使用得较少。
网络互连都是指用路由器进行网络互连和路由选择。由于历史的原因,许多有关 TCP/IP 的文献将网络层使用的路由器称为网关。
虚拟互连网络的意义
所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。使用 IP 协议的虚拟互连网络可简称为 IP 网。
使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议(运输层),那么就是现在的互联网 (Internet)。
最后,从网络层去考虑问题(联想下数据链路层考虑问题的方法),那么 IP 数据报就可以想象是在网络层中传送。
分类的 IP 地址
IP 地址及其表示方法
我们把整个互联网看成为一个单一的、抽象的网络。IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
IP 地址现在由互联网名字和数字分配机构ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。
IP 地址的编址方法
分类的 IP 地址。这是最基本的编址方法,在1981年就通过了相应的标准协议。
子网的划分。这是对最基本的编址方法的改进,其标准[RFC 950]在1985年通过。
构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用。
先来讲讲第一个IP地址的分类,后面两个会在第三节提到
将IP地址划分为若干个固定类。
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
主机号在它前面的网络号所指明的网络范围内必须是唯一的。
由此可见,一个 IP 地址在整个互联网范围内是唯一的。
也可以这样(::= 代表“定义为”)
一开始,网络被分为五类地址,后来因为无分类IP地址的广泛使用,这种区分变成了历史
点分十进制记法
机器中存放的 IP 地址是 32 位二进制代码,长这样,好记不,不好记
所以,聪明的人们就想到了点分十进制法来方便我们记住ip地址
下面是一堆点分十进制的具体例子
常用的三种类别的 IP 地址
网络 类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中最大主机数 |
---|---|---|---|---|
A | 126 (27 – 2) | 1 | 126 | 16777214 |
B | 16383 (214 – 1) | 128.1 | 191.255 | 65534 |
C | 2097151 (221 – 1) | 192.0.1 | 223.255.255 | 254 |
一些一般情况下不使用的特殊IP地址
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本网络上的本主机(见 6.6 节 DHCP 协议) |
0 | host-id | 可以 | 不可 | 在本网络上的某台主机 host-id |
全 1 | 全 1 | 不可 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
net-id | 全 1 | 不可 | 可以 | 对 net-id 上的所有主机进行广播 |
127 | 非全 0 或全 1 的任何数 | 可以 | 可以 | 用于本地软件环回测试 |
注意:A类地址→127.0.0.1一般作为本主机进程之间的通信所用
IP 地址的一些重要特点
(1) IP 地址是一种分等级的地址结构。分两个等级的好处是:
- 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
- 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
- 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
通过下面的图加深对以上特点的理解
在同一个局域网上的主机或路由器的IP 地址中的网络号必须是一样的。图中的网络号就是 IP 地址中的 net-id。(各个粉色区域即各自的局域网)
路由器总是具有两个或两个以上的IP地址。路由器的每一个接口都有一个不同网络号的IP地址。(R1、R2、R3)
两个路由器直接相连的接口处,可指明也可不指明IP地址。如指明IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。现在常不指明IP地址。(中间粉紫色的N1、N2、N3)
IP 地址与硬件地址
IP 地址与硬件地址是不同的地址。从层次的角度看,硬件地址(或物理地址)是数据链路层和物理层使用的地址。IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
IP 地址放在 IP 数据报的首部,而硬件地址则放在 MAC 帧的首部。
我们先来看看在网络层上看,数据的具体流动方式
再来看看在实际的协议栈上,数据的流动
从虚拟的 IP 层上看 IP 数据报的流动(和上面的网络层的图性质类似,只不过简化了点)
而从链路上看呢,在具体的物理网络的链路层,只能看见 MAC 帧而看不见 IP 数据报
现在回头再来看看IP协议层的数据流动,图中的 IP1 → IP2 表示从源地址 IP1 到目的地址 IP2 。两个路由器的 IP 地址并不出现在 IP 数据报的首部中。 路由器只根据目的站的 IP 地址的网络号进行路由选择。
IP 层抽象的互联网屏蔽了下层很复杂的细节。在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信 。(会不会又啰嗦了)
主机 H1 与 H2 通信中使用的IP地址与硬件地址举例(根据上图理解)
地址解析协议 ARP
通过上面的了解,我们知道了硬件地址和IP地址的区别,现在就来考虑在实际协议栈中硬件地址和IP地址是如何进行转换的
通信时使用了两个地址:
- IP 地址(网络层地址)
- MAC 地址(数据链路层地址)
简介
地址解析协议 ARP 就是用来通过IP地址来查找对应的硬件地址
ARP 作用:
从网络层使用的 IP 地址,解析出在数据链路层使用的硬件地址。
通过前面我们也知道,不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
注:TTL (Time To Live):地址映射有效时间
工作流程
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。(和那啥是不是有点类似,数据链路层中交换机的工作方式)
解剖整段话中的要点
ARP请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
本地广播 ARP 请求(路由器不转发ARP请求)。
ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
ARP 分组封装在物理网络的帧中传输。
ARP 高速缓存
ARP 具有高速缓存,用来存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。
为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
如果目的主机不在本局域网呢
ARP 用于解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
最后,总结下使用ARP会遇到的四种典型情况
不同应用场景
- 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
为什么不直接使用硬件地址?
由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。想想看,若一台主机要跨交换机进行通信,那么他的数据是被无数个交换机所接收的,只有目的主机的交换机才会收下这部分数据,对比路由器,可以针对性对目标主机所在的局域网进行传递,至少不用像交换机一样进行广播,节省了多少资源,详细可以看看数据链路层的交换机工作方式,对比下路由器。
还有,调用 ARP 的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。因此,在虚拟的 IP 网络上用 IP 地址进行通信给广大的计算机用户带来了很大的方便。
IP 数据报的格式
一个 IP 数据报由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
纵向来看
横向简化版
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。可选字段,其长度是可变的。
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),指示数据报在网络中可通过的路由器数(也称跳数,最大值为255)的最大值。防止无法交付的数据报在互联网中无限制的兜圈子。
协议——占8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给那个处理过程(在之后的运输层以及网络层会涉及到更多协议)
首部检验和——占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
源地址和目的地址都各占 4 字节
其中,对于标志以及片偏移,这里通过一个例子加深理解
一数据报的总长度为 3820 字节,其数据部分的长度为 3800 字节(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。
因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。于是分为 3 个数据报片,其数据部分的长度分别为 1400、1400 和 1000 字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
IP 数据报首部中与分片有关的字段中的数值
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3820 | 12345 | 0 | 0 | 0 |
数据报片1 | 1420 | 12345 | 1 | 0 | 0 |
数据报片2 | 1420 | 12345 | 1 | 0 | 175 |
数据报片3 | 1020 | 12345 | 0 | 0 | 350 |
IP 数据报首部的可变部分
IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
IP 层转发分组的流程
假设:有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。可以想象,若按目的主机号来制作路由表,每一个路由表就有 4 万个项目,即 4 万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目(每一行对应于一个网络),这样就可使路由表大大简化。
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
查找路由表
根据目的网络地址就能确定下一跳路由器,这样做的结果是:IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。只有到达最后一个路由器时,才试图向目的主机进行直接交付。
特定主机路由
虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
默认路由 (default route)
路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。默认路由在主机发送 IP 数据报时往往更能显示出它的好处。如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。
只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器。
必须指出
IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
路由器分组转发算法
- 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
- 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行 (3)。
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 (4)。
- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行 (5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 (6)。
- 报告转发分组出错。
最后,总结一下路由表:路由表没有给分组指明到某个网络的完整路径。路由表指出,到某个网络应当先到某个路由器(即下一跳路由器)。在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。
划分子网和构造超网
划分子网
两级IP地址到三级IP地址(了解)
一开始是只有网络号和主机号的,为了方便管理,就出现了下面的地址形式
IP地址 ::= {<网络号>, <子网号>, <主机号>}
划分子网思路如下
划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机。
一个未划分子网的 B 类网络145.13.0.0(下图)
划分为三个子网,它对外仍是一个网络
当没有划分子网时,IP 地址是两级结构。划分子网后 IP 地址就变成了三级结构。划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。
划分后的三级结构子网有什么优点呢
- 减少了 IP 地址的浪费
- 使网络的组织更加灵活
- 更便于维护和管理
划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络。
子网掩码
从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分。
规则:子网掩码长度 = 32 位;子网掩码左边部分的一连串 1,对应于网络号和子网号;子网掩码右边部分的一连串 0,对应于主机号
也就是说,把设定的子网号包括网络号全部置为1,后面的全为0,代表分配给主机号
很恨很重要的一条公式
(IP 地址) AND (子网掩码) =网络地址
默认的子网掩码(下图)
子网掩码是一个网络或一个子网的重要属性。路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
子网划分方法
有固定长度子网和变长子网两种子网划分方法。
在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
虽然根据已成为互联网标准协议的 RFC 950 文档,子网号不能为全 1 或全 0,但随着[无分类域间路由选择 CIDR](#无分类编址 CIDR(构造超网)) 的广泛使用,现在全 1 和全 0 的子网号也可以使用了,但一定要谨慎使用,确认你的路由器所用的路由选择软件是否支持全 0 或全 1 的子网号这种较新的用法。
划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
B 类地址的子网划分选择(使用固定长度子网),如下图
表中的“子网号的位数”中没有 0, 1, 15 和 16 这四种情况,因为这没有意义。
来啦来啦,计算题来啦
【例4-2】已知 IP 地址是 141.14.72.24,子网掩码是255.255.224.0。试求网络地址。
解题思路图
【例4-3】上例中,若子网掩码改为 255.255.224.0,试求网络地址,讨论所得结果。
通过解题发现了啥,不同的子网掩码对同一个ip地址得出相同的网络地址,但实际上不同的掩码的效果是不同的,这对后面学习无分类编址CIDR很重要,当对一个ip地址进行掩码处理后,你会发现可能多个网络号都对应得上,那么我们往往会选择更大的那一个,因为离得更近嘛。
使用子网时分组的转发
在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。因此分组转发的算法也必须做相应的改动。 看看改动后的算法是怎样的
- 从收到的分组的首部提取目的 IP 地址 D。
- 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
- 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
- 报告转发分组出错。
再来一题
【例4-4】已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。
H1 首先检查主机 128.30.33.138 是否连接在本网络上,如果是,则直接交付;否则,就送交路由器 R1,并逐项查找路由表。
主机 H1 首先将本子网的子网掩码 255.255.255.128与分组的 IP 地址 128.30.33.138 逐比特相与”(AND 操作)
因此 H1 必须把分组传送到路由器 R1,然后逐项查找路由表
路由器 R1 收到分组后就用路由表中第 1 个项目的子网掩码和 128.30.33.138 逐比特 AND 操作 ,然后如此下去,直到得出的网络地址和路由表中子网掩码的对应目的网络地址匹配
255.255.255.128 AND 128.30.33.138 = 128.30.33.128 不匹配!
(因为128.30.33.128 与路由表中的 128.30.33.0 不一致)
255.255.255.128 AND 128.30.33.138 = 128.30.33.128 匹配!
这表明子网 2 就是收到的分组所要寻找的目的网络。
无分类编址 CIDR(构造超网)
为了解决B 类地址分配快完的以及互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)的问题。
使用变长子网掩码 VLSM (Variable Length Subnet Mask)可进一步提高 IP 地址资源的利用率。
在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
特点
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了两级编址。
无分类的两级编址的记法是
IP地址 ::= {<网络前缀>, <主机号>}
为了同三级编址一样划分子网,CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在 IP 地址里面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 220.78.168.0/24
CIDR 地址块
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
这个地址块的起始地址是 128.14.32.0。
在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
128.14.32.0/20 地址块的最小地址:128.14.32.0
128.14.32.0/20 地址块的最大地址:128.14.47.255
其他形式的记法
10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的 0 省略。
10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码 255.192.0.0。此掩码可表示为:
网络前缀的后面加一个星号 * 的表示方法,如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。
注意:全 0 和全 1 的主机号地址一般不使用。
路由聚合 (route aggregation)
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。路由聚合也称为构成超网 (supernetting)。
简单来说,就是将一部分具有相同网络前缀以及掩码的地址聚合成一个整体
CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。对于 /20 地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中1的个数。
常用的CIDR地址块
CIDR 前缀长度 | 点分十进制 | 包含的地址数 | 相当于包含分类的网络数 |
---|---|---|---|
/13 | 255.248.0.0 | 512 K | 8 个 B类或 2048 个 C 类 |
/14 | 255.252.0.0 | 256 K | 4 个 B 类或1024 个 C 类 |
/15 | 255.254.0.0 | 128 K | 2 个 B 类或512 个 C 类 |
/16 | 255.255.0.0 | 64 K | 1 个 B 类或256 个 C 类 |
/17 | 255.255.128.0 | 32 K | 128 个 C 类 |
/18 | 255.255.192.0 | 16 K | 64 个 C 类 |
/19 | 255.255.224.0 | 8 K | 32 个 C 类 |
/20 | 255.255.240.0 | 4 K | 16 个 C 类 |
/21 | 255.255.248.0 | 2 K | 8 个 C 类 |
/22 | 255.255.252.0 | 1 K | 4 个 C 类 |
/23 | 255.255.254.0 | 512 | 2 个 C 类 |
/24 | 255.255.255.0 | 256 | 1 个 C 类 |
/25 | 255.255.255.128 | 128 | 1/4 个 C 类 |
/26 | 255.255.255.192 | 64 | 1/4 个 C 类 |
/27 | 255.255.255.224 | 32 | 1/8 个 C 类 |
前缀长度不超过 23 位的 CIDR 地址块都包含了多个 C 类地址。这些 C 类地址合起来就构成了超网。CIDR 地址块中的地址数一定是 2 的整数次幂。网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
CIDR 的一个好处是:可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。
比如下面的例子
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
最长前缀匹配
使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。最长前缀匹配又称为最长匹配或最佳匹配。
比如
接着
怎么选择呢,当然就是选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。 这样就能更具体更快的找到主机所在网络啦
使用二叉线索查找路由表
当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索 (binary trie)。
IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
如下面的例子
从二叉线索的根节点自顶向下的深度最多有 32 层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。
网际控制报文协议 ICMP
ICMP 报文的种类
为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 是互联网的标准协议。
ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。 ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
ICMP 差错报告报文
ICMP 差错报告报文共有 4 种
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向)(Redirect)
有几种情况不会发送ICMP差错报告报文
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
ICMP 询问报文
ICMP 询问报文有两种
- 回送请求和回答报文
- 时间戳请求和回答报文
ICMP 的应用举例
PING (Packet InterNet Groper)
PING 用来测试两个主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
下图是用 PING 测试主机的连通性
Traceroute
在 Windows 操作系统中这个命令是 tracert。它用来跟踪一个分组从源点到终点的路径。它利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文实现对从源点到终点的路径的跟踪。
用 tracert 命令获得到目的主机的路由信息
互联网的路由选择协议
有关路由选择协议的几个基本概念
理想的路由算法
算法必须是正确的和完整的。 在计算上应简单。 应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。 应具有稳定性。应是公平的。应是最佳的。
不存在一种绝对的最佳路由算法。所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
分层次的路由选择协议
互联网采用分层次的路由选择协议。这是因为:
(1) 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
(2) 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
自治系统 AS
自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
现在对自治系统 AS 的定义是强调下面的事实:尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
内部网关协议 IGP (Interior Gateway Protocol)
在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。
外部网关协议 EGP (External Gateway Protocol)
若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。在外部网关协议中目前使用最多的是 BGP-4。
它们之间的关系可以用下面的图来表示
还有两个概念要知道
自治系统之间的路由选择也叫做域间路由选择 (interdomain routing),在自治系统内部的路由选择叫做域内路由选择 (intradomain routing) 。
互联网的早期 RFC 文档中未使用“路由器”而是使用“网关”这一名词。但是在新的 RFC 文档中又使用了“路由器”这一名词。应当把这两个术语当作同义词
内部网关协议 RIP
工作原理
路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最先得到广泛使用的协议。RIP 是一种分布式的、基于距离向量的路由选择协议。RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
这里的“距离”不是咱们普通的单位量算,而是路由器到直接相连的网络的距离(也就是跳数)
从一个路由器到直接连接的网络的距离定义为 1。从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。这里的“距离”实际上指的是“最短距离”。
RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
RIP 允许一条路径最多只能包含 15 个路由器。
“距离”的最大值为 16 时即相当于不可达。可见 RIP 只适用于小型互联网。
RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
特点
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
工作过程(路由表的建立)
路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为 1)。它的路由表是空的。以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
RIP 协议的收敛 (convergence) 过程较快。“收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
距离量算法
完整算法流程如下图
距离向量算法的基础就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法)。这种算法的要点是这样的:设X是结点 A 到 B 的最短路径上的一个结点。若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。
RIP 协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。
虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
例题又来啦
下图为路由表更新的一个例子以及解题过程
RIP2 协议的报文格式
RIP2 报文由首部和路由部分组成。RIP2 报文中的路由部分由若干个路由信息组成。每个路由信息需要用 20 个字节。地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。路由标记填入自治系统的号码,这是考虑使 RIP 有可能收到本自治系统以外的路由选择信息。再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是 4+20 x25=504 字节。如超过,必须再用一个 RIP 报文来传送。
RIP2 具有简单的鉴别功能。
若使用鉴别功能,则将原来写入第一个路由信息(20 个字节)的位置用作鉴别。在鉴别数据之后才写入路由信息,但这时最多只能再放入 24 个路由信息。
RIP 协议特点:好消息传播得快,坏消息传播得慢。
RIP 存在的一个问题:当网络出现故障时,要经过比较长的时间 (例如数分钟) 才能将此信息传送到所有的路由器。通过多图小漫画来了解该过程
这就是好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是 RIP 的一个主要缺点。
RIP 协议的优缺点
优点:
- 实现简单,开销较小。
缺点:
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
- “坏消息传播得慢”,使更新过程的收敛时间过长。
内部网关协议 OSPF
开放最短路径优先 OSPF (Open Shortest Path First)是为克服 RIP 的缺点在 1989 年开发出来的。OSPF 的原理很简单,但实现起来却较复杂。
特点
“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF
采用分布式的链路状态协议 (link state protocol)。
注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
OSPF 规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
工作方式
向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。
OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。区域也不能太大,在一个区域内的路由器最好不超过 200 个。
划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。OSPF 使用层次结构的区域划分。在上层的区域叫做主干区域 (backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
其中:R3、R4、R7为边界路由器,R5、R6为主干路由器
OSPF 直接用 IP 数据报传送
OSPF 不用 UDP 而是直接用 IP 数据报传送。
OSPF 构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送。而分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
负载平衡
OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。
如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载平衡。
所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。支持可变长度的子网划分和无分类编址 CIDR。每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
OSPF 分组
OSPF 的五种分组类型
类型1,问候 (Hello) 分组。
类型2,数据库描述 (Database Description) 分组。
类型3,链路状态请求 (Link State Request) 分组。
类型4,链路状态更新 (Link State Update) 分组,用洪泛法对全网更新链路状态。
类型5,链路状态确认 (Link State Acknowledgment)分组。
OSPF 使用可靠的洪泛法发送更新分组
指定的路由器
若N个路由器连接在一个以太网上,则每个路由器要向其它N-1个路由器发送链路信息,因而总共需要N(N-1)个链路状态要传递
多点接入的局域网采用了指定的路由器 (designated router) 的方法,使广播的信息量大大减少。
指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。
外部网关协议 BGP
简介:BGP 是不同自治系统的路由器之间交换路由信息的协议。 BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。 可以将 BGP-4 简写为 BGP。
互联网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的。比较合理的做法是在 AS 之间交换“可达性”信息。自治系统之间的路由选择必须考虑有关策略。因此,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
BGP 发言人
每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” (BGP speaker) 。
一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。
BGP 工作方式(交换路由信息)
一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。
使用 TCP 连接能提供可靠的服务,也简化了路由选择协议。使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer) 。
BGP 所交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。
自治系统 AS2 的 BGP 发言人通知主干网 AS1 的 BGP 发言人:“要到达网络 N1、 N2、N3 和 N4 可经过 AS2。”
主干网还可发出通知:“要到达网络 N5、N6 和 N7 可沿路径(AS1, AS3)。”
特点
BGP 协议交换路由信息的结点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
BGP-4报文
BGP-4 共使用四种报文
- 打开 (OPEN) 报文,用来与相邻的另一个BGP发言人建立关系。
- 更新 (UPDATE) 报文,用来发送某一路由的信息,以及列出要撤消的多条路由。
- 保活 (KEEPALIVE) 报文,用来确认打开报文和周期性地证实邻站关系。
- 通知 (NOTIFICATION) 报文,用来发送检测到的差错。
注意:撤销路由一次可以撤销许多条,而增加新路由时,每条更新报文只能增加一条
路由器的构成
路由器是一种典型的网络层设备。路由器是互联网中的关键设备。
路由器的主要作用是:
- 连通不同的网络。
- 选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来。
路由器的结构以及工作方式
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。 路由器的转发分组正是网络层的主要工作。
整个的路由器结构可划分为两大部分:
- 路由选择部分
- 也叫做控制部分,其核心构件是路由选择处理机。
- 路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
- 分组转发部分(由三部分组成)
- 交换结构 (switching fabric):又称为交换组织,其作用是根据转发表 (forwarding table) 对分组进行处理。
- 一组输入端口(硬件端口)
- 一组输出端口(硬件端口)
“转发”(forwarding) 就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。
“路由选择”(routing) 则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
路由表是根据路由选择算法得出的。而转发表是从路由表得出的。在讨论路由选择的原理时,往往不去区分转发表和路由表的区别。
路由器的输入端口里面装有物理层、数据链路层和网络层的处理模块。数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生一定的时延。 输入端口中的查找和转发功能在路由器的交换功能中是最重要的。
输出端口将交换结构传送来的分组发送到线路
输出端口里面同样装有物理层、数据链路层和网络层的处理模块。输出端口从交换结构接收分组,然后把它们发送到路由器外面的线路上。
在网络层的处理模块中设有一个缓冲区(队列)。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。
数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
分组丢弃
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
交换结构
交换结构是路由器的关键构件。正是这个交换结构把分组从一个输入端口转移到某个合适的输出端口。
实现交换有多种方法。常用交换方法有三种:
(1) 通过存储器
(2) 通过总线
(3) 通过纵横交换结构
通过存储器
(1) 当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。
(2) 路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中。
(3) 若存储器的带宽(读或写)为每秒 M 个分组,那么路由器的交换速率(即分组从输入端口传送到输出端口的速率)一定小于 M/2。这是因为存储器对分组的读和写花费的时间是同一个数量级
通过总线
(1) 数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。
(2) 因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制。如果总线在忙,则被堵塞而没法通过交换结构,并在输入端口等待
(3) 现代的技术已经可以将总线的带宽提高到每秒吉比特的速率,因此许多的路由器产品都采用这种通过总线的交换方式。
通过纵横交换结构 (crossbar switch fabric)
(1) 这种交换结构常称为互连网络 (interconnection network)。
(2) 它有 2N 条总线,可以使 N 个输入端口和 N 个输出端口相连接。
(3) 当输入端口收到一个分组时,就将它发送到与该输入端口相连的水平总线上。
(4) 若通向所要转发的输出端口的垂直总线是空闲的,则在这个结点将垂直总线与水平总线接通,然后将该分组转发到这个输出端口。
(5) 但若该垂直总线已被占用(有另一个分组正在转发到同一个输出端口),则后到达的分组就被阻塞,必须在输入端口排队。
IPv6
IP 是互联网的核心协议。互联网经过几十年的飞速发展,到 2011 年 2 月,IPv4 的 32 位地址已经耗尽。ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 – 2015 年也逐步停止了向新用户和应用分配 IPv4 地址。解决 IP 地址耗尽的根本措施就是采用具有更大地址空间的新版本的 IP,即 IPv6。
IPv6 仍支持无连接的传送,但将协议数据单元 PDU 称为分组。为方便起见,计算机网络这本书仍采用数据报这一名词。所引进的主要变化如下:
- 更大的地址空间。IPv6 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。
- 灵活的首部格式。 IPv6 定义了许多可选的扩展首部。
- 改进的选项。 IPv6 允许数据报包含有选项的控制信息,其选项放在有效载荷中。
- 允许协议继续扩充。
- 支持即插即用(即自动配置)。因此 IPv6 不需要使用 DHCP。
- 支持资源的预分配。 IPv6 支持实时视像等要求,保证一定的带宽和时延的应用。
- IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。原来的 IPv4 首部是 4 字节对齐。
IPv6 的基本首部
IPv6 数据报由两大部分组成:
- 基本首部 (base header)
- 有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
IPv6 将首部长度变为固定的 40 字节,称为基本首部。把首部中不必要的功能取消了,使得 IPv6 首部的字段数减少到只有 8 个。IPv6 对首部中的某些字段进行了如下的更改:
- 取消了首部长度字段,因为首部长度是固定的 40 字节;
- 取消了服务类型字段;
- 取消了总长度字段,改用有效载荷长度字段;
- 把 TTL 字段改称为跳数限制字段;
- 取消了协议字段,改用下一个首部字段;
- 取消了检验和字段;
- 取消了选项字段,而用扩展首部来实现选项功能。
版本(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 地址。
IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。
数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部)。这样就大大提高了路由器的处理效率。
在 RFC 2460 中定义了六种扩展首部:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
IPv6 的地址
IPv6 数据报的目的地址可以是以下三种基本类型地址之一:
- 单播 (unicast):传统的点对点通信。
- 多播 (multicast):一点对多点的通信。
- 任播 (anycast):这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
IPv6 将实现 IPv6 的主机和路由器均称为结点。一个结点就可能有多个与链路相连的接口。IPv6 地址是分配给结点上面的接口的。
- 一个接口可以有多个单播地址。
- 其中的任何一个地址都可以当作到达该结点的目的地址。即一个结点接口的单播地址可用来唯一地标志该结点。
为了使地址再稍简洁些,IPv6 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex)。每个 16 位的值用十六进制值表示,各值之间用冒号分隔。例如:68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF,在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0。
冒号十六进制记法可以允许零压缩 (zero compression),即一连串连续的零可以为一对冒号所取代。
FF05:0:0:0:0:0:0:B3 可压缩为:
FF05::B3
注意:在任一地址中只能使用一次零压缩。
冒号十六进制记法可结合使用点分十进制记法的后缀,这种结合在 IPv4 向 IPv6 的转换阶段特别有用。
例如:0:0:0:0:0:0:128.10.2.1 再使用零压缩即可得出: ::128.10.2.1
CIDR 的斜线表示法仍然可用。
例如:60 位的前缀 12AB00000000CD3 可记为:
12AB:0000:0000:CD30:0000:0000:0000:0000/60
或 12AB::CD30:0:0:0:0/60 (零压缩)
或 12AB:0:0:CD30::/60 (零压缩)
IPv6地址分类
地址类型 | 二进制前缀 |
---|---|
未指明地址 | 00…0(128位),可记为 ::/128。 |
环回地址 | 00…1(128位),可记为 ::1/128。 |
多播地址 | 11111111(8位),可记为 FF00::/8。 |
本地链路单播地址 | 1111111010(10位), 可记为 FE80::/10。 |
全球单播地址 | (除上述四种外,所有其他的二进制前缀) |
未指明地址:这是 16 字节的全 0 地址,可缩写为两个冒号“::”。这个地址只能为还没有配置到一个标准的 IP 地址的主机当作源地址使用。这类地址仅此一个。
环回地址:即 0:0:0:0:0:0:0:1(记为 ::1)。作用和 IPv4 的环回地址一样。这类地址也是仅此一个。
多播地址:功能和 IPv4 的一样。这类地址占 IPv6 地址总数的 1/256。
本地链路单播地址 (Link-Local Unicast Address) :有些单位的网络使用 TCP/IP 协议,但并没有连接到互联网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和互联网上的其他主机通信。这类地址占 IPv6 地址总数的 1/1024。(也就是专用网,[虚拟专用网 VPN](#虚拟专用网 VPN)会聊到这部分)
全球单播地址
IPv6 的这一类单播地址是使用得最多的一类。
曾提出过多种方案来进一步划分这 128 位的单播地址。
根据 2006 年发布的草案标准 RFC 4291 的建议, IPv6 单播地址的划分方法非常灵活。
从 IPv4 向 IPv6 过渡
向 IPv6 过渡只能采用逐步演进的办法,同时,还必须使新安装的 IPv6 系统能够向后兼容:IPv6 系统必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。两种向 IPv6 过渡的策略:
- 使用双协议栈
- 使用隧道技术
双协议栈
双协议栈 (dual stack) 是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6。
双协议栈的主机(或路由器)记为 IPv6/IPv4,表明它同时具有两种 IP 地址:一个 IPv6 地址和一个 IPv4 地址。
双协议栈主机在和 IPv6 主机通信时是采用 IPv6 地址,而和 IPv4 主机通信时就采用 IPv4 地址。
根据 DNS 返回的地址类型可以确定使用 IPv4 地址还是 IPv6 地址。
隧道技术
在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4 数据报,整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。当 IPv4 数据报离开 IPv4 网络中的隧道时,再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议栈。
ICMPv6
IPv6 也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。
因此 IPv6 也需要使用 ICMP 来反馈一些差错信息。新的版本称为 ICMPv6。
地址解析协议 ARP 和网际组管理协议 IGMP 协议的功能都已被合并到 ICMPv6 中。
CMPv6 是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信。
ICMPv6 还增加了几个定义报文的功能及含义的其他协议。
IP 多播
IP 多播的基本概念
IP 多播 (multicast,以前曾译为组播) 已成为互联网的一个热门课题。
在互联网上进行多播就叫做 IP 多播。
互联网范围的多播要靠路由器来实现。
能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。
目的:更好地支持一对多通信。
一对多通信:一个源点发送到许多个终点。
例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议及其他多媒体通信。
采用单播方式,向 90 台主机传送,同样的视频节目需要发送 90 个单播,如下图
采用多播方式,只需发送一次到多播组。路由器复制分组。局域网具有硬件多播功能,不需要复制分组。
这样的好处是:当多播组的主机数很大时(如成千上万个),采用多播方式就可明显地减轻网络中各种资源的消耗。
多播 IP 地址
- IP 多播所传送的分组需要使用多播 IP 地址。
- 在多播数据报的目的地址写入的是多播组的标识符。
- 多播组的标识符就是 IP 地址中的 D 类地址(多播地址,前面有提到过——[ip地址的分类](#分类的 IP 地址))。
- 每一个 D 类地址标志一个多播组。
- 多播地址只能用于目的地址,不能用于源地址。
多播数据报
多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP。
多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。
对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。
在局域网上进行硬件多播
互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。因此 TCP/IP 协议使用的以太网地址块的范围是从 00-00-5E-00-00-00 到 00-00-5E-7F-FF-FF ,不难看出(挺难看出的),在每一个地址中,只有23位可用作多播。D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。
由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
网际组管理协议 IGMP 和多播路由选择协议
概述
为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol)。
连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常是在网络拓扑发生变化时才需要更新路由。
多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
网际组管理协议 IGMP
和 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMP 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。
第一阶段:加入多播组
当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。
第二阶段:探询组成员变化情况
因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
在主机和多播路由器之间的所有通信都是使用 IP 多播。
多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每 125 秒发送一次。
当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。
在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。
同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
多播路由选择
多播路由选择协议尚未标准化。一个多播组中的成员是动态变化的,随时会有主机加入或离开这个多播组。
多播路由选择实际上就是要找出以源主机为根结点的多播转发树。
在多播转发树上的路由器不会收到重复的多播数据报。对不同的多播组对应于不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。
多播路由选择协议在转发多播数据报时使用三种方法:
- 洪泛与剪除
- 隧道技术 (tunneling)
- 基于核心的发现技术
洪泛与剪除
这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。
一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。
为了避免兜圈子,采用了叫做反向路径广播 RPB (Reverse Path Broadcasting) 的策略。
什么是RPB
路由器收到多播数据报时,先检查它是否是从源点经最短路径传送来的。若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就丢弃而不转发。
如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小。
最后就得出了用来转发多播数据报的多播转发树,以后就按这个多播转发树转发多播数据报。避免了多播数据报的兜圈子,同时每一个路由器也不会接收重复的多播数据报。
要点
- 如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。
- 当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
隧道技术 (tunneling)
隧道技术适用于多播组的位置在地理上很分散的情况。
简单地说就是讲多播数据报进行封装成单播数据包,然后在不支持多播的网络上传递,如下图所示
基于核心的发现技术
这种方法对于多播组的大小在较大范围内变化时都适合。这种方法是对每一个多播组 G 指定一个核心(core) 路由器,给出它的 IP 单播地址。核心路由器按照前面讲过的方法创建出对应于多播组 G 的转发树。
没了,就这样
虚拟专用网 VPN 和网络地址转换 NAT
虚拟专用网 VPN
由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。
所以地址被分成了两种——本地地址与全球地址
本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。
但是在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。
解决方法:RFC 1918 指明了一些专用地址 (private address)。专用地址只能用作本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发
采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。
因为这些专用地址仅在本机构内部使用。专用IP地址也叫做可重用地址 (reusable address)。
利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN (Virtual Private Network)。
“专用网”是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。“虚拟”表示“好像是”,但实际上并不是,因为现在并没有真正使用通信专线,而VPN只是在效果上和真正的专用网一样。
如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。一个机构要构建自己的 VPN 就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。
用隧道技术实现虚拟专用网(如下图)
具体看看隧道技术如何实现
由部门 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为内联网 (intranet),表示部门 A 和 B 都是在同一个机构的内部。一个机构和某些外部机构共同建立的虚拟专用网 VPN 又称为外联网 (extranet)。 它们都是基于 TCP/IP 协议的。
远程接入 VPN
远程接入 VPN (remote access VPN)可以满足外部流动员工访问公司网络的需求。
在外地工作的员工拨号接入互联网,而驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
网络地址转换 NAT
如何在专用网上使用专用地址的主机与互联网上的主机通信
想象一下,咱们用的校园网,如果细心点的话你会发现它就是一个本地互联网,而如果你连上了校园网wifi,不通过登录你是可以访问得到校园网里面的某些网址的,也就是内部互相访问,但是一旦你需要上个百度啥的,你就需要登录自己的校园网账号,那这是怎么做到滴呢,这个问题就和上面那个问题一致
有两种方法
- 再申请一些全球 IP 地址。但这在很多情况下是不容易做到的。
- 采用网络地址转换 NAT。这是目前使用得最多的方法。
NAT使用前提
需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球IP地址。
所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
- 内部主机 A 用本地地址 IPA 和互联网上主机 B 通信所发送的数据报必须经过 NAT 路由器。
- NAT 路由器将数据报的源地址 IPA 转换成全球地址 IPG ,并把转换结果记录到NAT地址转换表中,目的地址 IPB 保持不变,然后发送到互联网。
- NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IPB 而目的地址是 IPG 。
- 根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPA ,转发给最终的内部主机 A。
可以看出,在内部主机与外部主机通信时,在NAT路由器上发生了两次地址转换:离开专用网时:替换源地址,将内部地址替换为全球地址;进入专用网时:替换目的地址,将全球地址替换为内部地址;
方向 | 字段 | 旧的IP地址 | 新的IP地址 |
---|---|---|---|
出 | 源IP地址 | 192.168.0.3 | 172.38.1.5 |
入 | 目的IP地址 | 172.38.1.5 | 192.168.0.3 |
出 | 源IP地址 | 192.168.0.7 | 172.38.1.6 |
入 | 目的IP地址 | 172.38.1.6 | 192.168.0.7 |
当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用 NAT 路由器有限数量的全球 IP 地址。
通过 NAT 路由器的通信必须由专用网内的主机发起。专用网内部的主机不能充当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务。
网络地址与端口号转换 NAPT
为了更加有效地利用 NAT 路由器上的全球IP地址,现在常用的 NAT 转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。
使用端口号的 NAT 叫做网络地址与端口号转换NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫做传统的 NAT (traditional NAT)。
举个栗子,如下表所示,讲专用网内的ip地址进行转换
方向 | 字段 | 旧的IP地址和端口号 | 新的IP地址和端口号 |
---|---|---|---|
出 | 源IP地址:TCP源端口 | 192.168.0.3:30000 | 172.38.1.5:40001 |
出 | 源IP地址:TCP源端口 | 192.168.0.4:30000 | 172.38.1.5:40002 |
入 | 目的IP地址:TCP目的端口 | 172.38.1.5:40001 | 192.168.0.3:30000 |
入 | 目的IP地址:TCP目的端口 | 172.38.1.5:40002 | 192.168.0.4:30000 |
NAPT把专用网内不同的源 IP 地址,都转换为同样的全球 IP 地址。但对源主机所采用的 TCP 端口号(不管相同或不同),则转换为不同的新的端口号。因此,当 NAPT 路由器收到从互联网发来的应答时,就可以从 IP 数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从 NAPT 转换表中找到正确的目的主机。
多协议标记交换 MPLS
“多协议”表示在 MPLS 的上层可以采用多种协议,例如:IP,IPX;可以使用多种数据链路层协议,例如:PPP,以太网,ATM 等。“标记”是指每个分组被打上一个标记,根据该标记对分组进行转发。
为了实现交换,可以利用面向连接的概念,使每个分组携带一个叫做标记 (label) 的小整数。当分组到达交换机(即标记交换路由器)时,交换机读取分组的标记,并用标记值来检索分组转发表。 这样就比查找路由表来转发分组要快得多(下面会详细讲述其差别)。
MPLS 的特点
MPLS 并没有取代 IP,而是作为一种 IP 增强技术,被广泛地应用在互联网中。
MPLS 具有以下三个方面的特点:
- 支持面向连接的服务质量;
- 支持流量工程,平衡网络负载;
- 有效地支持虚拟专用网 VPN。
MPLS 的工作原理
基本工作过程
首先来看看传统的IP 分组的转发
(1) 在传统的 IP 网络中,分组每到达一个路由器后,都必须提取出其目的地址,按目的地址查找路由表,并按照“最长前缀匹配”的原则找到下一跳的 IP 地址(请注意,前缀的长度是不确定的)。
(2) 当网络很大时,查找含有大量项目的路由表要花费很多的时间。
(3) 在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。
而MPLS 协议的基本原理如下
在 MPLS 域的入口处,给每一个 IP 数据报打上固定长度“标记”,然后对打上标记的 IP 数据报用硬件进行转发。
采用硬件技术对打上标记的 IP 数据报进行转发就称为标记交换。
“交换”也表示在转发时不再上升到第三层查找转发表,而是根据标记在第二层(链路层)用硬件进行转发。
MPLS 域 (MPLS domain) 是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持 MPLS 技术的标记交换路由器 LSR (Label Switching Router)。
LSR 同时具有标记交换和路由选择这两种功能,标记交换功能是为了快速转发,但在这之前LSR 需要使用路由选择功能构造转发表。
MPLS 的基本工作过程
(1) MPLS 域中的各 LSR 使用专门的标记分配协议 LDP 交换报文,并找出标记交换路径 LSP。各 LSR 根据这些路径构造出分组转发表。
(2) 分组进入到 MPLS 域时, MPLS 入口结点把分组打上标记,并按照转发表将分组转发给下一个 LSR。给 IP 数据报打标记的过程叫做分类 (classification)。
(3) 一个标记仅仅在两个标记交换路由器 LSR 之间才有意义。分组每经过一个 LSR,LSR 就要做两件事:一是转发,二是更换新的标记,即把入标记更换成为出标记。这就叫做标记对换 (label swapping)。
下面是转发表的一个举例
入接口 | 入标记 | 出接口 | 出标记 |
---|---|---|---|
0 | 3 | 1 | 1 |
该表的含义是含义:从入接口 0 收到一个入标记为 3 的IP 数据报,转发时,应当把该IP数据报从出接口 1 转发出去,同时把标记对换为 1。
(4) 当分组离开 MPLS 域时,MPLS 出口结点把分组的标记去除。再以后就按照一般分组的转发方法进行转发。
上述的这种“由入口 LSR 确定进入 MPLS 域以后的转发路径”称为显式路由选择 (explicit routing),它和互联网中通常使用的“每一个路由器逐跳进行路由选择”有着很大的区别。
转发等价类 FEC
MPLS 有个很重要的概念就是转发等价类 FEC (Forwarding Equivalence Class)。“转发等价类”就是路由器按照同样方式对待的分组的集合。
“按照同样方式对待”表示:从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。
划分 FEC 的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。
入口结点并不是给每一个分组指派一个不同的标记,而是将属于同样 FEC 的分组都指派同样的标记。
FEC 和标记是一一对应的关系。
这样,就可以把它用于负载平衡啦,如下图流量工程
流量工程
(1) 网络管理员采用自定义的 FEC 就可以更好地管理网络的资源。
(2) 这种均衡网络负载的做法也称为流量工程 TE (Traffic Engineering) 或通信量工程。
MPLS 首部的位置与格式
MPLS 并不要求下层的网络都使用面向连接的技术。下层的网络并不提供打标记的手段,而 IPv4 数据报首部也没有多余的位置存放 MPLS 标记。这就需要使用一种封装技术:在把 IP 数据报封装成以太网帧之前,先要插入一个 MPLS 首部。
从层次的角度看,MPLS 首部就处在第二层和第三层之间。
“给 IP 数据报打上标记”其实就是在以太网的帧首部和 IP 数据报的首部之间插入一个 4 字节的 MPLS 首部。
MPLS 首部共包括以下四个字段:
(1) 标记值(占 20 位)。可以同时容纳高达 220 个流(即 1048576 个流)。实际上几乎没有哪个 MPLS 实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
(2) 试验(占 3 位)。目前保留用作试验。
(3) 栈S(占 1 位)。在有“标记栈”时使用。
(4) 生存时间TTL(占 8 位)。用来防止 MPLS 分组在 MPLS 域中兜圈子。