一、概述
网络层介于传输层和数据链路层之间,其主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。网络层是网络与网络之间通信的最底层,在数据从数据链路层向传输层进行数据传输的通信中,起到构建一个中间通信子网的作用。不同网络有着不同的网络层协议和地址规范,如果一个网络中的用户不能识别其他网络的通信协议和地址规范,那么这两个网络之间就不能进行数据通信,就好比不同国家有着不同的交通法规,属于不同的交警系统管理,不允许他国车辆随便出入一样。不同网络也有不同的设计规范,属于不同的组织来管理,必须通过授权,并由专门的协议来负责网络间的通信。如果只是同一局域网内的各个计算机之间的通信,单靠物理层和数据链路层就可以建立通信链路完成用户间的数据通信,但要扩大应用范围,连接不同的局域子网,就需要借助网络层处理各个网络子网的协议,从而进行计算机的网络互连,所以网络层在TCP/IP协议体系中叫网际互连层。
从一般的概念来讲,将网络互相连起来的要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备: (1)物理层使用的中间设备叫转发器(repeater) (2)数据链路层使用的中间设备叫做网桥或者桥接器(bridge) (3)网络层使用的中间设备叫做路由器(router) (4)在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议转换。
1:转发和路由选择 网络层的作用从表面上看起来很简单即将分组从一台发送主机移动到一台接收主机。需要两种功能:
- 转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
- 路由选择:分组从发送方流向接收方时,网络层必须决定这些分组采用的路由或路径,计算这些路径的算法称路由选择算法(routing algorithm)。
转发是路由器本地动作,主要由硬件来实现。路由选择是网络范围过程,主要由软件来实现。比如开车从北京到上海,转发相当于在某个路口选择某一条岔路,路由选择相当于规划从北京到上海所有线路的过程
每台路由都有一张转发表。路由器检查分组首部字段值(可能是目的地址或所属连接,看网络层协议)来转发分组,使用该值在转发表索引查询。该值指出了该分组将被转发的路由器输出链路接口。
转发表的配置:
- 传统方法:人类网络操作员直接配置,进一步说明了转发和路由选择功能的区别和不同目的,在这种情况下不需要任何路由选择协议(就像开车问路,每到一个岔路口问问路边的人到目的地需要往哪个方向走)。当然这些人类操作员将需要彼此交互,以确保该转发表的配置能使分组到达他们想要的目的地。
- SDN(软件定义网络)方法
如图所示:远程控制器计算和分发转发表以供每台路由器使用,控制平面路由选择功能与物理的路由是分离的,即路由选择设备仅仅执行转发,而远程控制器计算并分发转发表,远程控制器可能实现在具有高可靠性和高冗余性的数据中心或者ISP和某些第三方管理 2:网络服务模型
定义了分组在发送与接收端系统之间的端到端运输特性。
当位于发送主机的运输层向网络层传输分组时要面对的一系列问题:
- 运输层能指望网络层将分组交付给目的地吗?
- 当发送多个分组时,他们会按发送顺序按序交付到接收主机的运输层吗?
- 发送两个连续分组的时间间隔与接收到这两个分组的时间间隔相同吗?
- 网络层会提供关于网络中拥塞反馈的信息吗?
- 在发送主机与接收主机中连续运输层通道的抽象视图是什么?
网络层可以提供的服务(注意IP并没有这些服务!):
- 运输层向网络层传递分组时:
- 为给定源和目的地之间的分组流提供服务:
- 有序分组交付
- 确保最小带宽:模仿发送方和接收方之间一条特定比特率传输链路的行为。发送速率低于该速率,分组不会丢失,且会在预定时延内到达
- 确保最大时延抖动:确保发送方两个相继分组之间的时间 = 目的地接收到它们之间的时间
安全性服务:使用仅由源和目的地主机知晓的密钥,加密数据报,源加密,目的主机解密。此外还有数据完整性和源鉴别服务
因特网的网络层IP协议提供单一服务,尽力而为服务,无带宽保证,无丢包保证,无顺序保证,不定时,无拥塞指示。
二、路由器工作原理
1:组成部分
(1)输入端口:
- 执行将一条输入的物理链路与路由器相连接的物理层功能
- 执行与位于入链路远端的数据链路层交互的数据链路层功能
- 查找功能,查询转发表决定路由器的输出端口,将分组转发到输出端口
(2)交换结构
- 将路由器的输入端口与输出端口相连
- 分组通过交换结构转发到输出端口
(3)输出端口
- 存储从交换结构接收的分组,执行必要的链路层和物理层功能在输入链路上传输这些分组。
- 当链路是双向的时,输出端口与输入端口在同一线路卡成对出现
(4)路由选择处理器
- 执行路由选择协议
- 维护路由选择表、连接的链路状态信息,为路由器计算转发表
- 网络管理
路由转发平面 :一台路由器的输入端口、输出端口和交换结构共同实现了转发功能,并且用硬件实现(软件太慢,需以纳秒时间尺度运行)
路由控制平面:路由器的控制功能(执行路由选择协议、对上线或者下线链路进行响应、管理功能),在毫秒时间尺度上运行,用软件实现并在选择处理器上执行(一种cpu)
2:输入端口 (1)线路端接 (2)数据链路处理(协议、拆封) (3)查找
- 查找必须在纳秒级别执行,不仅要用硬件执行查找,而且要对大型转发表使用快速查找算法,而且需要更快的内存访问速度(DRAM、SRAM)。
- 三态内容可寻址存储器TCAM常被用于查找。使用TCAM,一个32bit的IP地址放入内存,TCAM在基本常数时间内返回转发表项内容
(4)转发
- 转发表由路由选择处理器计算和更新,从路由选择处理器经过独立总线复制到(输入)线路卡
- 有了转发表副本,转发决策能在每个输入端口本地做出,无须调动路由选择处理器,避免集中式处理
(5)排队
- 查找确定了某分组输出端口,分组就能发送进入交换结构。一个被阻塞的分组必须在输入端口处排队
3:交换结构 交换结构位于一台路由器的核心部位,正是通过这种交换结构,通过交换结构,分组才能实际地从一个输入端口交换(转发)到一个输出端口中。
三种交换方式: (1)经内存交换
- 一个分组到达输入端口时,该端口会先通过中断方式向路由选择处理器发出信号
- 分组从输入端口复制到处理器内存中(现代路由器查找交换进内存,是由输入线路卡处理的)
- 早期路由选择处理器从首部提取目的地址,在转发表查找输出端口,将分组复制到输出端口
(2)经总线交换
- 输入端口经一根共享总线将分组直接传送到输出端口,无需路由选择处理器的干预
- 路由器的交换带宽受总线速率限制
(3)经互联网络交换
- 纵横式交换机,2N条总线组成网络,连接N各输入端口和N个输出端口
- 每条垂直的总线与每条水平的总线交叉,交叉点通过交换结构控制器开启闭合
- 某分组到达端口A,需要转发到Y,交换机控制器闭合总线A和Y的交叉点,A在其总线上发送分组,仅由Y接收;同时B也能发分组到X,因为没有公用总线。纵横式网络能并行转发多个分组
4:输出端口 取出已经存放在输出端口内存中的分组并将其发送到输出链路上。
5:何时出现排队
- 输入、输出端口都能形成分组队列,取决于流量负载、交换结构。即汽车可能等待在流量交叉点的入口和出口。
- 随着队列增长,路由器缓存空间会耗尽,出现丢包(分组在网络中丢失,或者呗路由器丢弃)
- 需要路由器缓存吸收流量负载波动,需要多少缓存?
- 少量TCP流:RTT * C(链路容量)
- 大量TCP流:RTT* C/ (N^1/2)
(1)输入排队 如图所示,其中在输入队列前端的两个分组(带深色阴影)要发往同一个右上角的输出端口。假定该交换结构决定发送左上角队列前端分组。在这种情况下,左下角队列中的深色阴影分组必须等待。但不仅该分组要等待,左下角队列中排在该分组后面的浅色阴影分组也要等待,即使右中侧输出端口中无竞争。这种现象叫做输入排队交换机中的线路前部阻塞(Head-Of-the-Line,HOL)。即在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口是空闲的),因为它被位于线路前端的另一个分组所阻塞。
(2)输出排队
当分组的数量变得足够大时,耗尽输出端口的可用内存,就必须作出决定:要么丢弃到达的分组(采用一种弃尾的策略),要么删除一个或多个已排队的分组为新来的分组腾出空间。在某些情况下,在缓存填满之前便丢弃一个分组的做法是有利的,这可以向发送方提供一个拥塞信号。已经提出和分析了许多分组丢弃和标记策略,这些策略统称为主动队列管理(Active Queue Manager,AQM). 上图显示了输出端口的排队情况。在t时刻,每个输入端口都到达了一个分组,每个分组都是发往最上侧的输出端口。假定线路速度相同,交换机以3倍于线路速度的速度运行,一个时间单位以后,所有三个初始分组都被传送到输出端口,并排队等待传输。在下一时间单位中,这三个分组中的一个将通过输出链路发送出去。在这个例子中,又有两个分组已到达交换机入端;这些分组之一要发往最上侧的输出端口。这样的后果是,输出端口的分组调度(packet scheduler)在这些排队分组中选择一个分组来传输。
6:分组调度 即排队的分组是如何经输出链路传输的。
(1)先进先出(First-In-First-Out,FIFO) 按照分组到达输出链路队列的次序来选择分组在链路上传输 排队抽象:
运行中的队列: (2)优先权排队(Priority Queuing) 到达输出链路的分组被分类放入输出队列中的优先权类中,每个优先权类都有一个队列,先传输优先权高类中的分组,最后传输优先权类低中的分组。在非抢占式优先权排队中,一旦分组开始传输就不可以被打断。 排队抽象: 运行中的队列: (3)循环和加权公平排队(round robin queuing discipline) 在循环排队规则下,分组像优先权排队那样被分类,然而,在类之间不存在严格的优先服务权,循环调度器在这些类之间轮流提供服务。在最简单形式的循环调度中,类1的分组被传输,接着是类2的分组,接着又是类1的分组,然后又是类2的分组,等等。一个所谓的保持工作排队规则在有(任何类的)分组排队等待传输时,不允许链路保持空闲。当寻找给定类的分组但是没有找到时,保持工作的循环规则将立即检查循环序列中的下一个类。 排队抽象: 运行中的队列: 加权公平排队(WFQ)是一种通用的循环排队。与循环排队不同的是,它的每个类在任何时间间隔内可收到有不同数量的服务。
三、IPv4
1:IPv4数据报格式 网络层分组被称为数据报,下图是IPV4数据报格式。一个IP数据报有总长为20字节的首部,如果数据报承载一个TCP报文段,则每个数据报共承载40个字节的首部以及应用层报文
关键字 | 含义 |
---|
版本 | 这4比特规定了数据报的IP协议版本,通过版本号路由器可以确定如何解析IP数据报。不同IP版本使用不同的数据报格式。 | 首部长度 | IPV4数据报包含了一些可变数量的选项,所以需这4比特来确定IP数据包中的载荷实际开始的地方。 | 服务类型(TOS) | 以便使不同类型的IP数据包能够相互区别开。例如:实时数据包和非实时数据包。 | 数据包长度 | IP数据包的总长度。该字段16比特,所以最大是65535 | 标识、标志、片偏移 | 这三个字段与所谓的IP分片有关。 | 寿命 | 用来确保数据宝永远不会在网络中循环。每当一台路由器出路数据报时候,该字段-1,直到TTL字段为0,则丢弃该数据报。 | 协议 | 指示了IP数据报的数据部分应该交付给那个特定的运输层协议。值为6交付给TCP,为17交付给UDP。 | 首部校验和 | 首部校验和用于帮助路由器检测收到的IP数据报中的比特错误,首部校验和计算方法:将首部中每两个字节当做一个数,用反码算术对这些数求和。如果首部中携带的校验和和计算出的校验和不一致则代表出错,一般会丢弃出错的数据报。 | 源和目的地址 | 在源IP字段插入源IP地址,在目的IP字段插入目的IP地址。 | 选项 | 允许IP首部被扩展,可有可无。 | 数据 | 有效载荷,数据报存放的地方。 |
2:IPv4数据报分片
最大传输单元(MTU):并不是所有链路层都能承受相同长度的网络层分组。有的协议能承载大数据报,而有的协议只能承载小分组。因此一个链路层帧能承载的最大数据量叫做最大传输单元。因为每个IP数据报封装在链路层帧中一台路由器到达另一台路由器,所以链路层协议的MTU严格限制IP数据报的长度。不同链路层协议中的MTU不同。
分片:如果链路的MTU比IP数据报长度小,那么将IP数据报中的数据分片成两个或者多个较小的IP数据报,用单独的链路层帧封装这些较小的数据报,然后发送。这些较小的数据报称为片。在到达目的地时候进行重装。
IPv4的设计者将标识、标志和片偏移放在IP数据报中,用来分片。
- 标识:这些分片是否属于一个大的数据报,所以属于统一数据报的分片的标识是一样的。
- 标志:
- 片偏移:指出分片后,某片在原分组中的相对位置,以8B为单位,除了最后一片,每个分片一定是8B的整数倍。
举个🌰: 4000字节数据报:20字节头部,3980字节数据,MTU = 1500字节 第一片:20字节头部 + 1480字节数据(1480字节应用数据),偏移量:0 第二片:20字节头部 + 1480字节数据(1480字节应用数据),偏移量:1480 / 8 = 185(为了方便计算,以8个字节为单位) 第三片:20字节头部 + 1020字节数据(应用数据),偏移量:2960 / 8 = 370
| 总长度 | 标识 | MF | DF | 片偏移 |
---|
原始数据报 | 40000 | 12345 | 0 | 0 | 0 | 数据报片1 | 1500 | 12345 | 1 | 0 | 0 | 数据报片2 | 1500 | 12345 | 1 | 0 | 185 | 数据报片2 | 1040 | 12345 | 0 | 0 | 370 |
3:IPv4编址 在讨论IP编制之前,我们需要简述一下路由器连入互联网的方法:一台主机通常只有一条链路连到网络;当主机中的IP想发送一个数据报时,它就在该链路上发送。主机与物理链路之间的边界叫做接口。 因为路由器的任务是从链路上接收数据并从某些链路转发出去,于是路由器必须拥有两条或更多的条链路与它连接,因此一台路由器有多个接口,IP要求每台主机和路由器都有自己的IP地址,因此一个IP地址实际上是与每一个接口相关联的。
每个IP地址长度32bit(4字节),总共2^32个可能的IP地址,约40亿个,采用点分十进制标识,如:193.32.216.9。在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址(在NAT后面的接口除外)。然而,这些地址不能是随意的选择。一个接口的IP地址的一部分需要由其连接的子网来决定。 如上图所示,一台路由器(具有三个接口)用于互联7台主机。注意左上侧的3台主机以及连接他们的路由器接口,都有一个形如223.1.1.xxx的IP地址。这就是说,在他们的IP地址中,最左侧的24比特是相同的。这4个接口也通过并不包含路由器的网络互联起来,该网络可能是一个以太网LAN互联,在此情况下,这些接口将通过一台以太网交换机互联,或者通过一个无线接入点互联。我们此时将这种无路由器连接这些主机的网络表示为一朵云。用IP的术语来说,互联这三个主机与一个接口的网络形成一个子网。 IP编址为这个子网分配一个地址223.1.1.0/24,其中/24记法,有时称为子网掩码(network mask),指示32比特中最左侧24比特定义了子网地址,任何其他要连接的223.1.1.0/24子网的主机都要求其地址具有223.1.1.xxx的形式。
因特网的地址分配策略: (1)无类别域间路由选择(Classless Interdomain Routing,CIDR) CIDR将子网寻址的概念一般化了。当使用子网时,32比特的IP地址被划分为两部分,并且具有点分十进制数形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。x即表示网络地址的比特数,并且经常被称为该地址的前缀。一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。剩余的32-x比特可认为是用于区分该组织内部设备,其中所有设备具有相同的网络千种。 (2)分类编地址(classful addressing) 在CIDR被采用前,IP地址的网络部分被限制为长度为8,16,24比特,这是一种称为分类编址的编址方案。
A类地址: B类地址: C类地址: 一般不使用的特殊IP地址:
总结: (3)IP广播地址 当一台主机发出目的地址为255.255.255.255的数据报时,报文会交付给同一个网络的所有主机,路由器也会有选择地向邻近的子网转发该报文(虽然他们通常不这样做)。
四、寻址
1:获取地址、分配地址 (1)获取一块地址
- 子网获取IP地址:由ISP从它大块地址中分配
- ISP获取IP地址:IP地址由因特网名字和编号分配机构ICANN管理(也管理DNS根服务器、AS标识号)。ICANN向区域性因特网注册机构分配地址,处理本地域内的地址分配/管理
(2)获取主机地址
- 组织获得一块地址,就可为组织内的主机、路由器接口逐个分配IP地址
- 主机地址能手动配置,也能自动配置,即动态主机配置协议DHCP
(3)动态主机配置协议(Dynamic Host Configuration Protocol, DHCP) DHCP允许主机自动获取一个IP地址。网络管理员也能配置DHCP,以使某给定主机每次与网络连接时都能得到一个相同的IP地址,或者某主机将被分配一个临时的IP地址,每次与网络连接时该地址也许是不同的。除了主机IP地址外,DHCP还允许一台主机得知其他信息,例如它的子网掩码、它的第一条路由器位置(常称为默认网关)与它的本地DNS服务器地址。
DHCP能将主机连接进一个网络的自动能力,常被称为即插即用协议(plug-and-play protocol)或者零配置(zeroconf)协议。
DHCP是一个客户-服务器协议。新来的主机要获得自使用的IP地址等网络配置信息:
- 每个子网都有一台DHCP服务器
- 若子网没有DHCP服务器,则由一个路由器做DHCP中继代理,该代理知道该网络的DHCP服务器地址
新主机到来时,DHCP协议的四个步骤:
- DHCP服务器发现(主机广播):一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器。这可通过使用DHCP发现报文来完成。客户在UDP分组中向端口67发送该报文。但是这个数据报应该发给谁那?主机甚至不知道它所连接网络的IP地址,更不用说用于该网络的DHCP服务器地址。在这种情况下,DHCP客户生包含了DHCP发现报文的IP数据报,其中使用广播目的地址255.255.255.255并且使用本主机源IP地址0.0.0.0。DHCP客户将该数据报传递给链路层,链路层然后将该帧广播到所有与子网连接的节点。
- DHCP服务器提供:DHCP服务器收到一个DHCP报文是,用DHCP提供报文(DHCP offer message)向客户做出反应。仍然使用广播地址,可能有多台DHCP服务器,每台服务器提供的报文中,有向客户主机推荐的IP地址、网络掩码以及IP地址租用期(一般几天或几小时)。因为此时新客户并没有IP地址。
- DHCP请求:新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文(DHCP request message)进行响应,回显配置的参数。
- DHCP ACK。服务器用DHCP ACK报文(DHCP ACK message)对DHCP请求报文进行响应,证实所要求的参数。
客户收到ACK后,交互完成,在租期内使用DHCP分配的IP地址。DHCP提供了机制允许客户更新对一个IP地址的租用
2:网络地址转换(Network Address Translate, NAT) 当ISP已经为SOHO(Small Office,Home Office)网络当前地址范围分配过一块连续地址,而SOHO内主机越来也多时,需要用到NAT(比如电信给你家分配一个动态IP地址,家里要好几台手机电脑联网用一个IP地址,需要用NAT)。
(1) NAT使能路由器 NAT路由器对外界来看像一个具有单一IP地址的单一设备。例如,家里有一个NAT使能路由器,其IP地址138.76.29.7,且进入和离开家庭的报文都有同样的该地址。从本质上来说,NAT使能路由器对外隐藏了家庭网络的细节。NAT路由器从ISP的DHCP服务器得到它的地址,并且路由器运行一个DHCP服务器,为位于NAT-DHCP路由器控制的家庭网络地址空间中的主机提供地址 (2)NAT转换表 如果从广域网WAN到达NAT路由器的所有数据报都具有相同的目的IP地址,那么路由器应该怎样知道它将某个分组转发给那个内部主机那?技巧就是使用NAT路由器上的一张NAT转换表(NAT translation table)。
(3)NAT重要问题
- 违反各种原则,应该用IPv6来改进
- 妨碍P2P应用程序,包括P2P共享和语音。一个对等方在NAT后面,不能充当服务器并接受TCP连接,其解决办法是连接反转
- NAT穿越:在外网的客户端需要连接内网的服务器时,会发生NAT穿越的情况
(4)NAT解决方案 方案一:静态配置NAT,转发进来的对服务器特定端口连接请求
e.g:123.76.29.7, port 2500 总是转发到10.0.0.1 port 25000
方案二:通用即插即用(Universal Plug and Play, UPnP)
- 获知网络的公共 IP 地址(138.76.29.7)
- 列举存在的端口映射
- 增/删端口映射 (在租用时间内)
方案三: 中继 (usedin Skype)
- NAT 后面的服务器建立和中继的连接
- 外部的客户端连接到中继
- 中继在2个连接之间桥接
五、IPv6
在20世纪90年代早期,因特网工程任务组就开始致力于开发一种代替IPv4的协议,该努力的首要动机是以下现实:由于新的子网喝IP节点以惊人的增长率连到因特网上(并被分配唯一的IP地址),32比特的IP地址即将被用尽。
1:IPv6数据报格式
关键字 | 含义 |
---|
流标签 | 此20比特用于给特殊流的分组加上标签,这种流是一种非默认服务质量或需要实时服务的流。例如视频流 | 版本 | 该4比特字段用于表示IP版本号 | 流量类型 | 这8比特字段与我们在IPV4中看到的TOS 字段相似 | 有效载荷长度 | 该16比特作为一个无符号整数,给出了IPV6数据报中跟在定长40字节数据报后的字节数量 | 下一个首部 | 该字段标识数据报中的内容交付给哪个协议(UDP还是TCP),与IPV4中协议字段相同 | 跳限制 | 转发数据报的每台路由器将对该值减一,当值为0时,则丢弃该数据报 | 源地址和目的地址 | IPv6 128比特地址的各种格式在RFC 4291中进行了阐述 | 数据 | IPV6有效载荷部分 |
2:与IPv4的格式对比
区别 | 原因 |
---|
分片/重新组装 | IPv6不允许在中间路由器上进行分片组装。这种操作只能在源与目的地执行。如果路由器收到的IPv6数据报太大了,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文 | 首部检验和 | 因为因特网中的运输层和数据链路层协议执行了检验操作,所以就被去除了 | 选项 | 选项字段不再是标准IP首部的一部分了,但它并没有消失,而是可能出现在IPv6首部中由“下一首部”指出的位置上 |
3:从IPv4到IPv6的迁移 虽然新型的IPv6能够向后兼容,即能发送,路由和接收IPv4数据报,但已经部署的具有IPv4能力的系统却不能够处理IPv6数据报。 于是在实践中已经得到广泛应用的IPv4到IPv6的迁移方法包括建隧道。 假定两个IPV6路由器相互通讯中间有个IPV4的路由器,我们将两台IPV6中间的IPV4的路由器集合称为一个隧道,隧道发送端的IPV6节点可以将整个IPV6的数据报封装到一个IPV4的数据报中,该IPV4的地址指向隧道接收端的IPV6节点,隧道接收端的IPV6最终接受到该IPV4的数据报。如图
六、路由选择算法
其目的是从发送方到接收方的过程中确定一条通过路由器网络的好的路径。通常是指开销最低的路径。 1:概念 (1)图(graph) 我们可以用图来描述路由选择问题。 G = (N,E) 其中 N 指节点,E指边,G是他们的集合。
选路算法的图论抽象: 图中的节点是路由器 图中的边是物理链路
(2)开销 一条边还有一个值表示他的开销 c(x,y)= n 其中 x,y 表示两个节点,n 表示开销
(3)路径 图 G = (N,E)中的一条路径(path)是一个节点序列(x1, x2, …, xp) 开销总和是:c(x1,x2)+ c(x2,x3)+ … + c(xp-1,xp) 通常节点之间有许多路径,每条路径都有一个开销。
(4)最低开销路径/最短路径
- 最低开销路径(least-cost path):这些路径中一条或多条组合的路径开销最低。
- 最短路径(shortest path):若图中所有边具有相同的开销,则最低开销路径就是最短路径。
2:分类 (1)按照分布来划分——最重要
- 集中式路由选择算法(centralized routing algorithm):全局的。每个路由器具有所有路由器具有完全的拓扑、链路开销信息。具有全局状态信息的算法被称作链路状态算法(Link State,LS)
- 分散式路由选择算法(centralized routing algorithm):分散的。路由器仅有与其直接相连链路的开销信息,然后通过迭代、分布式的方式与邻节点交换信息,最后计算出最低开销路径。这种也被称为距离向量算法(Distance-Vector,DV)
(2)按照动/静态来划分
- 静态路由选择算法(static routing algorithm):路由随时间变化非常缓慢,通常是人工进行调整(如:人工编辑一条链路开销)
- 动态路由选择算法(dynamic routing algorithm):随着网络流量负载或拓扑发生变化而改变路由选择路径。
(3)按照负载来划分
- 负载敏感算法(load-sensitive algorithm):链路开销会动态的变化反映出底层链路的当前拥塞水平。
- 负载迟钝(load-insensitive):不能明确反应拥塞水平。目前使用:RIP、OSPF、BGP。
3:链路状态路由选择算法 在链路状态算法中,网络拓扑和所有链路的开销都是已知的,也就是说可用作LS算法的输入。实践中这事通过让每个节点向网络中所有其他节点广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路标识和开销。
链路状态路由选择算法一般采用 Dijsktra 算法: (1)c(x,y):从节点x到y的链路费用; = ∞ 如果不是直接邻居 (2)D(v):从源到目的地v路径费用的当前值 (3)p(v):从源到v沿路径的前任节点 (4)N’:已知在最小费用路径中的节点集合
伪代码:
1 Initialization
2 N' = {u}
3 for all nodes v:
4 if v is a neighbor of u
5 then D(v) = c(u,v)
6 else D(v) = ∞
7
8 Loop
9 find w not in N' such that D(w) is a minimum
10 add w to N'
11 update D(v) for each neighbor v of w and not in N'
12 D(v) = min( D(v), D(w) + c(w,v) )
13
15 until N' = N
举个🌰: 当LS算法终止时,对于每个节点,我们都能得到从源节点沿着它的最低开销路径的前一节点。对于每个前一节点,我们又有它前一节点,依次迭代我们可以构建从源节点到所有目的节点的完整路径。
4:距离向量路由选择算法 距离向量算法是一种迭代的、异步的和分布式的算法,而LS算法是一种使用全局信息的算法。说它是分布式的,是因为每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果发送给邻居。说他是迭代的,是因为此过程一直要持续到邻居之间无更多信息交换为止。说它是异步的,是因为它不要求所有节点相互间步伐一致地操作。
在我们给出DV算法之前,有必要讨论一下存在于最低开销路径的开销之间的一种重要关系。令 Dx(y)是从节点x到节点y的最低开销路径的开销。则该最低开销与著名的Bellman-Ford(BF)方程相关,即
方程中的minv是对于x的所有邻居的。
距离向量路由选择算法一般采用 Bellman-Ford算法: (1)c(x,v):节点 x 到邻节点 v 的开销 (2)Dv(y):邻节点 v 到目的地 y 的最小开销 (3)Dx(y):邻节点 x 到目的地 y 的最小开销
伪代码:
1 Initialization
2 for all destinations y in N:
3 Dx(y) = c(x,y)
4 for each neighbor w
5 Dw(y) = ?for all destionations y in N
6 for each neighbor w
7 send distance vector Dx = [Dx(y): y in N] to w
8 Loop
9 wait(until I see a link cost change to some neighbor w or until I receive a distance vector from some neighbor w)
10 for each y in N
11 Dx(y) = minv{c(x,y) + Dv(y)}
12 if Dx(y) changed for any destination y
13 send distance vector Dx = [Dx(y) : y in N] to all neighbor
14 forever
举个🌰: 4:距离向量算法:链路故障和毒性逆转
(1)链路故障:形成环路 比如下图的例子
某时刻 x<–>y 的开销由 4 变为 60,y 需要通知其他节点改变开销,但是 y 要首先改变与 x 的开销就要到达 x,通过算法 y 要经过 z 到达 x,但是 z 没有修改最短路径,告诉 y 到达 x 只需要 5,结果 y 到 z 然后返回 y,距离由 5 变为 6,但是还是小于 60,一直由 5 增长到大于 50 才结束。需要迭代 44 次。
(2)毒性逆转 上面的形成环路的问题可以通过毒性逆转来避免。 办法:定义 dz(x) = ∞,y 开始直接会选择 60 到 x,更新后修改完善转发表。 问题:只能解决两个节点之间的问题,一旦节点多了同样不能解决问题。
5:LS和DV算法比较 N是节点(路由器)的集合,而E是边(链路)的集合。 (1)报文复杂性
- LS:对N个节点,E条链路, 发送O(|N||E|) 报文
- DV:仅在邻居之间交换
(2)收敛速度
- LS:O(N2) 算法要求 O(NE)报文
- DV:收敛较慢,且在收敛时会遇到路由选择环路。还会遭遇无穷计数的问题。
(3)健壮性:如果有一台路由器故障,将发生什么现象 LS:节点可能通告不正确的链路费用、每个节点仅计算它自己的表。这就意味着,路由器计算在某种程度上是分离的,提供了一定程度的健壮性。
DV:一个节点可以向任意或所有目的节点通告其不正确的最低开销路径,一个不正确的节点计算会扩散到整个网络。
七、因特网中自治系统内部的路由选择:OSPF
目前为止,我们将网络只看成一个互联路由器的集合。从所有路由器执行相同的路由选择算法以计算穿越整个网络的路由选择路径的意义上来说,一台路由器很难同另一台路由器区别开来。这样的话随着路由器数量变得很大,涉及路由选择信息的通信,计算和存储的开销将高的不可实现。因特网是ISP的网络,其中每个ISP都有它自己的路由器网络。ISP通常希望按自己的意愿运行路由器,或对外部隐藏其网络的内部组织面貌。在理想情况下,一个组织应当能够按照自己的意愿运行和管理其网络,还要能将其网络与其他外部网络连接起来。 这两个问题都可以通过路由器组织进自治系统(Autonomous System, AS)来解决。其中每个AS由一组通常处于相同管理控制下的路由器组成。 在相同AS中的路由器都运行相同的路由选择算法并且有彼此的信息。在一个自治自制系统内运行的路由选择算法叫做自治系统内部路由选择协议(intra-autonomous system routing protocol)
1:开放最短路优先(OSPF) 开放最短路优先(OSPF):OSPF是一种链路状态协议,他使用洪泛链路状态信息和Dijkstra算法。使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图。每台路由器在本地运行Dijkstra算法以确定一个以自身为根节点到所有子网的最短路径树。使用OSFP时路由器向自治系统(AS)内所有其他路由器广播路由选择协议,每当一条链路状态发生变化时候,路由器就会广播链路状态信息。即使状态未发生变化也会每隔30min广播一次状态。
优点:
- 安全性:能够鉴别OSPF路由器之间的交互。使用鉴别仅有受信任的路由器参与一个AS内的OSPF协议,因此可以防止恶意入侵者将不正确的消息注入路由器表内。一般的OSPF鉴别可以被伪造,所以加入了MD5进行保护。
- 多条相同开销的路径:当到达某目的地具有相同的开销路径时,OFPS允许使用多条路径。
- 对单播与多播路由选择的综合支持:多播对OFPS的简单扩展,以便提供多播路由选择。
- 支持在单个AS中的层次结构:一个OSPF自治系统能够层次化地配置多个区域,每个区域都运行自己的OSPF链路状态链路选择算法,区域内的每台路由器都向该区域内的所有其他路由器广播其链路状态。一台或多台便捷路由器负责向流向该区域以外的分组提供路由选择,最后在AS中只有一个OSPF区域配置成主干区域,为该AS中其他区域之间的流量提供路由选择。
八、因特网中自治系统之间的路由选择:BGP
边界网关协议(Broder Gateway Protocol、BGP):一个运行在AS之间的路由选择协议。它协调因特网中数以万计的ISP。OSPF是一个AS内部的路由选择协议。
1:BGP的作用 在BGP中,分组并不是路由到一个特定的目的地址,相反是路由到CIDR化的前缀。其中每个前缀表示一个子网或一个子网的集合。在BGP的世界中,一个目的地可以采用138.16.68/22的形式,对于这个例子来说包括1024个IP地址。
作为一种AS间的路由选择协议,BGP为每台路由器提供了一种完成以下任务的手段:
- 从邻居AS获得前缀的可达性信息:BGP允许每个子网向因特网的其余部分通告它的存在。
- 确定该前缀的最好路由:一条路由器可能知道一条或者多条特定前缀的不同路由,为了确定最好的路由,路由器本地运行了一个BGP路由选择过程。
2:通告BGP路由信息 如上图所示,这个简单的网络具有三个自治系统AS1、AS2、AS3。如显示的那样,AS3包括一个具有前缀x的子网。对于每个AS,每台路由器要么是一台网关路由器(gateway router),要么是一台内部路由器(interal router)网关路由器是一台位于AS边缘的路由器,它直接连接到其他AS中的一台或者多台路由器。内部路由器仅连接它自己AS中的主机和路由器。跨越两个AS的连接称为外部BGP连接,而在相同AS中的两台路由器之间的BGP会话称为内部BGP连接。在AS1中路由器1c是网关路由器,路由器1a、1b、1d都是内部路由器。
举个🌰
如图所示的所有路由器对于前缀x的可达信息:首先AS3向AS2发送一个BGP报文,告知x存在并且位于AS3中;我们将该报文表示为“AS3 x”。然后AS2向AS1发送一个BGP报文,告知x存在并且能够先通过AS2然后进入AS3进而到达x;我们将该报文表示为“AS2 AS3 x”。以这种方式,每个自治系统不仅知道x存在,而且知道通向x的自治系统的路径。
在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息。每条直接连接以及所有通过该连接发送的BGP报文,称为BGP连接(BGP connection)。此外,跨越两个AS的BGP连接称为外部BGP(eBGP)连接,而在相同AS中的两台路由器之间的BGP会话称为内部BGP(iBGP)连接。
举个🌰
当使用了iBGP和eBGP后,网关路由器3a先向网关路由器2c发送一个eBGP报文“AS3 x”。网关路由器2c然后向AS2中的所有其他路由器(包括网关路由器2a)发送iBGP报文“AS3 x”。网关路由器2a接下来向网关路由器1c发送一个eBGP报文“AS2 AS3 x”。最后,网关路由器1c使用iBGP向AS1中的所有路由器发送“AS2 AS3 x”。在这个过程完成后,在AS1和AS2中的每个路由器都知道了x的存在并且知道了通往x的AS路径。
3:确定最好的路由 在真实网络中,从一个给定的路由器到一个目的子网可能有多条路径,因此我们就要确定最好的路由。
在处理这个问题之前,我们需要了解一些BGP的属性:
- AS-PATH:包含了通告已经通过的AS的列表,在前面的🌰中,为了生成AS-PATH的值,当一个前缀通过某AS时,该AS将ASn加入到AS-PATH的列表中。BGP路由器还使用AS-PATH属性来检测和防止通告环路;特别是,如果一台路由器在路径列表中看到包含了自身的AS,他将拒绝该通告。
- NEXT-HOP:在AS间和AS内部路由选择协议之间提供关键链路。NEXT- HOP是AS-PATH起始路由器的接口地址。
(1)热土豆路由选择:对于路由器1b,尽可能快地将分组发送出其AS(最低开销),而不关心其AS外部到目的地的余下部分开销。
(2)路由器选择算法: 1.路由器被指定一个本地偏好值作为其属性之一。一条路由的本地偏好可能由该路由器设置或可能由在相同AS中的另一台路由器学习到。本地偏好属性的值是一种策略决定,它完全去决定于该AS的网络员。具有最高本地偏好的路由将被选择。 2.如果所有本地偏好值都相同,那么选择最短的AS-PATH的路由。 3.如果1和2都相同,那么使用热土豆路由选择,选择最靠近 NEXT-HOP的路由器路由。
4:IP任播 BGP还被用于IP任播服务,该服务用于DNS中。IP任播被DNS系统广泛用于将DNS请求的指向最近的根DNS服务器。
九、SDN(软件定义网络)控制平面
SDN控制平面即控制分组在网络的SDN使能设备中转发的网络范围逻辑,以及这些设备的和他们的服务的配置与管理,网络中转发设备称为分组交换机。根据网络层源/目的地址、链路层源/目的地址以及运输层、网络层和链路层中的分组首部做出转发决定。
SDN体系结构具有以下四个特征:
- 基于流的转发:SDN控制的交换机分组转发工作,能够基于运输层、网络层或者链路层首部中任意数量的首部字段值进行。分组转发规则被精确规定在交换机的流表中,SDN控制平面工作是计算、管理和安装所有网络交换机中的流表项。
- 数据平面和控制平面分离:数据平面由网络交换机组成,交换机是相对简单的设备,该设备在他们的流表中执行匹配加动作的规则,控制平面由服务器以及决定和管理交换机流表的软件。
- 网络控制功能:位于数据平面交换机外部。控制平面由两个组件组成:一个是SDN控制器(网络操作系统),一个是网络控制应用程序。控制器维护准确的网络状态信息,为运行在网络控制平面的应用程序提供信息和方法。应用程序通过这些方法来进行监视、编程和控制下面的网络设备。
- 可编程的网络:通过运行在控制平面中的网络控制应用程序,该网络是可编程的。使用了由SDN提供的API来定义和控制网络设备中的数据平面。
1.SDN控制平面:SDN控制器和ADN网络控制应用程序 下图是SDN控制器的组件 通信层:SDN控制器和受控制网络设备之间的通信,如果SDN控制器要控制远程SDN使能交换机、主机或其他设备的运行,需要一个协议来传送控制器与这些设备之间的信息。此外设备必须向SDN控制器传送本地观察到的事件,这些事件向SDN控制器提供网络状态的最新试图。这个协议构成了控制器体系结构的最底层。这个协议是图中的南向API。
网络范围状态管理层:由SDN控制平面所做出的最终控制决定,将要求控制器具有有关网络的主机、链路、交换机和其他SDN控制设备的最新状态信息。既然控制平面的终极目的是用于控制设备的流表,那么控制器也可以维护这些表的拷贝。这些信息都构成了由SDN控制器维护的网络范围状态的例子。
对于网络控制应用程序层的接口:控制器通过北向接口与网络控制应用程序交互。该API允许网络控制应用程序在状态管理层之间读/写网络状态和流表,当状态改变事件出现时应用程序能够注册进行通告。
2.OpenFlow协议 OpenFlow是一种网络交换模型,OpenFlow交换机由FlowTable(流表)、SecureChannel(安全通道)和OpenFlowProtocol(协议)三部分组成。OpenFlow交换机是整个OpenFlow网络的核心部件,主要管理数据层的转发。它运行在TCP之上默认端口6653。
从控制器到受控交换机流动的主要报文有:
- 配置:该报文允许控制器查询并设置交换机的配置参数。
- 修改参数:由控制器增加/删除或修改交换机流表中的表项,并设置交换机端口特性。
- 读状态:控制器用于从交换机的流表和端口收集统计数据和计数器的值。
- 发送分组:控制器用于在受控交换机从特定的端口发送一个特定的报文
- 流删除:该报文通知控制器已经删除一个流表项。
- 端口状态:向控制器通知端口变化。
- 分组入:将分组发送给控制器。
3.ICMP:因特网控制报文协议 ICMP:被主机和路由器用来彼此沟通网络层信息,ICMP经典用途是差错报告。例如http中网络不可达这类的错误报告。ICMP从体系结构上讲位于IP之上,因为ICMP报文是承载在IP分组中的。同样IP数据报可以分解出数据报内容给ICMP。ICMP有一个类型字段和一个编码字段,包含引起该ICMP报文首次生成的IP数据报的首部和前8个字节。我们所知道的ping命令就是发送了一个ICMP类型8编码0的报文到指定主机,然后看回显请求,目的主机发回一个ICMP类型0编码0的ICMP回显回答。 ICMP报文类型表图如下:
ICMP类型 | 编码 | 描述 |
---|
0 | 0 | 回显回答(对ping的回答) | 3 | 0 | 目的网络不可达 | 3 | 1 | 目的主机不可达 | 3 | 2 | 目的协议不可达 | 3 | 3 | 目的端口不可达 | 3 | 6 | 目的网络未知 | 3 | 7 | 目的主机未知 | 4 | 0 | 源抑制(拥塞控制) | 8 | 0 | 回显请求 | 9 | 0 | 路由器通告 | 10 | 0 | 路由器发现 | 11 | 0 | TTL过期 | 12 | 0 | IP首部损坏 |
4.网络管理和SNMP 网络管理:网络管理包括硬件、软件和人类元素的设置、综合和协调,以监视、测试、轮询、配置、分析、评价和控制网络以及网元资源,用合理的成本满足实时性、运营性和服务质量的需求。
网络管理组件:
管理服务器:它是一个应用程序,通常有人参与,并运行在网络运营中心(NOC)的集中式网络管理站上,它是执行网络管理活动的地方,它控制网络管理信息的收集、处理、分析和显示。发起控制网络行为的动作。
被管设备:网络装备的一部分,位于被管理的网络中,可以是一台主机、路由器、交换机等联网设备。这些被管设备实际被管对象是设备中的硬件部分和硬件及软件的组成部分。
管理信息库(MIB):一个被管设备中的每个被管对象的管理信息收集地。这些信息可被管理信息服务器所用。
网络管理代理:运行在被管设备中的一个进程,该进程与管理服务器通信,在管理服务器的命令和控制下在被管设备中采取本地动作。
网络管理协议:运行在网络管理服务器和被管设备之间,允许服务器查询被管设备的状态,并经过代理间接地在这些设备上采取动作。
SNMP:简单网络管理协议: 它是一个应用层协议,用于管理服务器和代表管理服务器执行的代理之间传递网络管理控制和信息报文。SNNP最常用的是请求响应模式,其中SNMPP管理服务器向SNMP 代理发送一个请求,代理收到请求之后执行谋些动作。然后该请求发送一个回答。请求通常用于查询或修改某个被管设备关联的MIB对象值。还有一个用途是代理向管理服务器发送一种非请求报文该报文称为陷进报文,用于通知管理服务器有异常情况导致MIB对象值已改变。
啊啊,越到后面越写不进去了,先更新上,以后再补全吧!
|