Skip to content

网络层

网络层主要作用是实现网络互连,进而实现数据在各网络之间的传输。一个消息报文,是如何实现源 IP 到目标 IP 的,为了搞清楚网络层的 ip 协议,我们需要了解如下问题:

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

网络层提供的服务

面向连接的需电路服务

虚电路服务需要在网络层建立连接,在网络层级别就保证了通信的可靠性,确保分组不丢失不重复,在双方通信的前提前,需要建立虚电路的逻辑连接,双方沿着已经建立的需电路发送分组,每次传递消息,只需要指明电路的编号,通信结束后,需要释放之前建立的虚电路。

虚电路

很多广域分组交换网都使用面向连接的虚电路服务。例如,曾经的 X.25 和逐渐过时的帧中继 FR、异步传输模式 ATM 等。

无连接的数据服务

在该模式下,不需要建立网络层的连接,也不保证可靠的通信(分组可能丢失、乱序),所有的数据分组可以通过不同的路径到达目标主机。

无连接的数据服务

由于网络层不保证连接的可靠性,所有的这些都需要由上层保证。

因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的传输层),而将相对简单的尽量最大的努力的分组交付支付功能置于因特网核心。

网络寻址

在五层体系下,ip 是网络层最基本的协议。ip 就相当于互联网中的一个门牌号,它具有唯一性,有了 ip 地址,我们就能区别于接入互联网的所有主机。进行端到端之间的通信。

IPv4 地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32 比特的标识符

ipv4 地址的编址方法经历了三个历史阶段:

ipv4

点分十进制方法

分类编址

分类编址

ipv4 网络被分成五类,由网络和主机组成。当一个公司要申请接入网络,会根据公司内要接入的网络的主机数量,选择申请 A 类地址或者 B、C 类地址。

主机号位数对应的组合数,为网络中可分配的主机数量(排除全 0 和全 1)。

随着公司的发展壮大,出现好多子公司。公司想再申请一个网络号,需要等待很久,还需要额外的费用,但是公司原来的主机号 24 位,还能容纳很多新接入的主机。是不是能从主机号借出几位来,切分出多个网络?

划分子网

当一个网络需要从主机号借出几位,来进行网络的再划分。于是子网掩码的概念就出现了

划分子网

划分子网

比如 C 类网络子网掩码默认 255.255.255.0,我们需要从手机号划分出一位做子网号,那么子网掩码就是 255.255.255.128,能划分出两个子网。每个子网可分配的主机就少了,变成了 126。

划分子网

无分类编址

由于划分子网仍然会产生地址的浪费,于是因特网工程组采取了更先进的无分类路由选择 CIDR(Classless Inert-Domain Routing),废弃了 ABC 类分类和子网掩码,让网络号的划分变得更加灵活。

无分类编址

路由选择

有了 ip 地址,相当于网络中,每台接入的主机有了门牌号。但是邮递员在每家每户间派发信件,有这么多个叉路该选择哪条道路呢?

路由

这里有一个路由表的概念,每个路由器,都会维护一张路由表,数据经过路由器,路由器会解封装数据包,读取目标 IP,并且比对路由表,需要从哪个端口进行转发。

路由表

思考

🤔 那么路由表又是怎么来的?

静态路由配置

路由表可以通过网络管理员静态配置,该方案只适用于小规模网络。改方案不能快速的响应新的网络结构以及关系的变化,并且配置错误还有可能导致环路的问题。

动态路由配置

整个因特网被划分为许多较小的自治系统AS(Autonomous System)

动态路由

我们需要着重关心的,就是自治系统内部的路由表,是如何自动生成的。

RIP

路由信息协议RIP(Routing Information Protocol)是内部网关协议 IGP 中最先得到广泛使用的协议。

RIP 使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。

  • 路由器到直连网络的距离定义为 1。
  • 路由器到非直连网络的距离定义为所经过的路由器数加 1。
  • 允许条路径最多只能包含 15 个路由器。"距离”等于 16 时相当于不可达。

因此,RP 只适用于小型互联网。

RIP 的基本工作过程:

  1. 路由器刚开始工作时,只知道自己到直连网络的距离为 1。
  2. 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
  3. 若干次交换和更新后,每个路由器都知道到达本 AS 内各网络的最短距离和下一跳地址,称为收敛。

RIP

RIP 认为最好的路由就是跳数最少的路由,不会考虑到网络的带宽和时延。

OSPF

开放最短路径优先OSPF(Open Shortest Path First),是为克服 RIP 的缺点在 1989 年开发出来的。

  • OSPF 是基于链路状态的,而不像 RIP 那样是基于距离向量的。
  • OSPF 采用 SPF 算法计算路由,从算法上保证了不会产生路由环路。
  • OSPF 不限制网络规模,更新效率高,收敛速度快。

链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cos)。"代价"用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。

基本工作原理:

  1. 使用 OSPF 的每个路由器都会产生链路状态通告 LSA(Link State Advertisement)。LSA 中包含以下内容:
    1. 直连网络的链路状态信息
    2. 邻居路由器的链路状态信息
  2. LSA 被封装在链路状态更新分组 LSU 中,采用洪泛法发送。

OSPF

使用 OSPF 的每个路由器都有一个链路状态数据库 LSDB,用于存储乱 LSA,形成带权有向图,采用基于 Dijkstra 的 SPF 算法算出最短路径。

OSPF

数据报

ip 数据报的头部组成如下:

数据报

其中黄色部分用于分片,为什么要分片?由于链路层以太网规定了最大的传输单元 MTU1500 字节,数据超出的部分需要进行分片。

生存时间:防止数据报在网络中迷路,或者形成环路。每经过一跳路由器 TTL 减一,为 0 就丢弃该数据报。

校验和:网络层协议不提供可靠传输,校验和只是用于首部数据的校验,防止首部传输出错的情况下。由于首部生存时间会一直变,每个路由器都得重新生成新的校验和,很耗时。ipv6 中不再计算首部校验和。

网际控制报文协议 ICMP

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(nternet Control Message Protocol)。主机或路由器使用 ICMP 来发送差措报告报文和询问报文。ICMP 报文被封装在 IP 数据报中发送。

ICMP 差错报告报文:

  • 终点不可达
  • 源点抑制
  • 时间超过
  • 参数问题
  • 改变路由(重定向)

ICMP 询问报文:

  • 回送请求和回答
  • 时间戳请求和回答

来看看 CMP 报文的应用

Ping

Ping

  • 用来测试主机或路由器间的连通性
  • 应用层直接使用网际层的 ICMP(没有通过运输层的 TCP 或 UDP)
  • 使用 ICMP 回送请求和回答报文

Tracert

Tracert

  • 用来测试 P 数据报从源主机到达目的主机要经过哪些路由器
  • 使用了 ICMP 回送请求和回答报文以及差措报告报文

原理是,通过不断的发送 TTL 从开始一直增加到 2,3,4 一直到请求到目标主机为止。这样路径上每一跳的路由器都会返回 TTL 耗尽的差错报告报文。这样就能知道联通路径上的所有路由器了。

ICMP