网络层
网络层
网络层提供在发送主机和接收主机对之间传送数据报/段(segment)的服务
网络层能够被分解为两个相互作用的部分,即数据平面和控制平面,与之相关的功能包括转发和路由选择
转发指将分组从路由器的一个输入链路接口转发到合适的输出链路接口的路由器本地动作,转发是在数据平面中实现的唯一功能,也是本地的、每个路由器都具有的功能
路由选择指使用路由算法确定分组从源到目的地所采取的端到端路径的网络范围处理过程,路由选择在网络层的控制平面中实现
路由:按照某种指标(传输延迟,所经过的站点数目等)找到一条从源节点到目标节点的较好路径
网络层功能的实现有传统和软件定义网络(Software-Defined Networking, SDN)两种
传统方法中路由选择的实现为在每台路由器内运行路由选择算法,与在其他路由器中的路由选择算法通信(根据路由选择协议交换包含路由选择信息的路由选择报文),以计算出转发表的值
SDN方法中路由选择的实现为远程控制器计算和分发转发表以供每台路由器所使用
网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性
网络层相关服务:确保交付、具有时延上界的确保交付、有序分组交付、确保最小带宽、安全性
互联网的网络层仅提供尽力而为服务,但网络层的基本尽力而为服务模型与适当带宽供给相结合已被证明“足够好”,能够用于大量的应用
路由控制
IP 依据网络地址进行路由控制
路由器
网络层的主要功能依托于路由器实现
- 路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址
- 交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址
路由器包含四个组件:输入端口、交换结构、输出端口、路由选择处理器
其中输入端口、输出端口和交换结构(执行数据平面转发功能)几乎总是用硬件实现,因此得以实现远快于软件处理的速度,以纳秒时间尺度运行
控制平面路由选择功能用软件实现并在路由选择处理器上执行,通常以毫秒或秒时间尺度运行,
输入端口在物理层实现bit级的接收,在数据链路层实现链路层协议动作、解封装,然后根据转发表决定路由器的输出端口,进入输入缓存排队等待交换机构转发
交换结构通常使用的交换技术有三种
- 经内存交换 - 分组被复制到内存后再次复制到输出端口缓存
- 早期路由选择处理器直接控制完成
- 现代通过输入线路卡处理
- 经总线交换 - 分组通过一根共享总线从输入端口转发到输出端口,一次处理一个分组
- 经互联网络交换 - 同时并发转发多个分组,克服总线带宽限制
输出端口缓存从交换机构到来的数据报,由调度规则选择排队的数据报进行传输
调度规则:
- First In First Out(FIFO) - 先来先发
- 优先权 - 发送高优先权的分组
- Round Robin (RR) - 按类循环发送,每次每类单个
- Weighted Fair Queuing (WFQ) - 每个类在每一个循环中获得不同权重的服务量
路由选择处理器执行控制平面功能
在传统路由器中,它执行路由选择协议,维护路由选择表与关联链路状态信息,并为该路由器计算转发表
在 SDN 路由器中,路由选择处理器(在其他活动中)负责与远程控制器通信,接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项
路由转发表的表项包含目标子网号,子网掩码,下一跳地址以及接口四个元素
将目标 IP 依次与转发表中的表项匹配,如果目标 ip 地址&子网掩码 = 目标子网号,则按照对应接口转发数据报,若都不匹配则使用默认表项转发数据报
当给定目标地址查找转发表时,采用最长前缀匹配的目标地址表项(选择表中网络地址相同位数最多的表项)
路由选择算法
路由选择算法(routing algorithm)是网络层软件的一部分,完成路由(确定分组从源到目标的路径)功能
路由选择算法实际以网络而非主机为单位进行路由,子网中路由器-主机之间的通信不需要路由选择算法解决
路由选择算法需具有正确性,简单性,健壮性,稳定性,公平性以及最优性
路由选择算法的分类方式一:
集中式路由选择算法用完整的、全局性的网络知识计算,从源到目的地之间的最低开销路径,
分散式路由选择算法中路由器以迭代、分布式的方式计算出最低开销路径
分类方式二:
静态路由选择/非自适应算法,路由随时间的变化非常缓慢,通常是人为进行调整(如人为手工编辑一条链路开销)
动态路由选择/自适应算法随着网络流量负载或拓扑发生变化而改变路由选择路径。
链路状态路由选择 LS
具有全局状态信息的算法常被称作链路状态(Link State, LS)算法
- 发现相邻节点,获知对方网络地址
- 测量到相邻节点的代价(延迟,开销)
- 组装一个LS分组,描述它到相邻节点的代价情况
- 将分组通过泛洪发到所有其它路由器
以上4步让每个路由器获得拓扑和边代价 - 通过Dijkstra算法找出最短路径(真正的路由算法)
泛洪过程中使用顺序号字段控制无穷的扩散,每个路由器都记录收到LS分组中的(源路由器X,顺序号),收到包含(源路由器X,现有/更早顺序号)的LS分组则丢弃,同时使用年龄字段定期删除路由器中保存的LS信息
此外LS算法的运行可能引起网络中传输的振荡,一种解决方法为让每台路由器发送LS分组的时间随机化
应用LS算法的协议包括OSPF协议和IS-IS协议
距离矢量路由选择 DV
距离向量DV算法是分散式路由选择算法的一种,使用Bellman-Ford 方程进行动态规划
对于节点A:
- 根据实测得到本节点A到相邻站点的代价
- 根据各相邻站点声称它们到目标站点B的代价计算出本站点A经过各相邻站点到目标站点B的代价
- 找到一个最小的代价和相应的下一个节点Z,经过此节点Z到达节点B,并且代价为A-Z-B的代价
- 定期测量A到相邻节点的代价,到任何目标的DV发生变化时通告邻居
- 收到邻居的DV更新时重新计算代价估计值,到任何目标的DV发生变化时通告邻居
DV存在无穷计算问题
例:x-y-z
节点x突然不可达时会导致路由选择环路(routing loop)
即为到达x, y通过z路由,z又通过y路由,需经过多次反复更新得y-x之间的代价为无穷
一种解决方法:水平分裂/毒性逆转
z知道要经过y才能到达x,所以z向y报告z-x=Inf,向其他邻居广播z-x的真实代价
在存在环路时无穷计算问题依然存在

DV消息复杂度低,LS收敛时间短且健壮性强,在互联网中二者都有应用
路由自治系统 AS
在所有路由器之间计算路由开销巨大,且ISP通常希望自行管理路由器,因此实际情况中采取层次路由,路由器被组织为自治系统(Autonomous System, AS)
每个AS由一组通常处在相同管理控制下的路由器组成,通常ISP将其中的路由器以及互联它们的链路构成一个或多个AS
一个AS由ICANN区域注册机构所分配的全局唯一的AS号(ASN) 所标识
在一个AS内运行的路由选择算法叫作自治系统内部路由选择协议,包括RIP和OSPF
互联网中所有AS运行相同的AS间路由协议 - 边界网关协议(Broder Gateway Protocol, BGP)
自治系统内部路由选择协议
RIP(Routing Information Protocol)
基于DV算法
- 距离矢量:每条链路cost=1,# of hops (max = 15 hops) 跳数
- 节点每隔30秒和邻居交换DV
- 每个通告包括AS内部的最多25个目标子网
- 180秒没有收到通告信息表示邻居或者链路失效
OSPF(Open Shortest Path First)
基于LS算法
LS分组在AS内部网络中分发,通告信息中携带到达每个邻居的代价
在IP数据报上直接传送OSPF报文
高级特性:
- 所有的OSPF报文都经过认证以保证安全
- 允许有多个代价相同的路径存在
- 每一个链路对于不同的服务有多重代价矩阵,支持按照不同的代价计算最优路径
- 对单播和多播的集成支持
- 在大型网络中支持层次性OSPF,分为本地和骨干区域

自治区域间路由协议 BGP
在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息,AS使用网关路由器(位于AS边缘的路由器)与其他AS相连接
BGP基于距离矢量算法运行,但在每个节点维护到达各个目标网络的详细路径以解决无穷计算问题
BGP功能:
- 相邻的AS通过外部BGP(eBGP)获得其他AS中子网的可达信息
- 相同AS中的路由器间通过内部BGP(iBGP)传递网关路由器获得的子网可达信息
- 根据子网可达信息和策略来决定到达子网的“好”路径
当路由器通过BGP连接通告子网前缀时,通告包括BGP属性(BGP术语中子网前缀及其属性称为路由),两个重要的BGP属性为AS-PATH和NEXT-HOP
- AS-PATH:前缀通告所经过的AS列表
- NEXT-HOP:从当前AS到下一跳AS的多个链路中所选择的下一个网关路由器的输入接口的IP地址
当一个网关路由器接收到了一个路由通告, 其使用输入策略来接受或过滤该通告,同时也决定是否向其它邻居通告收到的这个路由信息
获得关于同一个子网X的多个路径时,其通过路由选择算法选择路径并通过iBGP通告给所有AS内部的路由器
路由器结合 eBGP决定的AS到X的路径 以及 iBGP(例如OSPF)决定的相应网关路由器与输出接口 得到目标子网与自身输出接口的对应转发表项
热土豆路由选择是路由选择算法之一,该算法下路由器选择使得通往NEXT-HOP的路径的开销最小(具备最小内部区域代价)的网关路由器作为往X的出口
SDN 与通用转发
传统方式下控制平面由每个路由器上的实现路由算法的元件分布式实现(它们之间需要相互交互)
缺点为设备的功能固化,类似防火墙、NAT、负载均衡等功能都得使用特定设备实现,升级和管理困难
软件定义网络(software-defined networking,SDN)
- 将网络设备数据平面和控制平面分离
- 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻辑)进行协议数据单元PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 将设备统一为SDN交换机(分组交换机),执行控制逻辑
流表为位于每台分组交换机中的一张匹配加动作表,该表由SDN控制器自动计算、安装和更新
分组交换机按照流表对接收的数据包根据匹配进行动作
SDN控制器通过北向API和网络控制应用交互,基于南向API访问分组交换机,与本地控制代理CA交互,将计算得出的流表安装至分组交换机
网络控制应用采用下层提供的服务(SDN控制器提供的API)实现网络功能
OpenFlow协议是控制器和分组交换机交互的协议,其将数据平面抽象为由头部字段所定义的流以及包含简单的分组处理规则的通用转发
通用转发包括将分组头部字段和流表进行匹配的模式,对于匹配的分组采取的丢弃、转发、修改等行动,匹配多个模式时的优先权以及计数器
部分OpenFlow中关键的控制器到交换机的报文
- 特性:控制器查询交换机特性,交换机应答
- 配置:交换机查询/设置交换机的配置参数
- 修改状态:增加删除修改OpenFlow表中的流表
- packet-out:控制器可以将分组通过特定的端口发出
- 分组进入: 将分组(和它的控制)传给控制器
- 流移除: 在交换机上删除流表项
- 端口状态: 通告控制器端口的变化