第四章 网络层
学习目的:
- 理解网络层服务的主要原理
- 网络岑服务模型
- 转发(forwarding)和路由(routing)的概念对比
- 路由器的工作原理
- 路由算法及路由协议
- 完成简单的组网及IP地址和路由配置
4.1 引言
网络层提供的功能
- 从发送方主机传输报文段到接收方主机
- 发送方主机封装报文段(segments)为**数据报(datagrams) **
- 接收方主机递交报文段给传输层
- 在每个主机、路由器都需要运行网络层协议
- 路由器会检查通过它的所有IP的数据报的头部字段,然后根据目标IP地址对数据报进行转发
两个主要的网络层功能
- 转发(forwarding): 将分组从路由器的输入端口转移到正确的路由器输出端口(的路由器本地动作)
- 路由(routing): 确定分组从发送方传输到接收方(目的主机)所经过的路径(或路由)
路由与转发的相互作用
网络层:数据平面和控制平面
数据平面
- 本地的,每个路由器自身的功能
- 决定抵达路由器输入端口的数据包如何转发到输出端口
控制平面
- 整个网络范围
- 决定数据报在端到端路径上的路由器之间如何路由
- 两种数据平面的实现方式:
- 传统的路由算法: 在路由器内实现
- 软件定义网络(software-defined networking, SDN): 在远程服务器上实现
- 控制平面:传统方式
- 每个路由器都有单独的路由算法组件,路由器之间通过交互来实现控制平面
-
- 控制平面:SDN方法
- 一个分离的(通常是远程的)控制器和路由器本地的控制代理 (local control agents,CAs) 交互
- CA一般拥有最少的功能,其任务是与控制器通信并且按控制器命令行事。
- CA既不能直接交互,也不能主动参与计算转发表
-
连接建立*
- 传输层连接: 如TCP协议,在数据实际传输之前,需要发送方和接收方经过三次握手建立所需的状态信息。两个进程之间建立连接
- 网络层连接: 指网络层数据分组开始传输前,在所选择的从源到目的地路径上的各路由器之间相互握手,建立连接状态。
如ATM、帧中继、MPLS的网络层。(已经很少使用)
如今的因特网网络层不执行连接建立。
网络层的服务模型-定义了分组在发送与接收端之间的端到端的 运输特性
问题: 什么样的服务模型可以用于将数据报从发送方传输到接收方?
网络层可能提供的服务
- 确保交付:确保分组到达目的地。
- 具有时延上界的确保交付:主机到主机的时延。
- 有序分组交付:按发送顺序到达。
- 确保最小带宽:当发送主机以低于特定比特率的速率发送比特,分组不会丢失,在一定时延到达。
- 确保最大时延抖动:发送方发送两个连续分组的时间间隔与接收到的间隔相同。
因特网的网络层提供的服务
- 单一服务,即尽力而为服务(best-effort service) 。
- 分组间的定时不能被保证;
- 分组的接收顺序与发送顺序不一定相同;
- 传送的分组不能保证最终交付,即网络可能未向目的地交付分组。
4.2 虚电路和数据报网络
连接和无连接服务
- 数据报 网络提供网络层的无连接 服务
- 虚电路 网络提供网络层的 连接 服务
- 类比于TCP/UDP的面向连接/ 无连接的传输层服务:
- 任何网络中的网络层只提供两种服务之一,不会同时提供。
- 虚电路网络:提供连接服务。
- 数据报网络:提供无连接服务。
- 传输层:面向连接服务在网络边缘的端系统中实现。
- 网络层:面向连接服务在端系统及网络核心的路由器中实现。
虚电路(Virtual Circuits)*
“源主机-目的主机路径的行为类似于电话网络的行为”
数据报网络
- 在网络层无呼叫的过程
- 路由器: 不需要维护端到端连接的状态
- 没有网络等级的“连接”的概念
- 使用目的主机的地址进行分组转发
数据报转发表
路由器查表方法
- 用目的地址前缀与转发表的前缀匹配:
- 存在匹配:向对应链路转发。
如,目的地址
11001000 00010111 00010110 10100001
- 不存在匹配:选择“其他”项对应的链路转发。
- 存在多个匹配:使用最长前缀匹配规则,即向与最长前缀匹配的链路接口转发分组。
如,目的地址
11001000 00010111 00011000 10101010
说明
- 路由器转发表只维持转发状态信息;
- 转发表由选路算法修改(1~5分钟更新);虚电路网络转发表随虚电路的建立和拆除更新。
- 一个端系统发送给另一个端系统的一批分组可能在网络中选择不同的路径,到达的顺序可能不一致。
虚电路网络的特点*
虚电路网络源于电话产业界(采用“真正”电路)。
- 呼叫建立及每次呼叫的状态要在网络中的路由器上维持,比面向数据报的网络要复杂。
- 网络功能复杂,端系统设备简单
数据报网络的特点
由互连计算机的需求发展而来。与电话网相反。
- 网络层服务模型简单。
- 端系统功能复杂:高层实现许多功能,如按序传送、可靠数据传输、拥塞控制与DNS名字解析等;
- 带来的结果
- 因特网服务模型提供的服务保证最少(可能没有!),对网络层的需求最小,使得互连使用各种不同链路层技术的网络变得更加容易。
- 许多应用都在位于网络边缘的主机(服务器)上实现。
4.3 路由器的工作原理
路由器的整体结构
- 路由器的两个核心功能:
- 运行路由算法/协议(OSPF, RIP, BGP)
- 将分组从路由器的输入链路传送到正确的输出链路。
- 路由器的体系结构:
输入端口功能
- 第一个线路端接模块:将一条物理链路端接到路由器的物理层;
- 第二个数据链路处理模块:实现路由器的数据链路层功能;
- 第三个查找与转发模块:实现查找与转发功能,以便分组通过路由器交换结构转发到适当的输出端口;
输入端口——查找/转发模块
确定将一个到达的分组通过交换结构转发给哪个输出端口。 通过查找转发表实现,这里的转发表是存储在输入端口的内存中。
- 分布式交换:
- 选路处理器计算转发表,给每个输入端口存放一份转发表拷贝。
- 在每个输入端口本地做出交换决策,无须激活中央选路处理器。
- 可避免在路由器中某个单点产生转发处理瓶颈。
- 目的:以线速完成输入端口的处理
- 排队:如果数据报到达输入端口的速度快于输入端口将数据报转发到交换结构的速度,就会发生排队
交换结构
- 将分组从输入端口缓存交换(转发)到恰当的输出端口缓存中
- 三种类型的交换结构
经内存的交换结构
- 早期用计算机作为路由器时采用的结构(第一代)
- 输入端口与输出端口之间的交换由CPU(选路处理器)控制完成;
- 输入端口与输出端口类似I/O设备:
- 当分组到达输入端口时,通过中断向选路处理器发出信号,将分组拷贝到处理器内存中;
- 选路处理器根据分组中的目的地址查表找出适当的输出端口,将该分组拷贝到输出端口的缓存中。
转发速度
交换速度受总线带宽的速度限制 (每个分组穿过两次总线)
若总线带宽为每秒写入或读出B个分组,则总的转发吞吐量 (分组从输入端口被传送到输出端口的总速率)小于B/2。
不能同时转发两个分组,即使它们有不同的目的端口,因为经过共享系统总线一次仅能执行一个内存读写
经总线的交换结构
输入端口通过一条共享总线将分组直接传送到输出端口,不需要选路处理器的干预。
- 每次只能有一个分组通过总线传送。
- 分组到达一个输入端口时,若总线正忙,会被暂时阻塞,在输入端口排队
- 路由器交换带宽受总线速率限制。
经交换矩阵交换结构
- 纵横式交换机:由2n 条总线组成,n 个输入端口与n 个输出端口连接。
- 到达输入端口的分组沿水平总线穿行,直至与所希望的输出端口的垂直总线交叉点:
- 若该条垂直总线空闲,则分组被传送到输出端口;
- 否则,该到达的分组被阻塞,必须在输入端口排队。
-
输出端口
- 取出存放在输出端口内存中的分组,并将其传输到输出链路上。
- 当交换结构将分组交付给输出端口的速率超过输出链路速率,就需要排队与缓存管理功能。当输出端口的缓冲区溢出时,就会出现延时和丢包。
输出端口排队
- 当经过交换结构到达的速度超过了输出端口的处理线速就会发生排队
- 当输出端口的缓冲区溢出时就会发生丢包!
- 当交换结构的速度慢于输入端口的速度,就会在输入端口的缓冲区发生排队
会导致排队延时和由于输入缓冲区溢出导致的丢包!
- 线头阻塞(Head-of-the-Line (HOL) blocking): 在队列前面的被阻塞的数据报会阻止队列中的其他数据报被转发。
4.4 网际协议:因特网中的转发和编址
因特网中的网络层协议
IP 数据报格式(IPv4)
数据报长度:是IP数据报的总长度,以字节计。长度为16比特,故数据报理论最大长度为65535字节。
高层协议:**通常仅当IP数据报到达最终目的地的时候才有用。**指示了IP数据报的数据部分应该交给哪个特定的运输层协议。
协议号是网络层与运输层的粘合剂,而端口号是运输层和应用层的粘合剂
首部校验和:用于帮助路由器检测收到的IP数据报中的比特错误
- 为什么TCP/IP在运输层和网络层都执行差错检验?
- IP只对IP首部进行了差错检验,而TCP/UDP是对整个TCp/UDP报文段进行的
- 其次,TCP/UDP和IP不一定都属于同一个协议栈。原则上,TCP能够运行在一个不同的协议(如ATM)上,而IP能够携带不一定要传递给TCP/UDP的数据
数据(有效载荷): IP数据报中的数据字段包含要交付给目的地的运输层报文段,当然也可承载其他类型数据,如ICMP报文段
注意到一个IP数据报有20字节的首部(假设无选项)。如果一个数据报承载着TCP报文段,则每个数据报共承载了40字节 的首部以及应用层报文
IP数据报分片和重组
- 每个数据链路有自己的MTU,链路类型不同,MTU的值也不同,这里MTU指的是数据链路帧的数据区的最大字节数
- 在因特网中,一个大的分组可能在路由器中被分割为几个分片,在最终的目的主机上,将这些分片重新组装成一个大的分组
- 为了进一步识别出这些分组,需要对分片进行标识
分片的例子
偏移量要除以8,片偏移以八个字节为单位
IP地址
- IP 地址: 分配给主机或路由器接口的标识符
- 接口: 主机/路由器与物理链路之间的边界
- 路由器有多个接口
- 主机可以有多个接口
- 每个接口有一个IP地址
- IP地址有两种:IPV4和IPV6
- IPV4:32个二进制位长(4字节),常用点分十进制表示;
- IPV6:128个二进制位长(16字节)常用冒号分隔表示
IPv4编址
- 32比特的二进制表示和点分十进制表示法
- 将4个字节中的每一个字节分别用十进制数来表示,4个十进制数之间用 “.” 分隔。
如
根据不同的取值范围,早期将IP地址分为五类。IP地址中前5位用于标识IP地址的类别,A类地址的第一位为“0”,B类地址的前两位为“10”,C类地址的前三位为“110”,D类地址的前四位为“1110”,E类地址的前五位为“11110”。其中,A类、B类与C类地址为基本的IP地址。
IP地址结构
包括两部分:
- 网络号:指明主机所在网络的编号。
- 主机号:主机在网络中的编号。
传统的IP地址分类
A类地址
- 利用IP地址的第一个字节作为网络地址,最高位为0,其余的三个字节作为主机地址。
地址范围为 1. 0. 0. 1-127.255.255.254
注:全0表示本地地址,全1表示在本地网络中向所有机广播。
B类地址
- 利用IP地址的前两个字节作为网络地址,最高位为10,其余的两个字节作为主机地址
地址范围为 128.0.0.1-191.255.255.254
C类地址
- 利用IP地址的前三个字节作为网络地址,最高位为110,最后一个字节作为主机地址
地址范围为 192.0.0.1-223.255.255.254
特殊IP地址段
-
本地回环地址
127.0.0.1-127.255.255.254
这是预留的一组IP地址,主要是用来识别主机本身的地址。也叫做“localhost”,一般用来测试。
-
私有地址(Private address)
10.x.x.x, 172.16.x.x-172.31.x.x, 192.168.x.x
这三个地址段被称为私有IP地址段,也就是局域网所使用的地址段,在公网上不能被路由
-
0.0.0.0
这个地址严格上来说都不是真正意义上的IP地址。主要是用来标识不清楚的网络和主机的。系统遇到无法识别的网络或主机的时候会统一的归纳到这个地址
-
255.255.255.255
这个地址是受限的广播地址。主要指一个网段内的所有主机
互联网中的IP地址
- 同一局域网上的主机或路由器的IP地址中的网络号必须相同
- 交换机互连的网络仍然是一个局域网,只能有一个网络号。
- 路由器总是具有两个或两个以上IP地址。
- 当两个路由器直接相连时,在连线两端的接口处,可以指明IP地址也可以不指明IP地址。
划分子网
- IP 地址:
- 网络号 (高位 bits)
- 主机号 (低位 bits)
- 网络号相同的IP地址属于同一个网络。而网络还可以划分为若干子网(subnet)。
- 划分子网的方法是从主机号借用若干个比特作为子网号,剩下的主机位为主机号。
子网的特点
- 什么是一个子网 ?
(从IP地址的观点来看)
- 设备接口的IP地址具有同样的网络部分
- 没有路由器的介入,物理上能够相互到达
为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫子网
子网掩码
- **子网号字段长度是可变的,**因此,为了确定子网地址,IP协议提供了子网掩码的概念 。
- 子网掩码用来确定网络地址(包括网络号和子网号)和主机地址的长度。子网掩码长为32位比特,其中的1对应于IP地址中的网络号和子网号,而子网掩码中的0对应于主机号。
-
子网划分技术
例:现有一个网段202.114.1.1-202.114.1.254,
(1)请写出怎样将这个网段划分为2个、6个、14个子网;
(2)假设这些IP用于某公司。现公司任一部门,最多有30台机器,问应该怎样划分子网?如果有49台机器又将怎样划分?
对(1)、(2),请写出子网所需要的位数、子网掩码和子网号。
解答要点:
(1) .2个借1位,6个接3位,14个借4位;
(2).30小于32,故每个子网的主机号只需5位,因为25=32;同理49台机器的话,就需要6位,因为26=64。
注意:对某个子网来说,主机号全0的地址不能用,它被用做表示该子网的子网号;主机号全1的也不能用,它用于本子网的广播。因此每个子网所能容纳的主机数是2^N-2,N是主机号位数。
使用子网掩码的分组转发
不划分子网时,路由表只有两项:目的网络地址和下一跳地址,例如
使用子网划分后,路由表中将包括三项:目的网络地址、子网掩码和下一跳地址,例如:
传统IP分类方法的问题
- 一个A类的IP地址,可以有24bit用于分配主机地址,因此可以支持 224个主机,但是一个家庭或者组织往往不需要这么多的地址空间,造成浪费。
- 一个C类的IP地址,只有8bit用于分配主机地址,因此只能支持256个主机,又不太够用。
- 因此,按传统IP地址分类方式分配IP被CIDR技术取代
无分类域间路由(Classless Inter-Domain Routing,CIDR)
- CIDR消除了传统的A类、B类和C类地址的概念。
- 使用斜线记法,又称为CIDR记法来区分网络前缀和主机号,
- 即在IP地址后面加一个斜线“/”,斜线后面用一个数字指定网络前缀的长度。
- CIDR将网络前缀都相同的连续的IP地址组成“CIDR地址块”。
构造超网(superneting)
一个CIDR地址块可以表示分类IP的多个分类地址,这种地址的聚合称为路由聚合,又称为构造超网。
使用单个网络前缀通知多个网络的能力
CIDR 地址块划分举例 -层次寻址: 路由聚合
子网划分及CIDR练习
现有一公司已获得网络号为202.1.1.0/24,如果该公司有3个部门,
(1)如果第1个部门有60台计算机,第二个部门有20台计算机,第三个部门有16台计算机,问如何分配地址?
(2)如果第1个部门有120台计算机,第2个部门有60台计算机,第3个部门有60台计算机,使用上述方法可以分配地址吗?使用CIDR方法如何分配地址?
11001010 00000001 00000001 00000000
分配部门1:11001010 00000001 00000001 00000000 > 202.1.1.0/26
分配部门2:11001010 00000001 00000001 01000000 > 202.1.1.64/27
分配部门3: 11001010 00000001 00000001 01100000 > 202.1.1.96/28
(2) 不能。部门地址数目不够。
11001010 00000001 00000001 00000000 > 202.1.1.0/25
11001010 00000001 00000001 10000000 > 202.1.1.128/26
11001010 00000001 00000001 11000000 > 202.1.1.192/26
动态主机配置协议
问: 主机如何得到IP地址?
DHCP协议的工作流程
- DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文。
- DHCP 客户从 UDP 端口 68,发送
DHCP 发现报文
。
- 凡收到 DHCP 发现报文的 DHCP 服务器,都发出
DHCP 提供报文
,因此 DHCP 客户,可能收到多个 DHCP 提供报文。
- DHCP 客户从几个 DHCP 服务器中选择,其中的一个,并向所选择的 DHCP 服务器发送
DHCP 请求报文。
- 被选择的 DHCP 服务器发送确认报文
DHCPACK
,客户进入已绑定状态,并可开始使用得到的临时 IP 地址了
- DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的
超时时间
分别是 0.5T 和 0.875T。当超时时间到就要请求更新租用期
。
- 租用期过了一半(T1 时间到),DHCP 发送请求报文
DHCPREQUEST
要求更新租用期。
- DHCP 服务器若不同意,则发回否认报文
DHCPNACK
。这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址
(回到步骤2)
- DHCP 服务器若同意,则发回确认报文DHCPACK。DHCP 客户得到了新的租用期,重新设置计时器。
- 若DHCP服务器不响应步骤6的请求报文DHCPREQUEST,则在租用期过了 87.5% 时,DHCP 客户必须
重新发送请求报文 DHCPREQUEST
(重复步骤6),然后又继续后面的步骤。
- DHCP 客户可
随时提前终止服务器所提供的租用期
,这时只需向 DHCP 服务器发送释放报文DHCPRELEASE
即可。
DHCP报文格式*
OP:若是client送给server的封包,设为1,反向为2;
Htype:硬件类别,ethernet为1;
Hlen:硬件长度,ethernet为6;
Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
Ciaddr:用户IP地址;
Yiaddr:客户IP地址;
Siaddr:用于bootstrap过程中的IP地址;
Giaddr:转发代理(网关)IP地址;
Chaddr:client的硬件地址;
Sname:可选server的名称,以0x00结尾;
File:启动文件名;
Options:,厂商标识,可选的参数字段
DHCP 客户端-服务器场景
首先是客户端广播,DHCP服务器收到后会返回DHCP提供,此时会有多个请求。客户端选择一个发出DHCP请求,请求分配IP地址,然后DHCP服务器返回DHCPACK。
DHCP: 不仅获得IP地址
- DHCP分配的不仅仅是IP地址,还可分配:
- 客户的第一跳路由器的地址(网关)
- DNS服务器的IP地址或域名
- 子网掩码
- DHCP是应用层协议
组织机构如何获取IP 地址?
Q: 怎样获取IP地址中的网络号部分?
A: 从ISP的地址空间中划分一块给申请者
例如:
- ISP获得地址块的方法——从ICANN获取
ICANN(Internet Corporation for Assigned Names and Numbers) http://www.icann.org/
NAT: 网络地址转换
- 动机: 对外部网络来讲,本地网络只用一个IP地址
- 不需要从 ISP分配一系列地址—— 只要一个IP地址用于所有设备
- 在本地网络,改变设备的IP地址不用通知外部世界
- 可以变更 ISP ,不用改变本地网络的设备的地址
- 本地网络内部设备不能被外部世界明确寻址,或是不可见 (增加了安全性)
- 执行NAT,路由器必须做到:
- 外出的分组: 替换每个外出的分组的 (源IP 地址, 端口号) 为 (NAT IP 地址, 新端口号)
- 远程客户/服务器用**(NAT IP地址, 新端口号)作为目的地**来响应。
- (在NAT转换表中)记录每个(源IP 地址, 端口号)到 (NAT IP地址, 新端口号) 转换配对
- 进来的分组: 对每个进来的分组,用保存在NAT表中的对应的**(源IP 地址, 端口号)** 替换分组中的目的域 (NAT IP 地址, 新端口号)
网络转换的一些限制
- 16-bit 端口号:
- 一个局域网地址可以同时支持60,000个并发连接!
- NAT 存在争议
- 路由器只应该处理到第三层
- 违反了端到端主张
- 应用程序设计者在设计时不得不将NAT加以考虑
- 如P2P应用程序
- 应使用IPv6来解决地址短缺问题
ICMP
(Internet Control Message Protocol,因特网控制报文协议)
- 用于主机路由器之间彼此交流网络层信息
- 差错报告: 不可到达的主机, 网络,端口,协议
- 请求/应答 (用于ping,traceroute)
- 位于IP之上
ICMP报文格式及其封装*
ICMP 报文类型及对应常见代码*
Traceroute 和 ICMP
- 源端发送一系列的UDP分组给目的端
- 第一个分组 TTL =1
- 第二个 TTL=2, 等等
- 当第n个分组到达第n个路由器时
- 路由器丢弃该分组
- 并给源端发送一个ICMP报文 (type 11, code 0)
- 这个报文包含了路由器的名称和IP地址
- 当源端收到ICMP报文时,计算传输往返时间RTT
- 对每个TTL作三次
- 停止发送的依据:
- UDP报文最终到达目的端
- 目的端返回回应应答的 ICMP 报文 (type 3, code 3)
- 源端停止发送
IPv6
- 初始动机:32-bit IPv4地址空间即将用尽
- 其他动机:
- 首部格式可帮助加速处理/转发
- 改变首部利于QoS要求(Quality of service)
- IPv6 数据报格式
IPv6首部*
- 优先级: 表示流中分组的优先级
- 流标识: 表示分组在同一个“流”中 (“流”的概念尚未完全定义)
- 下一个首部: 表示数据的上层协议
-
IPv6地址表示
- 冒号十六进制表示法
例如:104.220.136.100.255.255.255.255.0.0.18.128.140.10.255.255
用冒号十六进制表示为:
69DC:8864:FFFF:FFFF:0:1280:8C0A:FFFF
- 零压缩表示法
例如:FF0C:0:0:0:0:0:B1
零压缩表示为:
FF0C::B1
与IPv4的其它不同*
- 校验和: 全部去掉,减少每一跳的处理时间
- ipv6不允许在中间路由器上进行分片与重新组装。这种操作只能在源与目的地执行。
- 选项: 允许, 但是不是标准首部的一部分,而是用下一个首部域指出
- ICMPv6:新版本的 ICMP
从 IPv4 到 IPv6过渡*
- 并不是所有的路由器都能够同时升级
- 没有 “标志日”
- 同时有 IPv4 和 IPv6 路由器的网络如何工作?
- 两种推荐方法:
- 双栈:一些路由器具有双重栈 (v6, v4) 能够在两种格式中转换
- 隧道: 在穿过IPv4路由器时,IPv6分组作为 IPv4分组的负载
双栈方法*
隧道方法*
4.5 路由和选路
4.5.1选路算法
路由与转发的相互作用
- 路由算法确定了通过网络的端到端路径
- 转发表确定了在路由器上的本地转发
路由的基本概念
- 默认路由器:与主机直接相连的路由器,又叫第一跳路由器。每当主机发送一个分组时,都先传送给它的默认路由器。
- 源路由器:源主机的默认路由器。
- 目的路由器:目的主机的默认路由器。
- 从源主机到目的主机的选路归结为从源路由器到目的路由器的选路。
- 路由算法:是确定一个分组从源路由器到目的路由器所经路径的算法
找到一个子网到另一个子网的路径
- 路由算法的关键:在给定的一组路由器以及连接路由器的链路中,找到一条从源路由器到目的路由器的“好”路径。
网络的抽象图模型
- 用“节点图”表示网络的结构
- 图G = (N,E)表示N 个节点和E 条边的集合,每条边是来自N的一对节点。
- 节点:表示路由器(做出分组转发判决的点)。
如u,v,w,x,y,z。
- 边:连接节点的线段,表示路由器之间的物理链路。
如(u,v)、 (u,x) 、(u,w)、…
图抽象在其他的网络场景也受用,节点:peer,边:TCP连接
网络的抽象图模型:费用(cost)
- Cost可以表示对应链路的物理长度、或链路速度、或与链路相关的费用。
- 定义:c(x,y) 表示节点 x 和节点 y 之间边的费用(从节点 x 到节点 y 的链路费用)。
- 若节点x与节点y直接相连(x与y是邻居)
则c(x,y )= 链路费用
如c(u,v) = 2,节点u与节点v互为邻居
- 若节点x与节点y不直接相连(x与y不是邻居)
则c(x,y) = ∞
如c(u,y) = ∞,c(u,z) = ∞
- c(x,y)= c(y,x)
如c(u,v) = c(v,u) =2
最优化原则(optimality principle)
- 汇集树(sink tree)
- 此节点到所有其它节点的最优路径形成的树
- 路由选择算法就是为所有路由器找到并使用汇集树
路由选择算法原则
- 路由选择算法的原则
- 正确性(correctness):算法必须是正确的和完整的,使分组一站一站接力,正确发向目标站;完整:目标所有的站地址,在路由表中都能找到相应的表项;没有处理不了的目标站地址;
- 简单性(simplicity):算法在计算机上应简单:最优但复杂的算法,时间上延迟很大,不实用,不应为了获取路由信息增加很多的通信量;
- 健壮性(robustness):算法应能适应通信量和网络拓扑的变化:通信量变化,网络拓扑的变化算法能很快适应;不向很拥挤的链路发数据,不向断了的链路发送数据
- 稳定性(stability):产生的路由不应该摇摆
- 公平性(fairness):对每一个站点都公平
- 最优性(optimality):某一个指标的最优,时间上,费用上,等指标,或综合指标;实际上,获取最优的结果代价较高,可以是次优的
路由算法分类
链路状态选路算法Link state
将任何一个节点的链路状态分组泛洪
Dijkstra最低费用路径算法
- 所有节点知道网络拓扑,以及每条链路的费用信息
- 计算任意一个节点(源节点)到所有其他节点的最低费用路径
- 迭代:通过
k次
迭代后可以知道到达k个目的节点
的最低费用路径
- 基本思想:以源节点为起点,每次找出一个到源节点的费用最低的节点,直到把所有的目的节点都找到为止。
- 术语定义
c(x,y):表示从节点x到y的链路费用;
= ∞ 如果不是直接邻居
D(v):表示从源节点到目的节点v的当前路径的费用;
p(v):表示从源节点到目的节点v的路径上的前驱节点(例如w是v的前驱节点);
N’:表示已经找到最低费用路径的节点集合。
Dijkstra算法
算法描述
(1)初始化(1#~6#)
N’ ={源节点u};
- 对所有不在N‘ 中的节点v,标出其D(v)值:
- 节点v与源节点u直接相连,D(v) = c(u,v)
- 节点v与源节点u不直接相连 ,D(v) = ∞
(2)找出一个到源节点的费用最低的节点w,并以此更新其它点D(v) 值
- 从不在N’ 中的节点中找出一个D(w)值最小的节点w,并将w加入到N’ 中。(9#~#10)
- 对不在N‘ 中,但与节点w是邻居的节点v,用新的值更新
D(v)=min[D(v),D(w)+c(w,v)]
将节点v原值与节点v现经节点w到源节点的值比较,取小
(3)重复步骤(2)
直到所有的网络节点都在N’ 中为止。
- 对于每个节点,都得到从源节点沿着它的最低费用路径的前驱节点;
- 每个前驱节点,又可得到它的前驱节点;以此继续,可以得到到所有目的节点的完整路径。
如节点z的前驱节点依次为: z->y->x->u
- 得出从源节点u到节点z的最低费用路径为:uxyz,费用为4。
- 构建最低费用路径树
- 根据目的节点找出顺序和其费用以及前驱节点,可以画出源节点u到所有目的节点的最低费用路径树。
- 根据得到的所有目的节点的完整路径,或最低费用路径树,可以生成源节点的转发表。
转发表:存放从源节点到每个目的节点的最低费用路径上的下一跳节点。即指出对于发往某个目的节点的分组,从该节点发出后的下一个节点。
构建转发表
默认路由 *
:表示所有具有相同“下一跳”的表项。即将“下一跳”相同的项合并为一项,目的节点用“*”表示。优先级最低,转发分组时,当找不到对应表项时,才使用默认路由。
Dijkstra算法:讨论
计算复杂度
- 设n个节点(除源节点),最坏情况下要经多少次计算才能找到从源节点到所有目的节点的最低费用路径?
- 第一次迭代:搜索所有的n个节点以确定最低费用节点
- 第二次迭代:检查n-1个节点;
- 第三次:检查n-2个节点;
依次类推。
所有迭代中需要搜寻的节点总数为n(n+1)/2。
- 算法复杂性为n平方阶序O(n2)。
- 更有效的执行可能: O(nlogn)
可能产生振荡
4.5.2 距离向量路由算法(Distance Vector)
- 距离向量路由算法是一种迭代的、异步的和分布式的算法。
- 分布式:每个节点都从其直接相连邻居接收信息,进行计算,再将计算结果分发给邻居。
- 迭代:计算过程一直持续到邻居之间无更多信息交换为止。
- 异步:不要求所有节点相互之间步伐一致地操作。
- 自我终结:算法能自行停止。
每个节点和邻居交换距离矢量,测量到邻居的代价,可以算出经过邻居到每一个目标的代价值
最低费用表示
Bellman-Ford方程:
dx(y) = minv{c(x,v)+ dv(y)}
dx(y):节点x到节点y的最低费用路径的费用。
v: 节点x的邻居节点。
c(x,v)+ dv(y):x与某个邻居v之间的直接链路费用c(x,v)加上邻居v到y的最小费用。即x经v到节点y的最小的路径费用。
minv :从所有经直接相连邻居节点到节点y的费用中选取的最小路径费用。
B-F方程举例
得到节点u的转发表中到目的节点z的下一跳是节点x
距离向量DV路由算法
对每个节点x
(1)初始化:
(2)更新自己的距离向量
(3)重复执行(2),直到没有更新的距离向量发出
异步、迭代:
本地迭代的触发条件
DV的无穷计算问题
采用水平分裂方式解决
B是A的下一跳,所以C对B报告A的距离为INF
C是B的下一跳,所以D对C报告通向A的距离为INF
节点的距离向量表
- 节点x选路表(距离表):
- 行:该节点的
距离向量Dx
和其邻居的距离向量Dv
- 列:
所有目的节点
。
- 节点x的距离向量Dx ,即
节点x到每个目的节点y的估计费用
; Dx = [Dx(y):y在N中]
- 节点x每个邻居的距离向量Dv ,即
x的邻居v到每个目的节点y的估计费用
,Dv = [Dv(y):y在N中]
更新其距离向量
每个节点不断向邻居发送其距离向量拷贝;
当节点x收到一个邻居v的新距离向量,先保存,并用B-F公式更新自己的距离向量:
Dx(y) = minv{c(x,v)+ Dv(y)}
从所有经邻居v到节点y
的费用中选取最小路径费用
- 若距离向量发生改变,将新的距离向量通知给邻居。
- 当距离向量不再变化,算法终止,此时
Dx(y)收敛到dx(y)
,即得到节点x到节点y的最低费用路径。
横轴是时间,纵轴是各个节点
- 多次重复从邻居接收更新距离向量、重新计算选路表项、并向邻发送更新通知的过程,一直持续到没有更新报文发出为止。
- 算法进入静止状态,直到某个链路费用发生改变为止。
链路费用改变与链路故障
当一个节点检测到从它到邻居的链路费用发生变化时,就更新其距离向量,如果最低费用路径的费用发生变化,通知其邻居。
(1)某链路费用减少时情况
如图所示,当y 到x的链路费用从4变为1的情况。
考虑y与z到目的节点x的距离表变化
t0:y 检测到x的链路费用从4变为1,更新其距离向量,并通知其邻居z;
t1:z收到来自y的更新报文,并更新自己的距离表,此时到节点x的最低费用减为2,并通知其邻居y;
t2:y收到来自z的更新报文,并更新自己的距离表,此时到节点x的最低费用不变仍为1。不发送更新报文,算法静止。
当x与y之间费用减少,DV算法只需两次迭代到达静止状态。
节点之间链路费用减少的“好消息”在网络中能迅速传播。
(2)某链路费用增加时情况
如图所示,假设x与y之间的链路费用从4增加到60。
-
链路费用变化前
Dy(x)=4 ,Dy(z)=1, Dz(y)=1,Dz(x)=5
-
t0 时刻:y检测到链路费用从4变为60。更新到x的最低路径费用
Dy(x )=min{ c(y,x)+ Dx(x), c(y,z)+ Dz(x)}
=min{60+0,1+5}=6
经节点z到x费用最低,此新费用错误,发给节点z。
需要迭代原因:y不知道z到x需要经过自身
- t1时刻:z收到新费用,更新其到x的最低路径费用
Dz(x )=min{ c(z,x)+ Dx(x), c(z,y)+ Dy(x)}
=min{50+0,1+6}=7
经节点y到x费用最低,发给节点y。
- t2 时刻:y收到新费用,更新到x的最低路径费用
Dy(x )=min{ c(y,x)+ Dx(x), c(y,z)+ Dz(x)}
=min{60+0,1+7}=8
经节点z到x费用最低,发给节点z。
……
节点y或z的最低费用不断更新。
- 产生**“选路回环”:为到达x, y通过z选路,z又通过y选路**。
即目的地为x的分组到达y或z后,将在这两个节点之间不停地来回反复,直到转发表发生改变为止。
会不停迭代44次,直到另一条线路之和超过50
- 上述循环将持续44次迭代 (y与z之间的报文交换),直到z最终算出它经由y的路径费用大于50为止。并确定:
- z到x的最低费用路径:zx
- y到x的最低费用路径:yzx
- 说明:链路费用增加的
“坏消息”
传播很慢!
当链路费用增加很大,会出现“计数到无穷”
问题。
如链路费用c(y,x)变为10000,c(z,x)变为9999时。
毒性逆转
计数到无穷的解决办法:毒性逆转
假如 Z通过 Y 到达 X ,则Z告诉Y:它到X的距离是无穷大,Y将不会再经过Z到X
Z向Y撒了一个善意的谎言,使得只要Z经过Y选路到X,它就会一直持续讲述这个谎言,这样Y也就永远不会尝试从Z选路到X了,也就避免了环路问题
- 毒性逆转可以完全解决计数到无穷的问题吗?
——不能,如果三个以上节点的环路,则不能被毒性逆转技术检测到。
- 其它解决环路的方法:
- 定义最大度量(以防止计数至无穷大 )
- 抑制计时器
- 水平分割
- 路由毒化
- 触发更新
LS算法与DV算法比较
- 消息复杂度:【DV胜出】
- LS算法:知道网络每条链路的费用,需发送O(nE)个报文;当一条链路的费用变化时,必须通知所有节点
- DV算法:迭代时,仅在两个直接相连邻居之间交换报文;当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用。
- 收敛速度:【LS胜出】
- LS算法:需要O(nE)个报文和O(n2)的搜寻,可能会振荡
- DV算法:收敛较慢。可能会遇到选路回环,或计数到无穷的问题。
- 健壮性:当一台路由器发生故障、操作错误或受到破坏时,会发生什么情况?【LS胜出】
- LS算法:路由器向其连接的一条链路广播不正确费用,路由计算基本独立(仅计算自己的转发表),有一定健壮性。
- DV算法:一个节点可向任意或所有目的节点发布其不正确的最低费用路径,一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络。
4.6 层次选路
迄今为止,我们的路由研究都是理想化的:
所有路由器一样的
网络是 “平面的”
… 实际中并不是这样的…
- 规模:具有20亿个节点
- 路由表中不可能存储所有的节点!
- 路由表的信息交换将淹没数据链路!
- internet =众多网络组成的网络
- 每个网络管理者管理自己网络的路由选择-管理自治
层次选路
- 一个区域内的路由器组成集合 “自治系统” (AS,autonomous system )
- 同一个自治系统的路由器运行相同的路由协议——区域内路由协议
- 不同自治系统内的路由器可以运行不同的区域内路由协议
网关路由器
- 和其他自治系统内的路由器直接相连的路由器
- 同自治系统内的所有其他路由器一样也运行域内路由协议
问题转换为自治区域内部和自治区域间的路由
优点:
- 解决了规模问题
- 内部网关协议解决:AS内部数量有限的路由器相互到达的问题, AS内部规模可控
- 如AS节点太多,可分割AS,使得AS内部的节点数量有限
- AS之间的路由的规模问题
- 增加一个AS,对于AS之间的路由从总体上来说,只是增加了一个节点=子网(每个AS可以用一个点来表示)
- 对于其他AS来说只是增加了一个表项,就是这个新增的AS如何走的问题
- 扩展性强:规模增大,性能不会减得太多
- 解决了管理问题
- 各个AS可以运行不同的内部网关协议
- 可以使自己网络的细节不向外透露
域(自治系统)内路由选择
- 使用域内路由协议,也被称作内部网关协议 (IGP)
- 标准的域内路由协议:
- RIP: 路由信息协议
- OSPF: 开放式最短路径优先
- IGRP: 内部网关路由协议 (Cisco 所有)
RIP ( Routing Information Protocol)*
- 距离向量算法
- 包含在1982年发布的BSD-UNIX 版本中。
- 距离衡量: 跳数 (max = 15 hops)
- RIP 通告
- 每隔30秒,通过响应报文在邻居间交换距离向量 (也被称为RIP通告,advertisement)
- 或者对方请求的情况下
- 每个通告包含了多达25个AS内的目的子网的列表【自治区域的小网】
- RIP链路失败及恢复
若180秒后没有收到通告,则认为邻居死机或链路中断:
- 通过故障邻居的路由失败
- 新的公告发送给其他邻居
- 邻居然后再发送新的公告 (如果转发表发生变化)
- 链路故障信息快速传播到整个网络
- 毒性逆转用于防止乒乓循环 (无限距离 = 16 跳)
OSPF (Open Shortest Path First)
- “open”: 开放、公用的
- 用链路状态算法
- 分发LS 分组
- 每个节点具有拓扑图
- 路由计算使用 Dijkstra算法
- 每个router都广播OSPF通告,OSPF通告里为每个邻居路由器设一个表项(记录每个邻居的链路特征和费用)。
- 通告会散布到 整个 自治系统 (通过洪泛法)
- OSPF信息直接通过 IP传输 (不是 TCP 或 UDP)
OSPF 优点 (RIP所没有的)
- 安全: 所有OSPF 消息需要认证 (防止恶意入侵)
- 允许多个相同开销的路径 (在 RIP中只有一条路径)
- 对于每个链路, 有多个消费尺度用于不同的服务类型TOS (例如在尽力转发时卫星链路代价设置为 “低” ,而对实时应用设置为高)
- 单播和多播综合支持:
- 多播 OSPF (MOSPF) 使用和 OSPF同样的链路数据库
- 在大的区域中使用层次 OSPF
- backbone骨干网
- 每一个area运行相同的域内路由协议
- 整个是大的AS
- 通过boundary router边界路由器连接其他AS
- 两级层次: 本地区域, 主干区域(这些区域都是在一个自治系统内)
- 只在区域内发送链路状态通告
- 每个节点有详细的区域拓扑; 仅知道到达其他区域内网络的方向(即到区域边界路由器的最短路径)
- 区域边界路由器(同时属于本地区域和主干区域):“汇总”了到本区域内部网络的路径, 并通告给其他区域边界路由器.
- 主干路由器:限于在主干区域内运行OSPF路由协议(本身不是区域边界路由器)
- 边界路由器: 连接到其他自治系统
Internet 域间选路
BGP
eBGP:将子网可达信息发送给其他相邻的ASes
iBGP:将获得子网可达信息,发送给子网内布的路由器
路由器之间都是TCP连接
- BGP (Border Gateway Protocol【边界网关协议】):事实上的标准
- BGP 为每个 AS 提供了一种手段:
- 从相邻AS获取子网可达信息
- 区域边界网关路由器向该AS内部的所有路由器传播这些可达性信息
- 基于该可达信息和AS策略,决定到达子网的**“好”**路由
- 允许一个子网向Internet的其他部分通告它的存在 “I am here”
AS互连
- 转发表根据AS内和AS间选路算法而配置
- AS域内的选路项用于目的端在域内的选路。
- AS域内和AS域间的选路项用于目的端在域外的选路。
AS域间任务
- 假设AS1中的路由器接收到了目的端是AS1外的分组。路由器将把这个分组转发到网关路由器,但是是哪个网关路由器呢?
- AS1 需要知道:
- 通过AS2和AS3可以到达哪些目的端
- 将这些可达信息传播给AS1内的所有路由器
- 这就是域间选路的任务
- 示例:在router 1d 上设置转发表
- 假设AS1运行域间路由协议知道网络X通过网关1c从AS3(而不是AS2)是可达的
- 通过域内路由协议将可达信息传播给所有域内路由器
- Router 1d 由域内路由信息判断自己的接口I 在到达1c的最小开销路径上
- 在转发表里添加一项 (x,I ).
- 示例:在多个自治系统中选择
- 现在假设AS1通过域间选路协议知道子网x从AS3和AS2都可以到达
- 为了配置转发表,路由器1d必须决定通过哪个网关将分组转发到目的子网x
- 这同时也是域内路由协议的工作
- 热土豆选路: 把分组送到两个路由器中最近的一个【不考虑全局开销】
BGP会话与通告【传输层实现网络层的功能】
- 路由器对(BGP对等方)通过半永久TCP连接来交换选路信息:BGP 会话
- BGP会话和物理链路无关(并不总是和某条物理链路对应)。
- 当AS2通告一个前缀给AS1,说明AS2能够转发目的地址前缀是这个通告前缀的所有分组。
- AS2能够在它的通告中汇总了这些前缀。
传播可达信息
- 在3A和1C的eBGP会话中,AS3向AS1通告一个前缀可达信息。
- 1c通过iBGP会话向AS1中的所有路由器发布这个新的前缀可达信息。
- 1b 又将这个可达信息通过1b和2a之间的eBGP会话通告给AS2。
- 当路由器得知一个新的前缀时,就在它的转发表中为该前缀创建一个项。
eBGP:AS间的BGP会话
iBGP:AS内的BGP会话
路径属性 和 BGP 路由
- 当通告前缀时,通告包含了BGP属性.
- 前缀+属性=“路由”
- 两个重要的属性:
- AS-PATH: 包含了前缀的通告已经通告过的那些AS,如 AS 67 AS 17
- NEXT-HOP: 指出到达下一个AS的具体AS间边界路由器(可能存在多条从当前AS到达下一个AS的链路)
- 当网关路由器接收到路由通告时,使用输入策略来决定接收/舍弃该通告。
BGP 路由选择
- 路由器可能知道到相同前缀的多条路由,路由器必须从中选择
- 排除规则(应用排除规则直到有一条留下)
- 本地偏好值属性: 具有最高偏好值的路由被选择
- 最短AS-PATH的路由
- 最靠近 NEXT-HOP路由器的路由 : 热土豆路由
- 其他标准
BGP 报文
- BGP 报文交换使用 TCP
- BGP 报文:
- OPEN:建立到对方的TCP连接,并对发送者进行认证
- UPDATE:通告新路径 (或者撤销旧路径)
- KEEPALIVE:在没有UPDATES时保持连结活跃; 也对OPEN请求作出应答
- NOTIFICATION:报告前面报文的错误; 也用于关闭连结
BGP 选路策略’
-
A,B,C 是提供商的网络
-
X,W,Y是提供商的客户
-
X是双重的: 连接到两个网络
-
X 不希望 B 通过 X 到 C的路由BXC
-
… 所以 X 不会向B公告到C的路由XC
-
A 向B通告路径 AW
-
B 向X通告路由BAW
-
B 应该向C通告路由BAW?
- 决不! B 路由 CBAW 没有什么“好处”,因为 W 和 C 都不是 B的客户
- B 希望强迫 C通过A路由到W–CAW
- B 只想路由它的客户!
为什么AS内选路和AS间选路采用不同的协议 ?
- 策略:
- AS间: 管理员想控制本AS内产生的通信流怎样选路,以及什么信流穿过自己的网络
- AS内:单个管理者, 因此不需要策略
- 规模:
- 层次路由节省了转发表的大小空间,减少了路由更新的流量
- 性能:
- AS内: 集中在性能上
- AS间: 策略可能比性能更加重要
4.7 SDN*略
传统方式
网络设备难以管理,固化
网络管理更容易
可编程
SDN的特点
南向接口上报状态,下交流表
SDN控制器
网络控制应用
实现各种各样网络功能
什么是SDN
- 软件定义网络(SDN,SoftwareDefinedNetwork)源自美国斯坦福大学CLeanState研究组提出的一种新型网络创新架构,可通过软件编程的形式定义和控制网络,具有控制平面和转发平面分离及开放性可编程的特点。
- SDN的核心理念是,希望应用软件可以参与对网络的控制管理,满足上层业务需求,通过自动化业务部署,简化网络运维。
- SDN并不是一个具体的技术,它是一种网络设计理念,规划了网络的各个组成部分(软件、硬件、转发面和控制面)及相互之间的互动关系。
SDN的发展驱动力和优势
- 发展驱动力
- 计算虚拟化驱动:静态到动态的网络变化
- 云计算对资源的垂直整合:独立演进到协同
- 云计算时代IT业务的发展
- 数据中心资源:需要随业务跨地域整合,并使数据中心间广域流量增大
- 优势
- 统一便捷的管理
- 无缝的版本升级
- 网络数据可视化
- 整体的流量调度
- ……
SDN的相关组织
- ONF(open network foundation ):openflow
该组织的发起者为google、facebook 、微软等由客户驱动的组织,负责推动SDN网络的部署
- IETF I2RS interface to route system
I2RS实现路由系统的开放访问接口标准化,通过外部控制平面对设备控制平面进行扩展,也不是完全取代现有控制平面,可以实现基于控制层面的hybrid SDN
- 国际主流运营商发起成立的ETSI: 网络功能虚拟化工作组(Network Function Virtualizetion,NFV)
NFV的目标是利用当前的一些IT虚拟化技术,讲多种网络设备虚拟到大量符合行业标准的物理服务器、交换机或者存储设备上,然后在这些标准的硬件上运行各种执行这些网络功能(路由、安全功能、负载均衡、SBC等)
- Opendaylight
由各软硬件厂商成立目标打造一个开源的基于SDN的平台框架
SDN技术的应用方向
- 数据中心
- 虚拟机联动/多租户
- 流量监视/拥塞发现/自动分流
- 可编程/自定义路由
- 自动化管理与运维
- 广域网
- 流量工程(TE)
- 流量识别与差异化调度
- 业务QoS自动部署与保证
- 无线、安全等
- 业务动态隔离及权限控制
- 统一安全防护
- BYOD
- AC云
SDN:通用转发
——每个交换设备包含一个流表(flow table). 流表由一个逻辑上中心化的控制器(远程控制器)来计算和分发
SDN体系结构及特征
特 征
- 基于流的转发
- 数据平面与控制平面分离
- 网络控制功能:位于数据平面交换机外部
- 可编程的网络
SDN控制器的组件
网络层:总结
- 我们已经学习了:
- 网络层服务
- 路由原理: 链路状态和距离矢量
- 层次路由
- IP
- Internet 选择协议 RIP, OSPF, BGP
- 路由器的内部结构
- IPv6
网络层提供的服务和功能
主机通信
虚电路和数据报
转发
选路
路由器工作原理
网际协议IP
IP报文、IP分片和重组
IP编址和IP子网
IP地址分类和无分类编址CIDR
NAT网络地址转换
IPv6协议及特点、IPv4和IPv6互通