第5章:网络层
-
作用:选择合适的路由,使发送站的运输层所传下来的分组能够正确无误地按照地址找到目的站,并交付给目的站的运输层。
-
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的保证。
5.1 虚拟互联网络
-
能不能让大家都使用相同的物理网络,这样网络互联可以变得简单?答案是不行的,原因如下:
(1)用户需求多样,没有一种单一的网络可以适应所有用户的需求;
(2)网络制造商经常会推出新的网络,这样才能在竞争中生存。
-
基于上面两点原因,市场上总是存在多种不同性能、不同网络协议的网络,供不同用户选用。
-
那么问题来了,我们如何将这些不同的网络连接起来?可以存在如下几种方案:
(1)物理层:转发器、集线器;
(2)数据链路层:网桥、以太网交换机;
(3)网络层:路由器;
(4)网络层以上:网关。
-
当中间设备使用的是集线器或者交换机时,只是把网络扩大了,不称之为网络互联;网关较复杂,使用较少。因此我们使用网络层的路由器将网络互联在一起,形成虚拟互联网络。
-
虚拟互联网络:物理网络异构性客观存在,我们通过
IP
协议屏蔽掉了这些差异,让这些不同的网络在网络层上看起来好像是一个统一的网络。 -
这种使用
IP
协议的虚拟互联网络可被简称为:虚拟IP
网,简称IP
网。如果在这种覆盖全球的IP
网的上层使用TCP
协议,那么就是现在的互联网。
5.2 IP地址
5.2.1 IP的发展历史
IP
地址的发展分为四个历史阶段,如下图:
- 注意本节介绍的是第一阶段。虽然分类的
IP
地址已经成为了历史。
5.2.2 分类的IP地址
-
一个
IP
地址在整个互联网范围内是唯一的。(除了一些RFC
规定的保留地址) -
IP
地址的定义:{<网络号>, <主机号>}
。 -
IP
地址可以分为如下图的五类:
IP
地址是一串长度为32
为的二进制串,为了人们阅读的方便,采用点分十进制书写,例如下图:
- 下面讲解常用的三种类别的
IP
地址:
A类地址
-
网络号占一个字节,第一位固定为
0
。可以指派的网络号为126
( 2 7 − 2 2^7-2 27−2)个,减二的原因是去掉了00000000
和01111111
这两个网络号,因为:(1)
00000000
:表示本网络;(2)
01111111
:作为本地软件环回测试本主机的进程之间的通信之用。(127.0.0.1~127.255.255.254
等价) -
主机号占三个字节,因此最大主机数为
16777214
( 2 24 − 2 2 ^ {24}-2 224−2),减二的原因是因为去掉了二十四为全为0
或者全为1
这两个主机号,因为:(1)全
0
:本网络的标识,不能作为IP
使用。(例如一台主机的地址为127.0.0.4
,该主机所在的网络地址是127.0.0.0
);(1)全
1
:表示该网络的所有主机,不能作为IP
使用,用于广播的用处。(例如B
类地址128.7.255.255
表示在网络128.7.0.0
上所有的主机)。 -
A
类网络的IP
地址占整个IP
地址空间的50%
。 -
如下是
ping
的各种测试,是对A
类网络中的127
开头的网络进行测试:
B类地址
-
网络号占两个字节,固定为
10
。可以指派的网络号为16383
( 2 14 − 1 2^{14}-1 214−1)个,这是因为B
类网络开头为128.0
的是不可以指派的(这是规定)。 -
主机号占两个字节,因此最大主机数为
65534
( 2 16 − 2 2 ^ {16}-2 216−2),减二的原因是因为去掉了十六位为全为0
或者全为1
这两个主机号,因为:(1)全
0
:本网络的标识,不能作为IP
使用。(1)全
1
:表示该网络的所有主机,不能作为IP
使用,用于广播的用处。 -
B
类网络的IP
地址占整个IP
地址空间的25%
。
C类地址
-
网络号占三个字节,固定为
110
。可以指派的网络号为2097151
( 2 21 − 1 2^{21}-1 221−1)个,这是因为C
类网络开头为192.0.1
的是不可以指派的(这是规定)。 -
主机号占一个字节,因此最大主机数为
254
( 2 8 − 2 2 ^ {8}-2 28−2),减二的原因是因为去掉了十六位为全为0
或者全为1
这两个主机号,因为:(1)全
0
:本网络的标识,不能作为IP
使用。(1)全
1
:表示该网络的所有主机,不能作为IP
使用,用于广播的用处。 -
C
类网络的IP
地址占整个IP
地址空间的12.5%
。
- 关于上述三类地址网络号的归纳如下:
- 一些不可以使用的
IP
地址如下:
注意:当IP
为:网络号+全0主机号,这个IP
也不能被使用,其表示所在的网络地址。
REC
保留的地址
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
- 这些地址是保留给专用网的,专用地址在机构内部是唯一的,但是在全球范围内则不是唯一的。具有专用地址的IP数据报不能在因特网上传输,它们只能用于内部网中。
-
这样的
IP
地址分类的好处:(1)方便
IP
地址的管理,因为管理机构只需要分配网络号即可,主机号由单位自行分配;(2)减少路由器的负担,因为路由器只需要考虑网络号即可。
-
用集线器或网桥连接起来的若干若干局域网仍为一个网络,因此这些局域网都具有同样的网络号
net-id
。 -
所有分配到网络号
net-id
的网络,不论范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
5.2.3 IP地址与硬件地址(物理地址、MAC地址)
- 我们重点要掌握着两种地址的区别:物理地址是数据链路层和物理层使用的地址;
IP
地址是网络层和以上各层使用的地址,是一种逻辑地址。
- 一个例子,通过这个例子我们可以看出数据在传输过程中在不同层次源地址和目的地址的变化:
5.2.4 地址解析协议(ARP)
-
5.2.3中的例子中存在一个问题:在路由器中我们需要重新封装
MAC
帧,这就需要我们根据IP
数据报中的目的IP
地址得到目的主机的硬件地址。 -
ARP
就是用来解决这个问题的。 -
网络层使用的是
IP
地址,但是实际网络在链路上传输数据帧时,最终还是必须使用该网络的硬件地址。因此需要ARP
协议,该协议解决该问题的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且经常更新该表(新增或定时删除)。 -
我们可以通过命令
apr -a
查看自己机器对应的映射表,如下图:
-
还有一个问题是我们如何更新这个映射表呢?删除很简单,超过规定时间删除即可(因为某台主机可能因为坏了而导致
IP
和硬件地址映射关系的改变)。那么如果一个IP
找不到对应的MAC
地址呢? -
上述问题可以通过广播单播的方式解决,如下图:
-
注意
ARP
是解决在同一个局域网上的主机和路由器的IP
地址和MAC
地址的映射关系。如果不在同一个局域网,该怎么办?发送方将数据交给路由器由其进行处理即可。 -
从
IP
地址到硬件地址的解析都是自动进行的,主机的用户对这种地址解析过程并不知道。 -
还有一个十分重要的问题:既然网络链路上传送的帧最终按照硬件地址找到目的主机的,那么为什么我们还需要使用抽象的IP地址,而不是直接使用MAC地址通信?
答:这是因为全世界存在各式各样的网络,他们使用不同的硬件地址。要使这些异构网络能够相互通信就必须进行非常复杂的硬件地址转换工作,几乎不可能。类似的问题还有计算器中的长度等的转换,我们可以统一先转到米,然后再转换到目标单位,这样只需要搞清楚各个单位和米之间的关系即可。类似的问题还有货币的转换。
5.2.5 IP数据报的格式
IP
数据包的格式能够说明IP
协议都具有什么功能,格式如下:
-
关于各个字段的解释如下:
(1)版本:占 4 位,指
IP
协议的版本目前的IP
协议版本号为 4 (即IPv4
);(2)首部长度:占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此
IP
的首部长度的最大值是 60 字节;(3)区分服务:占 8 位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过;
(4)总长度:占 16 位,指首部和数据之和的长度。单位为字节,总长度必须 ≤ 最大传送单元
MTU
。根据上一章4.4
节可知IP数据报的有效长度在46到1500字节(Byte)之间。(5)标识(
identification
):占 16 位,它是一个计数器,用来产生数据报的标识。(6)标志(
flag
):占 3 位,目前只有后两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF = 0 时才允许分片。(7)片偏移(13 位)指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
(8)生存时间(
TTL
):数据报在网络中传输过程的“寿命”。避免由于路由表错误引起的数据报在网络中循环、无休止地流动。路由器每转发一次TTL
减一,当小于0时,丢弃这个数据包,不再转发。(9)协议字段指出此数据报携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。
小插曲:原来协议字段这样的数值都是由互联网赋号管理局(
IANA
)负责制定,INIA
仅有一个人负责,名为Jon Postel
,关于他的有意思故事可以参考:网址。(10)首部检验和(16 位)字段只检验数据报的首部不检验数据部分。
(11)源地址和目的地址都各占 4 字节。
(12)可变部分:很少使用。
5.2.6 IP层转发分组的流程
- 在网络层数据的转发是依据路由表,路由表最重要的是以下两个信息:(目的地址网络,下一跳地址)。
- 如下是一个路由表的例子:
上表中的三四行数据代表的是特定主机路由,即直接指定一个IP
地址。一般而言转发分组都是基于目的主机所在的网络,但是特定主机路由是特例,目的是使网络管理人员更方便控制网络和测试网络。
- 默认路由:是路由表中的一条数据,当不能具体确定将数据发到哪里时,按照默认路由发送。这种转发方式在一个网络只有很少的对外连接时是很有用处的,可以显著减少路由表的空间和搜索路由表所用的时间。如下图:
- 可以使用命令
route print
打印查看本机的路由表:
- 分组转发算法(前提:第一阶段,
IP
地址分类):
5.3 划分子网和构造超网
- 划分子网对应
IP
发展的第二阶段,构造超网对应IP
发展的第三阶段。
5.3.1 划分子网
-
第一阶段,
IP
地址分类的不合理性:(1)
IP
地址利用率低。例如一个单位申请一个C
类网络就够用,但是可能会申请一个B
类网络,理由是考虑以后发展。(2)给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
(3)两级
IP
地址不够灵活。例如紧急情况,需要开通一个新的网络,需要申请,比较费时。 -
基于上述上述问题提出了划分子网的技术。
-
划分子网的思路如下:
(1)一个单位,可以将所拥有的物理网络划分成若干个子网。这属于单位内部的事情,对外仍然表现为一个网络。
(2)方法是从主机号中借用若干位作为子网号,于是两级
IP
地址在本单位内部就变为了三级IP
地址,IP
地址:{<网络号>, <子网号>, <主机号>}
。(3)凡是从其他网络发送给本单位的某台主机
IP
数据报,仍然使用网络号找到连接在本单位的路由器。此路由器收到IP
数据报后,再按照网络号和子网号直到目的子网,将IP
数据报交付给目的主机。 -
现在还存在一个问题,我们如何确认子网的网络地址呢?这就要引入子网掩码的概念,让
IP
地址和子网掩码按位与得到的就是子网的网络地址,如下图:
-
现在还需要弄清楚一个问题,这就是:在不划分子网时,既然没有子网,为什么还要使用子网掩码?这就是为了便于查找路由表。现在互联网的标准规定,所有的网络都必须使用子网掩码,同时在路由器上也必须有子网掩码这一栏。
-
如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。
A、B、C
类地址的默认子网掩码分别为255.0.0.0、255.255.0.0、255.255.255.0
。 -
子网掩码是一个网络或者一个子网的重要属性。
-
子网号不能全为0或者全为1,但注意,随着后面
CIDR
的广泛使用,现在全0或者全1的子网号也可以使用了,但要谨慎,因为路由器可能不支持。 -
优缺点:增加了灵活性,但却减少了能够连接在网络上的主机数目。
-
注意:同样的
IP
地址和不同的子网掩码可以得到相同的网络地址。 -
使用子网分组的转发:
5.3.2 构造超网
-
构造超网使用到的技术为:无分类域间路由选择(CIDR)。
-
CIDR
的主要特点有两个:(1)
CIDR
消除了传统的A
类、B
类、C
类地址以及划分子网的概念。因此可以更有效的分配IPv4
的地址空间。CIDR
将IP
地址从三级分类有改回了两级分类,但是使用的是无分类的两级编址,使用斜线记法,例如:(2)
CIDR
把网络前缀都相同的连续的IP
地址组成一个CIDR
地址块,我们只需要知道CIDR
中的任意一个地址,就可以知道这个地址块的起始地址和最大地址。例如IP=128.14.35.7/20
: -
CIDR
的一个优点是可以进行路由聚合,从而减少路由器中的项数,减轻路由器的压力。路由聚合也称为构成超网。 -
使用
CIDR
记法时,路由表中的每一项都由如下两项构成:(网络前缀,下一条地址)。现在存在一个问题,当目标IP
地址和路由表中的多条项目匹配了,我们应该选择哪一个?答案是选择最长的前缀,因为这样地址更加具体。 -
路由表示经常被查询的,我们应该如何提高查询效率呢?可以使用
trie
。
5.4 路由器的结构
- 路由器是一种具有多个输入端口和输出端口的专用计算器。其任务是转发分组。
- 路由器的结构图(下图中的
1、2、3
分别代表:物理层、数据链路层、网络层):
-
总体分为两大部分:路由选择主要负责生成路由表(依据
RIP、OSPF
等路由选择协议);分组转发负责根据路由表对数据进行转发。 -
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。这是造成分组丢失的重要原因。
-
分组转发中的交换结构有三种形式:
5.5 路由选择协议
-
理想的路由算法:
(1)必须是正确的和完整的;
(2)计算上应该简单;
(3)有自适应性;
(4)具有稳定性;
(5)对用户是公平的;
(6)算法应该是最佳的。所谓的最佳是在某种情况下得出的比较合理的选择而已。
-
路由算法的分类:静态路由选择策略,动态路由选择策略。下面讲解的都是动态路由。
-
当前的互联网采用分层的路由选择协议。原因有以下两点:
(1)互联网规模特别大;
(2)许多单位不愿意外界了解自己单位网络的布局细节和本单位使用的路由选择协议,但同时希望连接在互联网上。
-
因此,可以把互联网划分成许多小的自治系统(
AS
)。一个AS
对其他AS
表现出的是一个单一的和一致的路由选择策略。 -
在互联网上,一个
ISP
就是一个自治系统。 -
互联网依据在
AS
内还是AS
之间将路由选择协议划分为两大类:内部网关协议(IGP
),外部网关协议(EGP
)。 -
AS
之间的连接关系:
-
路由算法的另一种分类(依据在
AS
内还是AS
之间):域内路由选择,域间路由选择。 -
路由选择协议的分类如下:
-
内部网关协议(
IGP
)需要掌握的三个要点是(who、what、when
):(1)和哪些路由器交换信息?
(2)交换什么信息?
(3)在什么时候交换信息?
5.5.1 内部网关协议:RIP(路由信息协议)
-
RIP
全称为Routing Information Protocol
,中文名称为路由信息协议。 -
RIP
是一种分布式的基于距离向量的路由选择协议。是互联网的标准协议,其最大的优点就是简单。 -
RIP
协议要求网络中的每个路由器维护他自己到其他每个网络的距离,距离定义:该路由器S
直连网络距离为1,每多一个路由器,距离增加1,因此有多少个路由器,则S
到目标网络的距离就是几。如下图:
-
距离也被称为跳数,每经过一个路由器,跳数就加一,
RIP
认为好的路由经过的路由器数目少(即使存在经过的路由器更多但时延更小的路径RIP
也不认为是更好的)。 -
RIP
允许一条路径上最多有15
个路由器,因此距离为16
相当于不可达。可见,RIP只适用于小型互联网。 -
RIP
协议的三个要点为(who、what、when
):(1)仅和相邻的路由表交换信息;
(2)交换的信息是自己的路由表;
(3)按照固定的时间间隔交换信息。例如,每隔30秒。
-
刚开始工作的时候,所有的路由表都是空的。然后路由器将直连网络写入路由表,接着路由表之间交换信息,最终所有的路由器都会知道到达本
AS
的任意一个网络的最短距离和下一条路由器的地址。这个过程可以收敛,并且收敛速度比较快。 -
路由表中某一条表项的主要内容是:(到达某个网络
N
的最短近距离,到达该网络N
下一跳地址)。
- 路由表的更新原则是找出到每个目的网络的最短距离,这种更新算法又被称为距离向量算法。算法步骤如下:
总结就是:假设路由器A
将自己的路由表T1
发送给路由器B
(路由表为T2
),首先B
会修改T1
,然后将修改后的T1
中的每条表项(假设当前考察的表项的目的为N
)和T2
对比:
(1)若T2
中没有N
的记录,则在T2
中添加这条记录;
(2)T2
中有N
的记录:① 若对比的两条记录下一跳地址相同,更新T2
对应的记录;② 若对比的两条记录下一跳地址不同,N
对应记录距离小则更新,否则不更新。
- 上述距离向量算法的基础是
Bellman-Ford
算法(图论中的算法):设X
是A
到B
的最短路径上的一点,则A->X
,X->B
都是最短路径(可以用反证法证明)。
RIP
协议的报文格式(RIP
使用UDP
的520
端口,UDP
对应IP
数据报首部的协议字段为17
):
-
RIP
的优点:实现简单,开销较小。 -
RIP
的缺点:(1)限制了网络的规模;(2)好消息传播的快,而坏消息传播的慢。 -
关于第(2)的缺点的例子:
5.5.2 内部网关协议:OSPF(开放最短路径优先)
-
OSPF
全称为Open Shortest Path First
,中文名称为开放最短路径优先。 -
最短路径优先是因为适用了
Dijkstra
提出的最短路径算法,目前OSPF
最新的版本是第二个版本。 -
OSPF
最主要的特征就是使用分布式的链路状态协议(这里的链路就是指两个路由器都有接口的网络),而不是像RIP
那样使用距离向量协议。 -
OSPF
协议的三个要点为(who、what、when
):(1)向本AS中的所有路由器发送信息,使用的是洪泛法:就是路由器通过所有输出端口向相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有相邻的路由器。
(2)发送的信息是本路由器相邻的所有路由器的链路状态,所谓的链路状态就是:本路由器和哪些路由器相邻,以及该链路的度量(费用、距离、延时、带宽等)。
(3)链路发生变化时,才会发送信息。
-
各路由器之间频繁交换信息,最终所有的路由器都能建议一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图。这个数据库在整个
AS
中应该是一致的(称为:链路状态数据库的同步)。每个路由器都知道所在的AS
有多少个路由器,以及哪些路由器是相连的,其代价是多少,等等。有了这些信息,就可以通过Dijkstra
算法求单源最短路径了。 -
OSPF
的一个重要的优点就是更新过程收敛的快。 -
为了使得
OSPF
能够用于规模较大的网络,OSPF
将AS
再划分为更小的范围,称为区域,每个区域之间的路由器进行洪泛,这样可以大大减少整个网络上的通信量。如下图(区域可以分为主干区域、普通区域。下图有一个主干区域,三个区域(普通区域)):
-
OSPF
直接使用IP
数据报传输数据(RIP
使用UDP
,然后再将UDP
放入IP
数据报进行数据传输,RIP
使用UDP
的520
端口,UDP
对应IP
数据报首部的协议字段为17
),OSPF
对应IP
数据报首部的协议字段为89
。 -
OSPF
的格式如下:
当IP
数据包首部协议字段为89
时,代表该数据报封装的OSPF
。
-
关于
OSPF
的五种类型的分组:类型1
用于发现和维持临站的可达性,并且每隔10s
就需要交换一个问候分组,若40s
没有收到某个相邻路由器发来的问候分组,则认为不可达;其他四种分组都是用来进行链路状态数据库的同步的。 -
链路状态数据库的建立过程:
-
OSPF
的其他特点 :(1)
OSPF
允许管理员给每条路由指定不同的代价。因此,OSPF
对于不同类型的业务可计算出不同的路由。链路的代价是1~65535
中的任意一个无量纲的数;(2)如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡。
(3)所有在
OSPF
路由器之间交换的分组都具有鉴别的功能。因此保证了仅在可信赖的路由器之间交换链路信息。(4)支持可变长度的子网划分和无分类编址
CIDR
。(5)每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
OSPF
规定,链路状态序号的增加的速率不能超过5秒钟一次,这样,全部序号空间在600
年内不会产生重复号。
5.5.3 外部网关协议:BGP(边界网关协议)
-
BGP
全称为Border Gateway Protocol
,中文名称为边界网关协议。 -
为什么不同自治系统(
AS
)之间的路由选择不能使用RIP
或者OSF
?(1)互联网的规模太大,使得
AS
之间路由选择十分困难;(2)
AS
之间的路由选择必须考虑相关策略。两个例子:① 某个自治系统可能更愿意让付了服务费的网络经过自己;② 我国国内的站点在相互传输数据时不应经过国外兜圈子,特别是,不要经过某些对我国的安全有威胁的国家。 -
因此,
BGP
只能力求找一条能够到达目的网络且比较好的路由(不要兜圈子),而并非要寻找一条最佳路由。因此BGP
采用了路径向量(path vector)路由选择协议。(RIP
采用距离向量协议,OSPF
采用链路状态协议)。 -
在配置
BGP
时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的BGP发言人,BGP
发言人往往就是BGP边界路由器,但也可以不是。 -
一个
BGP
发言人要与其他的AS
中的BGP
发言人交换路由信息,就要先建立TCP
连接(端口号为179),然后在此连接上交换BGP
报文以建立BGP
会话(session
),然后利用BFP
会话交换路由信息。相邻的两个BGP
发言人被称为邻站或对等站。如下是BGP
发言人和AS
之间的关系图:
- 边界网关协议
BGP
所交换的网络可达性的信息就是要到达某个网络(CIDR
网络前缀表示)索要经过的一系列自治系统。例如:
-
BGP
协议交换的信息数量是AS
个数的量级,这要比AS
中的网路少很多。 -
BGP
支持无分类域间路由选择CIDR
,因此BGP
的路由表也就应该包括目前网络前缀、下一条路由器、以及到达该目的网络所要经过的自治系统序列。由于使用了路径向量的信息,可以很容易的避免产生兜圈子的路由。 -
在
BGP
刚刚运行时,BGP
的邻站交换整个BGP
路由表。但是以后只交换发生变化的部分。 -
BGP
可以很容易地解决距离向量路由选择算法(RIP
)中的坏消息传播的慢这一问题,这是因为BGP
发言人可以从不止一个邻站获得路由信息。
BGP
的格式如下:
5.6 网际控制报文协议(ICMP)
-
ICMP
存在的目的?为了更有效的转发IP数据报、提高成功交付IP数据报的机会。 -
ICMP
全称为Internet Control Message Protocel
,中文名称为网际控制报文协议。 -
注意:
ICMP
是网络层的协议,不是高层的协议(看起来好像是高层协议,因为ICMP
报文是封装在IP
数据报中,作为其中的数据部分)。 -
ICMP
在网络协议中所处的位置如下图:
ICMP
数据报格式:
当IP
数据包首部协议字段为1
时,代表该数据报封装的ICMP
。
-
ICMP
差错报告报文分为四种:(1)终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。例如
UDP
封装进IP
中,但是使用了非法的目的端口。(2)时间超过:分为两种情况:①当路由器收到
TTL
(IP
头部的字段)为0的数据报时,除了丢弃该数据报外,还要向源点发送时间超过报文。② 当终点在预先规定的时间内不能收到一个数据报的全部数据报片段时,就把已经收到的数据报片都丢弃,并向源点发送时间超过报文。(3)参数问题:当路由器或目的主机收到的数据报的首部中有的字段不正确时,就丢弃该数据吧,并向源点发送参数问题报文。
(4)改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应该把数据报发送给另外的路由器(可通过更好的路由)。
命令traceroute
(linux
中的命令,windows
中对应的命令是tracert
)用到了上述的(1)(2)报文类型。
ICMP
差错报告报文格式:
提取收到的数据报的数据字段的前8个字节是为了得到运输层端口号(对于TCP
和UDP
)以及运输层报文的发送序号(对于TCP
)。这些信息对源点通知高层协议时有用的。
-
下面是不应发送 ICMP 差错报告报文的几种情况:
(1)对
ICMP
差错报告报文不再发送ICMP
差错报告报文。(2)对第一个分片的数据报片的所有后续数据报片都不发送
ICMP
差错报告报文。(3)对具有多播地址的数据报都不发送
ICMP
差错报告报文。(4)对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送
ICMP
差错报告报文。
-
ICMP
询问报文常用的有两种:(1)回送请求和回答请求:
ICMP
回送请求报文是由主机或路由器向一个特定的目的主机发送的询问。收到此报文的的主机必须给出应答。(2)时间戳请求与回答:
ICMP
时间戳请求报文是请求某台主机或路由器回答当前的日期和时间。(此时间戳表示从1900.1.1
到当前时刻一共有多少秒)。
命令ping
使用到了上述的(1)。
-
ICMP
的应用举例:ping
、tracert
。 -
ping
:分组网间探测(Packet InterNet Groper
)。该命令使用ICMP
的回送请求和回送回答报文,是应用层直接使用网络层ICMP
的一个例子。它没有通过传输层的TCP
或UDP
。
tracert
原理:数据报中封装的是无法交付的UDP
用户数据报(因为此UDP
使用了非法的目的端口)。第一个数据报P1
将TTL
设置为1,当P1
到达第一个路由器R1
后,R1
会把P1
丢弃,然后向源主机发送ICMP
时间超过差错报告报文,此时得到第一个路由器的IP
地址,依次类推,可以得到路径上其他路由器的IP
地址;当最后一个数据报到达目的主机时数据报的TTL
等于1,目的主机既不转发数据报,也不把TTL
减一,而是向源主机发送ICMP
终点不可达差错报告报文(因为此UDP
使用了非法的目的端口)。
5.7 IPv6
5.7.1 概述
-
IP
是互联网的核心协议,IPv4
是再20世纪70年代末期设计的,互联网经过几十年的发展,到2011年2月,IPv4
的地址已经耗尽,ISP
已经不能再申请到新的IP
地址块了。 -
解决
IP
地址不够用的方法:(1)采用无分类域间路由选择
CIDR
,使IP
地址的分配更加合理;(2)采用网络地址转换 NAT 方法以节省全球 IP 地址;
(3)用具有更大地址空间的新版本的 IP 协议
IPv6
(根本措施)。 -
IPv6
仍然支持无连接的传输,但将协议数据单元称为分组,而不是IPv4
的数据报。但为了方便起见,仍使用数据报这个名词代替分组。
5.7.2 IPv6的结构
IPv6
的结构如下:
- 指的注意的是,
IPv6
的首部长度是固定的,这样路由器不需要处理扩展首部(逐跳选项扩展首部除外),大大提高了路由器的处理效率。
5.7.3 IPv6的地址
-
IPv6
的目的地址可以是以下三种基本类型地址之一:(1)单播(unicast):就是传统的点对点通信;
(2)多播(multicast):一对多的通信,广播是多播的一个特例;
(3)任播(anycast):这是
IPv6
新增的一种类型。任播的终点是一组计算机,但数据报只交付其中一个,通常是距离最近的一个。 -
IPv6
的地址采用冒号十六进制记法,例如:68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
,其中包含两个技术:(1)零压缩:一连串连续的0可以用一对冒号代替,例如:
FF05:0:0:0:0:0:0:B3
可以写成FF05::B3
。注意,规定任意一个地址只能使用一次零压缩,否则会产生歧义。(2)冒号十六进制记法可结合点分十进制一起使用,例如:
0:0:0:0:0:0:128.10.2.1
,前六个0代表96
个二进制0,后面128.10.2.1
代表最初的IPv4
地址,这在IPv4
向IPv6
的转换阶段特别有用。 -
另外
CIDR
在IPv6
中仍然可以使用。例如12AB:0000:0000:CD30:0000:0000:0000:0000/60
可以简写为:12AB:0:0:CD30::/60
。 -
IPv6
地址的分类:
5.7.4 IPv4向IPv6过渡
-
采用逐步演进,向下兼容的方式。存在两种技术:(1)双栈协议(
IPv4
和IPv6
首部需要相互转换);(2)隧道技术(IPv6
数据报进入IPv4
网络时,加上一个IPv4
的首部,IPv4
协议字段为41代表里面封装的数据是IPv6
数据报)。 -
(1)双栈协议:
- (2)隧道技术:
5.7.5 ICMPv6
- 地址解析协议
ARP
和网际组管理协议都被合并到ICMPv6
中了。
5.8 IP多播
5.8.1 概述
-
定义:一对多的通信称为
IP
多播。 -
优点:大大节约网络带宽。如下图,如果使用单播,则视频服务器需要发送90个单播,使用多播的话,只需要发送一次。
-
怎么让多播数据达到某台特定主机呢?显然,不能将这台主机的
IP
地址写入多播数据,因为一个多播组会有很多太主机。实际做法是:在多播数据的目的地址中写入多播组的标识符(其实就是IP
地址中的D
类地址),然后让多播组主机的IP
地址和标识符关联起来。 -
D
类地址的前四位是固定的1110
,有28
位是可变的。 -
多播数据报是“尽最大努力交付”,不保证数据一定能交付给多播组中的全部成员。
-
多播数据报被封装在数据报中,数据报首部的协议字段是
2
,表明该数据报中的数据是IGMP
(网际管理协议)。 -
多播地址只能用于目的地址,不能用于源地址。
-
ping
后输入多播地址,将永远不会收到响应。 -
IP
多播分为两类:(1)只在本地局域网进行硬件多播;(2)在互联网上进行多播。下面讨论(1)
5.8.2 在局域网上进行硬件多播
-
规定:在数据链路层的多播
MAC
地址范围是:01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF
,只有23
位可用。 -
多播地址不需要使用
ARP
协议解析多播IP
地址对应的MAC
地址,只需要将D
类IP
地址最后的23
位放置到MAC
地址最后的23
位即可,如下图:
- 可以看到一个多播
MAC
地址可能对应多个IP
地址,因此,主机收到多播数据报后还要在上一层(即IP
层)利用软件进行过滤,把不是本主机要接收的数据报直接丢弃。
5.8.3 IP多播需要使用的两种协议
-
需要使用的两种协议如下:
(1)
IGMP
,全称Internet Group Management Protocol
,即网际组管理协议。为了让路由器知道多播组成员的信息。(2)多播路由选择协议。为了让多播数据报以最小的代价传送给所有的成员。
-
IGMP
的工作分为两个阶段:(1)当某个主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他多播路由器。
(2)因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
5.9 虚拟专用网(VPN)
IP
资源比较宝贵,另外考虑到互联网并不是很安全,一个机构内也并不需要将所有的主机接入到外部的互联网,因此预留了一些IP
地址用于机构内部使用,不能用于互联网,这些IP
允许在不同的机构内存在重复。这些预留的IP
地址范围如下:
10.0.0.0~10.255.255.255(或记为10.0.0.0/8,又称为24位块)
172.16.0.0~172.31.255.255(或记为172.16.0.0/12,又称为20位块)
192.168.0.0~192.168.255.255(或记为192.168.0.0/16,又称为16位块)
-
采用上述
IP
地址的互联网称为专用互联网或本地互联网。(专用网) -
有时一个很大的机构的许多部门的分布很广(例如,世界各地),这些部门需要经常交换信息。有两种方法:
(1)租用电信公司的通信线路为本机构专用。租金太高,用的很少。
(2)利用公用的互联网作为本机构各专用网之间的通信载体。这样的专用网被称为虚拟专用网VPN(Virtual Private Network)。
-
VPN
经过互联网的部分必须进行加密处理,因为这些数据本应在部门内传输,不应被外界窃取。 -
一般使用
IP
隧道技术实现VPN
,例如下图:
-
VPN
的分类:(1)内联网
VPN
:上图中的A、B
都属于同一个机构;(2)外联网
VPN
:允许某些外部机构(通常是合作伙伴)接入本机构;(3)远程接入
VPN
:有许多员工出差,与公司的联系就需要使用远程接入VPN
。
5.10 网络地址转换(NAT)
- 现在存在一个问题:专用网中
IP
地址不能出现在互联网上,那专用网中的主机如何与互联网上的其他主机通信?答案是采用网络地址转换,这需要路由器安装上NAT
软件,它至少有一个有效的外部全球IP
地址,这样在专用网中的主机向互联网发送数据时,路由器会将其IP
数据报首部的源IP
地址转化为路由器拥有的全球外部IP
地址。如下图:
- 上述如果路由器有
n
个有效的外部全球IP
地址,则专用网内最多可以同时有n
台主机接入到互联网。为了更有效的利用NAT
路由器上的全球IP
地址,这里将传输层的端口号引入(网络地址与端口号转换NAPT),用来标识不同的进程,此时一个外部全球IP
地址也可以同时支持多台专用网内的主机接入到互联网中,如下表是两个本地主机共用一个全球IP
地址(因为端口号不同,因此可以区分出来):
- 应当指出,从层次的角度来看,
NAPT
的机制有些特殊,因为NAPT
路由器还要查看和转换运输层的端口号,而这本属于运输层的范畴。但不管怎样,NAT
(包括NAPT
)已经成为互联网的一个重要构件。