计算机网络 - 网络层

参考资料

网络层概述

首先要明确的是,网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输。

要实现网络层任务,需要解决以下几个主要问题:

  1. 网络层向运输层提供怎样的服务(可靠传输还是不可靠传输)
  2. 网络寻址问题
  3. 路径选择问题

因特网(Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。 由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此TCP/IP协议栈中网络层常称为网际层。

网络层提供的两种服务

网络层提供的两种服务:面向连接的虚电路服务 和 无连接的数据报服务

面向连接的虚电路服务: 1

无连接的数据报服务: 2

两者服务的比较: 3

IP数据报的发送和转发过程

IP数据包的发送和转发过程包含两个部分:

  1. 主机发送IP数据报
  2. 路由器转发IP数据报

例如:

4

A网络和B网络之间要进行数据报交互。

  • 首先要考虑第一个问题:源主机如何知道目的主机是否与自己在同一个网络中,是直接交付(同一网络),还是间接交付(不同网络,经过路由器转发)?

这时就要用到我们上面子网掩码学习过程中用到的知识:子网掩码和IP地址做逻辑与运算便为网络地址;对比网络地址,相同为直接交付,不同为间接交付。(将网络地址的主机号全部变为1,得到广播地址。注意:子网掩码连续全1的是网络地址,后面的是主机地址)

5

  • 如果目的网络地址和源网络地址相同,就是在同一个网络中,属于直接交付;
  • 如果目的网络地址和源网络地址不相,就不在同一个网络中,属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发。

此时若判断出为不同网络,就会出现第二个问题:

  • 主机C如何知道路由器R的存在?

6

为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关

例如。路由器的接口0的IP地址192.168.0.126做为左边网络的默认网关。发送到其他网络的数据报都需要经过默认网关进行转发。

当数据包到达默认网关后,就出现了第三个问题:

  • 路由器收到IP数据报后如何转发?

路由器收到IP数据报后主要几个步骤:

  1. 检查IP数据报首部是否出错
  • 若出错,则直接丢弃该IP数据报并通告源主机
  • 若没有出错,则进行转发
  1. 根据IP数据报的目的地址在路由表中查找匹配的条目
  • 若找到匹配的条目,则转发给路由器表条目中指示的下一个路由器
  • 若找不到,则丢弃该数据报并通告源主机

在此例中:

假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值。路由器对该IP数据报进行查表转发:

7

  1. 逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址。
  2. 与路由条目中的目的网络进行比较,如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报
  • 路由器是隔离广播域的,也就是广播只能在自己网络范围内传播 8

备注:

集线器(HUB)工作于OSI参考模型第一层,即“物理层”。
交换机工作在OSI参考模型的数据链路层,也就是第二层,
路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。
1
2
3

IPv4数据报的首部格式

为了表示方便,以下IPv4数据报检查简称为IP数据报。

  • IP数据报及其首部格式是实现IP协议主要功能的基础,我们有必要搞清楚这部分内容。

IP协议的组成:

在IP协议中分为两部分:

固定部分:
由20子节组成,是每个IP数据报都必须包含的部分。

可变部分:
可选字段,由40个子节组成,用来增加IP数据报的功能。

IP数据报的首部的每一行都由32个比特(4个子节)组成。

在图中的每个小个子称为字段或者域。每个字段或者某个字段的组合用来表示IP协议的相关功能。
1
2
3
4
5
6
7
8
9

9

相关字段功能解释:

  • 版本:占4比特,表示IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
  • 首部长度:占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。
    • 最小十进制取值为5,表示IP数据报首部只有20字节固定部分
    • 最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
  • 可选字段:长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。
  • 填充:为了确保首部长度为4的整数倍。使用全0进行填充。因为 首部长度 = 固定部分 + 可变部分 ,不一定为4的整数倍。
  • 区分服务:占8比特,用来获得更好的服务。利用该字段的不同数值可提供不同等级的服务质量。
  • 总长度; 占16比特,表示IP数据报的总长度(首部 + 数据载荷),最大取值为十进制的65535,以字节为单位。
  • 标识、标志、片偏移字段:这三个字段共同作用于用户数据报分片,此时就引起了数据报分片的概念。
    • 数据报分片:
      • 简单来说,数据报分配就是数据报长度超过最大传输单元时,将数据报进行分割的操作。
      • 数据报长度超过最大传输单元(MTU)时,将无法封装成帧,因此就将原IP数据报进行分片,使其成为更小的IP数据报。再逐个分配IP数据报封装成帧进行递交给物理层处理。 10
      • 以太网规定MTU的值为1500子节
    • 标识、标志、片偏移含义: 11
  • 生存时间:占8比特,最初以秒为单位,最大生存周期为255秒;现在以跳数为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
    • 生存时间字段TTL的一个重要作用:防止IP数据报在网络中永久兜圈。(由于人工设置静态路由条目出现错误,很明显会出现路由环路问题,导致IP数据报在路由环路之间循环传输,永久兜圈。)
  • 协议:占8比特,指明IPv4数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值如下: - ICMP 1 、 IGMP 2、TCP 6、UDP 17、IPv6 41、 OSPF 89
  • 首部检验和: 占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。
    • IP数据报每经过一个路由器,路由器都需要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
    • 由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。 源IP地址、目的IP地址字段:各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。

数据报分片举例:

12

对于该数据报,长度为数据载荷子节+固定首部子节 > 3800子节。

若在以太网进行传输时,明显是超过以太网MTU的,此时便无法正常封装成帧,因此需要对其及进行分片

13

在分片时,首先给数据载荷个字节进行编号。
编号完毕后根据合适的大小将其进行分组
分组完毕后再给其加上一个新的首部。
然后就要开始填写分组各首部的数据,也就是图中表格的填写。

MF:标识后面还有没有分片数据报,即自己是不是最后一个分片。
DF:标识可否进行分片。
片偏移:记录片偏移的地址量(就是分片首部地址编号跟原首部地址的编号偏移了多少个地址)
标识字段:用于标识本个分片,设置为12345
1
2
3
4
5
6
7
8
9

此时若需要,还可以对某分片进行再度分片,例如,对分片2进行再度分片:

13

网际控制报文协议ICMP

  • ICMP是为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。
  • 主机或路由器使用过ICMP来发送差错报文和询问报文
  • ICMP报文被封装在IP数据报中发送。

ICMP中的差错报文

ICMP中差错报文共有5种,分别是:

  1. 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。

  2. 源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

  3. 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。

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

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

  • 对于以下情况不发送给ICMP差错报告报文:

14

ICMP中的询问报文

回送请求和回答报文:

  • ICMP回送请求报文是由主机和路由向一个特定的目的主机发出的询问
  • 收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
  • 主要用来测试目的站是否可达以及了解其有关状态

时间戳请求和回答:

  • ICMP时间戳请求报文时请某个主机或路由器回答当前的日期和时间
  • ICMP时间戳回答报文中有一个32位的字段,写入的整数代表从1900年1月1日到当前时刻一共有多少秒
  • 主要用来进行时钟同步和测量时间

ICMP协议的两个应用

分组网间探测PING:

  • 用来测试主机或路由器之间的连通性

  • 应用层直接使用网际层的ICMP(没有经过运输层的TCP或UDP)

  • 使用ICMP回送请求和回答报文

跟踪路由traceroute:

  • 用来测试IP数据报从源主机到达目的主机要经过哪些路由器

跟踪路由traceroute实现原理:

  • 简单来说,就是先发送一个TTL = 1的报文,当TTL到达第一个主机后TTL变为0,此时路由器会回送时间超过差错报文,此时就能知道第一个路由位置。此时源主机再发送TTL = 2 的报文,当TTL到达第二个主机后TTL变为0,此时路由器会回送时间超过差错报文,此时就能够知道第二个路由的地址。如此反复,直到到达最后一个路由。

路由器选择协议

路由器的选择协议分为两种:静态路由选择 和 动态路由选择

静态路由选择:

  • 人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由。
  • 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化
  • 一般只在小规模网络中采用。

动态路由选择:

  • 路由器通过路由选择协议自动获取路由信息
  • 比较复杂、开销比较大。能较好地适应网络状态的变化
  • 适用于大规模网络。

因特网(最大的网络)所选择的路由选择协议有三个特点:

  1. 自适应:采用动态路由选择,能较好的时应 网络状态的变化
  2. 分布式:路由器之间通过相互之间的信息交互,交换路由信息
  3. 分层次:将整个互联网划分为许多较小的自治系统AS(Autonomous System),例如,一个较大的因特网服务提供商(电信),就可以划分成一个自治系统,对于自治系统内部和自治系统外部,分别采用不同类别的路由选择协议,分别进行路由选择。

15

常见的路由协议:

16

路由器的基本结构:

17

路由器是具有多个输入端口和输出端口的专用计算机,其任务是转发分组。

路由器主要由两部分组成:

  1. 路由选择部分:
  • 核心构件是路由选择处理机,根据路由器选择协议,周期性的和其他路由器进行路由信息交互,构建路由表。
  1. 分组转发部分:
  • 分组转发部分主要有三部分组成:交换结构、一组输入端口一组输出端口。