第5章:网络层

第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 272)个,减二的原因是去掉了0000000001111111这两个网络号,因为:

    (1)00000000:表示本网络

    (2)01111111:作为本地软件环回测试本主机的进程之间的通信之用。(127.0.0.1~127.255.255.254等价)

  • 主机号占三个字节,因此最大主机数为16777214 2 24 − 2 2 ^ {24}-2 2242),减二的原因是因为去掉了二十四为全为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 2141)个,这是因为B类网络开头为128.0的是不可以指派的(这是规定)。

  • 主机号占两个字节,因此最大主机数为65534 2 16 − 2 2 ^ {16}-2 2162),减二的原因是因为去掉了十六位为全为0或者全为1这两个主机号,因为:

    (1)全0:本网络的标识,不能作为IP使用。

    (1)全1:表示该网络的所有主机,不能作为IP使用,用于广播的用处。

  • B类网络的IP地址占整个IP地址空间的25%

C类地址

  • 网络号占三个字节,固定为110。可以指派的网络号为2097151 2 21 − 1 2^{21}-1 2211)个,这是因为C类网络开头为192.0.1的是不可以指派的(这是规定)。

  • 主机号占一个字节,因此最大主机数为254 2 8 − 2 2 ^ {8}-2 282),减二的原因是因为去掉了十六位为全为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的地址空间。CIDRIP地址从三级分类有改回了两级分类,但是使用的是无分类的两级编址,使用斜线记法,例如:

    (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算法(图论中的算法):设XAB的最短路径上的一点,则A->XX->B都是最短路径(可以用反证法证明)。

  • RIP协议的报文格式(RIP使用UDP520端口,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能够用于规模较大的网络,OSPFAS再划分为更小的范围,称为区域,每个区域之间的路由器进行洪泛,这样可以大大减少整个网络上的通信量。如下图(区域可以分为主干区域、普通区域。下图有一个主干区域,三个区域(普通区域)):

在这里插入图片描述


  • OSPF直接使用IP数据报传输数据(RIP使用UDP,然后再将UDP放入IP数据报进行数据传输,RIP使用UDP520端口,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)时间超过:分为两种情况:①当路由器收到TTLIP头部的字段)为0的数据报时,除了丢弃该数据报外,还要向源点发送时间超过报文。② 当终点在预先规定的时间内不能收到一个数据报的全部数据报片段时,就把已经收到的数据报片都丢弃,并向源点发送时间超过报文。

    (3)参数问题:当路由器或目的主机收到的数据报的首部中有的字段不正确时,就丢弃该数据吧,并向源点发送参数问题报文。

    (4)改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应该把数据报发送给另外的路由器(可通过更好的路由)。

命令traceroutelinux中的命令,windows中对应的命令是tracert)用到了上述的(1)(2)报文类型。

  • ICMP差错报告报文格式:

在这里插入图片描述

提取收到的数据报的数据字段的前8个字节是为了得到运输层端口号(对于TCPUDP)以及运输层报文的发送序号(对于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的应用举例:pingtracert

  • ping:分组网间探测(Packet InterNet Groper)。该命令使用ICMP的回送请求和回送回答报文,是应用层直接使用网络层ICMP的一个例子。它没有通过传输层的TCPUDP

在这里插入图片描述

  • tracert原理:数据报中封装的是无法交付的UDP用户数据报(因为此UDP使用了非法的目的端口)。第一个数据报P1TTL设置为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地址,这在IPv4IPv6的转换阶段特别有用。

  • 另外CIDRIPv6中仍然可以使用。例如12AB:0000:0000:CD30:0000:0000:0000:0000/60可以简写为:12AB:0:0:CD30::/60

  • IPv6地址的分类:

在这里插入图片描述

5.7.4 IPv4向IPv6过渡

  • 采用逐步演进,向下兼容的方式。存在两种技术:(1)双栈协议(IPv4IPv6首部需要相互转换);(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地址,只需要将DIP地址最后的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)已经成为互联网的一个重要构件。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值