计算机网络原理
第四章 第1节-第2节
第四章:引入
我们将对网络层的转发(forwarding)功能和路由选择(routing)要区分。
转发涉及分组在单一的路由器中从一条入链路到一条出链路的传送。路由选择涉及一个网络的所有路由器,它们经路由选择协议共同交互,以决定分组从源到目的地结点所采用的路径。
•我们将研究网络层编址和IPv4的数据报格式。
然后我们将探讨网络地址转换(NAT)、数据报分段、因特网控制报文协议(ICMP)和IPv6。
•路由选择协议(RIP、OSPF和IS-IS)和因特网的自治系统之间的路由选择协议(BGP)。

一、前两节:转发与路由选择
每台路由器具有一张转发表(forwarding table)。路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在该路由器的转发表中索引查询。
•存储在转发表项中的该首部的值指出了该分组将被转发的路由器的输出链路接口。分组首部中的该值可能是该分组的目的地址或该分组所属连接的指示,这取决于网络层协议。

1. 转发 forwarding
转发是单个路由器内部的动作。
意思是:分组到达某个路由器后,路由器根据转发表,把分组从输入端口送到合适的输出端口。
类比一下:走到一个路口,决定从哪个出口出去。
所以转发是局部的、单跳的。
2. 路由 routing
路由是全局路径选择。
意思是:使用路由算法,决定分组从源主机到目的主机应该走哪条完整路径。
类比一下:从西安去北京,提前规划整条路线。
所以路由是全局的、多跳的。
路由决定表怎么来,转发根据表怎么走。
转发的作用范围单个路由器内部,作用是查表,决定输出端口。
路由的作用范围是整个网络,作用是计算端到端路径。
二、网络平面和数据平面
网络层可以分成两个平面。
1. 数据平面
数据平面负责:分组来了以后,怎么快速转发出去。
它是每台路由器本地的功能。
具体做的事包括:
查转发表
决定输出端口
通过交换结构转发
在输入/输出端口排队
最后发送出去
数据平面要求非常快,因为每个分组都要处理。
2. 控制平面
控制平面负责:计算路由,生成转发表。
它决定的是整个网络范围内:
数据报应该走哪条路径
转发表内容应该怎么更新
3. 传统控制平面和 SDN
传统方式:每个路由器自己运行路由算法。
每台路由器都有:
数据平面
控制平面
路由器之间互相交换路由信息,然后各自计算转发表。
SDN 方式
SDN 是 Software-Defined Networking,软件定义网络。
它的思想是:把控制平面从路由器中拿出来,放到远程控制器里。
路由器主要负责转发。
远程控制器负责:
统一收集网络状态
统一计算转发表
把转发表安装到交换设备中
所以 SDN 的特点是:控制集中化,转发设备简单化。
某些分组交换机称为链路层交换机(link-layer switches)(在第5章仔细学习),基于链路层字段中的值做转发决定。其他分组交换机称为路由器(router),基于网络层字段中的值做转发决定
三、网络层服务模型
网络层可以理论上提供很多服务,比如:
1. 对单个数据报的服务
比如:
保证交付
保证在 40 ms 内交付
这是针对单个分组的服务。
在发送主机中,当运输层向网络层传递一个分组时,能由网络层提供的特定服务包括:
–确保交付。该服务确保分组将最终到达其目的地。
–具有时延上界的确保交付。该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内(例如在100ms内)交付。
2. 对数据报流的服务
比如:
保证数据报按顺序到达
保证最小带宽
限制抖动 jitter
这是针对一串数据报的服务。

3. Internet 的实际服务模型
Internet 的 IP 层采用的是:
best effort,尽力而为服务。
也就是:我尽力帮你送,但不保证一定送到。
它不保证:
不保证交付
不保证顺序
不保证延迟
不保证带宽
所以 IP 层本身是不可靠的。
可靠性通常交给 TCP 或应用层来做。

4. 为什么尽力而为也能成功?
因为它简单。
简单带来几个好处:
容易部署到各种异构网络上 比如以太网、WiFi、蜂窝网络等。
网络带宽足够时,很多应用体验仍然很好 比如视频、语音、网页浏览。
应用层和运输层可以补救 比如 TCP 重传、应用层缓存、CDN。
TCP 拥塞控制可以避免网络被压垮 网络轻载时加速,网络拥塞时减速。
所以 IP 层虽然“只尽力而为”,但是反而非常灵活,适合大规模互联网。
四、路由器的基本结构
路由器内部主要有四部分:
输入端口 input ports
交换结构 switching fabric
输出端口 output ports
路由处理器 routing processor

1. 输入端口
输入端口做三层事情。

物理层:负责接收比特流。
也就是:线上的 0 和 1 进来。
链路层
负责处理链路层帧。
比如以太网帧的接收、校验等。
网络层
负责:
查表
转发
排队
也就是根据 IP 数据报首部中的目的地址,决定该分组应该去哪个输出端口。
2. 交换结构
交换结构负责:

把分组从输入端口搬到输出端口。
它是路由器内部的高速通道。
3. 输出端口
输出端口负责:
缓存分组
调度发送顺序
链路层封装
物理层发送比特
如果多个输入端口同时把分组送到同一个输出端口,就会在输出端口排队。
4. 路由处理器
路由处理器负责控制平面。
比如:
运行路由协议
维护路由表
更新转发表
注意:每个分组的高速转发一般不靠路由处理器慢慢处理,而是在硬件中完成。
五、基于目的地址的转发
传统 IP 转发主要依据:目的 IP 地址。
路由器收到一个数据报后:
取出目的 IP 地址
在转发表中查找匹配项
找到对应输出接口
把分组送到该输出端口
最朴素的表可以写成:
地址范围 | 输出接口 某一段地址 | 接口 0 某一段地址 | 接口 1 某一段地址 | 接口 2 otherwise | 默认接口
七、子网号和子网掩码
IP 地址不能一条一条存到转发表里,因为地址太多。
所以路由器一般存的是:
一段地址范围。
这段地址范围可以用:
子网号 + 子网掩码
表示。
1. 子网号
子网号表示这一段地址共同的前缀。
比如:
2. 子网掩码
子网掩码表示哪些位必须匹配。
例如:
其中:
1 表示这一位要匹配
0 表示这一位可以不同
3. 判断是否匹配
判断一个目的 IP 是否属于某个子网,用:
如果成立,就说明匹配该表项。
八、最长前缀匹配
1. 为什么需要最长前缀匹配?
一个目的 IP 地址可能同时匹配多个转发表项。
比如:
它属于一个大网段
同时也属于这个大网段里的一个小子网
这时候应该选择更具体的那一项。
更具体意味着:前缀更长,匹配位数更多。

2. 定义
最长前缀匹配:
给定一个目的 IP 地址,在所有匹配的转发表项中,选择前缀最长的那一项。
3. 例子理解
假设转发表有:
前缀 | 接口 11001000 00010111 00010*** ******** | 0 11001000 00010111 00011000 ******** | 1 11001000 00010111 00011*** ******** | 2 otherwise | 3
如果目的地址是:
它既匹配:
也匹配:
但是:
更长、更具体,所以选接口 1。
4.补充:虚电路和数据报电路

在至今为止的所有主要的计算机网络体系结构中(因特网、ATM、帧中继等),网络层或者提供了主机到主机的无连接服务,或者提供了主机到主机的连接服务,而不同时提供这两种服务。
仅在网络层提供连接服务的计算机网络称为虚电路(Virtual-Circuit,VC)网络;仅在网络层提供无连接服务的计算机网络称为数据报网络(datagram network)。


