计算机网络——网络层探究

好久没写博客了。感觉最近有点懒了。重新拾起《计算机网络——自顶向下方法》看看,这一篇聊聊网络层。


简述

网络层的作用即是将分组从一台主机移动到另一台主机。转发路由选择 共同完成这项工作。除此之外,网络层还有 连接建立(connection setup) 的功能。

转发(forwarding)

转发指的是分组在单一的路由器从一条入链路出链路的传送。

路由选择(routing)

路由选择涉及一个网络中的所有路由器,它们经由选择协议共同交互,决定分组从源到目的地所采用的路径。计算这些路径采用了 路由选择算法(routing algorithm)

分组交换机

分组交换机(packet switch)是一个通用概念,指的是能根据分组首部字段的值,从 输入链路接口 转移分组 到 输出链路接口 的交换设备。

分组交换机包括两种:

  • 在数据链路层,基于链路层字段中的值做转发决定的称为 链路层交换机(link-layer switches)
  • 在网络层,基于网络层字段中的值做转发决定的称为 路由器(router)

虚电路和数据报网络

类似于运输层能够提供面向连接的服务(TCP)或者无连接的服务(UDP),网络层也能提供 带连接的服务 或 无连接服务。

网络层中的连接服务称为 **虚电路(Virtual-Circuit, VC)**,无连接服务称为 **数据报(datagram)**。

值得注意的是,网络层并不同时提供这两种服务,在一个计算机网络中,仅提供其一。我们所熟悉的 Internet,属于数据报网络,但在一些其他的网络体系结构(ATM、帧中继等)属于虚电路网络。

此外,跟运输层在端系统与端系统间实现TCP连接不同,网络层的连接服务除了在端系统之间,也存在于网络核心的路由器。

虚电路网络

一条虚电路的组成如下:

  • 源和目的主机之间的路径(一系列链路和路由器)
  • 沿着该路径的每段链路的号码(称为VC号)
  • 沿着该路径的每台路由器中的转发表表项

虚电路的三个阶段:

  • 虚电路建立:发送运输层指定接收方地址,网络层决定发送方与接受方的路径,并为每条链路决定一个VC号,最后为该路径的每台路由器增加一个表项。
  • 数据传送
  • 虚电路拆除

数据报网络

当一个端系统要发送分组时,就会为该分组加上目的地址,然后将分组推进网络,这样每一个分组就称为数据报。

网络中的每一台路由器,都根据转发表,为目的地址查找适当的输出链路,然后对这个分组进行转发。

路由器会将目的地址的前缀与转发表表项进行匹配,当有多个匹配项时,采用 最长前缀匹配规则 来最终选择。


ip协议

ip协议是网络层最著名的协议,它定义了数据报的格式和编址规则。在网络的世界中,每一台设备都拥有一个ip地址,ip协议就是将一个ip地址的数据发送到另外一个ip地址所代表的设备。

ip协议有两个大版本,分别是 ipv4 和 ipv6 。因为历史原因,ipv4目前仍是主流。

ipv4编址规则

ipv4包含32位,一般采用 点分十进制记法 。例如 193.32.216.9,实际上就是 11000001 00100000 11011000 00001001, 每一个点代表8位二进制数的十进制写法。

193 32 216 9
11000001 00100000 11011000 00001001

子网掩码

有时候我们可以看到,由一个路由器和几台主机构成的网络中有相同的前缀,例如 223.1.1.1223.1.1.2223.1.1.3,它们都有相同的前24位比特 223.1.1.x ,我们称这是一个子网。为了方便记下这个子网所代表的网络,通常写作 223.1.1.0/24,称为子网掩码。 /24 的意思是,这个子网有相同的前24位,只有最后8位是不同的,因此也很容易看出,这个子网最多能有 256 个ip地址(00000000-11111111),但是在网络中全0和全1通常作为保留地址不用,所以实际可用的只有 254 个。

常见的子网对应的ip地址数量如下:

掩码 可用位数 可用ip地址数量
/22 6 1024-2
/23 7 512-2
/24 8 256-2
/25 7 128-2
/26 6 64-2
/27 5 32-2
/28 4 16-2

扩展知识

C类IP地址的默认子网掩码为24位,即 255.255.255.0,这时候每个子网有256个IP地址,254个可用。

有时候我们会看到 /22 的掩码,什么意思呢? /22255.255.252.0,网络位缩短了2位,2位二进制可以容纳 4 个数字,相当于4个C类子网汇聚成了一个较大的子网。

255.255.255.0 转换为二进制为 11111111 11111111 11111111 00000000
255.255.252.0 转换为二进制为 11111111 11111111 11111100 00000000