计算机网络——网络层探究
1365字约5分钟
计算机网络
2018-05-28
好久没写博客了。感觉最近有点懒了。重新拾起《计算机网络——自顶向下方法》看看,这一篇聊聊网络层。
简述
网络层的作用即是将分组从一台主机移动到另一台主机。转发 和 路由选择 共同完成这项工作。除此之外,网络层还有 连接建立(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.1
、223.1.1.2
、223.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
的掩码,什么意思呢? /22
即 255.255.252.0
,网络位缩短了2位,2位二进制可以容纳 4 个数字,相当于4个C类子网汇聚成了一个较大的子网。
255.255.255.0
转换为二进制为11111111 11111111 11111111 00000000
255.255.252.0
转换为二进制为11111111 11111111 11111100 00000000