网络层
功能
向上提供简单灵活、无连接、尽最大可能努力交付的 数据报服务,这使得网络中的路由器比较简单,其可靠性可由更高层的传输层负责。
其主要功能有:异构网络互联、路由与转发、 和拥塞控制。
异构网络互连
为了使全球各不相同的网络连接起来,并能够通信,要解决很多问题,如不同的寻址方案、不同的网络接入机制、不同的差错处理方法、不同的路由选择机制等;网络互联主要通过中继系统实现:
- 物理层:转发器、集线器;
- 数据链路层:网桥、交换机;
- 网络层:路由器;
- 网络以上:网关。
使用物理层或数据链路层只是将网络扩大了,从网络层来看,实际上还是一个网络;
由于历史原理,很多有关 TCP/IP 的文献也将路由器称为网关。
路由器由于互联多个网络,因此其不仅具有多个 IP 地址,也有多个硬件地址。
TCP/IP 体系在网络互联上的做法是在网络层采用标准化协议,但是相互连接的网络可以是异构的;异构的计算机网络都采用相同的 IP 协议,形成一个虚拟 IP 网络,可以视为逻辑互联网络。
路由与转发
路由器主要完成两个功能:一是路由选择,二是分组转发;前者根据特定的路由选择协议构造、更新维护路由表,后者进行转发表查询、转发及相关的数列管理和任务调度等。
SDN
网络层可以被抽象的划分为 数据平面(转发层面)和控制层面,前者实现转发,后者实现路由选择。
软件定义网络()是近年流行的一种创新网络架构,采用集中式的控制平面和分布式的数据平面,两个平面相互分离,控制平面利用相应接口实现对数据平面上的路由器进行集中控制。
传统互联网中,每个路由器即有转发表又有路由选择软件,而在 中,不再需要路由选择软件,通过一个逻辑上的远程控制器(可以由多个服务器组成),掌握各主机和整个网络的状态,为每个分组计算出最佳路由。
然而这样网络又变为了集中式控制,互联网本身是分布式的,SDN 的集中控制模式在某些条件下,特别是像一些 大型数据中心之间的广域网,可以使网络运行效率更高。
为开发者提供强大的编程接口,其对控制层面的接口被成为 北向接口,对数据层面的接口是 南向接口。
的优点如下:
- 全局集中式控制和分布式高速转发,有利于控制平面的全面优化,又有利于高性能的网络转发;
- 灵 活可编程;
- 降低成本,实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。 问题如下:
- 安全风险,容易遭受攻击,导致整个网络受到影响;
- 随着网络规模增大,控制器可能成为网络性能的瓶颈。
拥塞控制
通信子网中因为过量的分组而导致网络性能下降的现象被称为 拥塞;当分组到达路由器的速率接近上限时,会导致时延大幅增加,大量分组被 丢弃,因为路由器的缓存空间有限,整个网络的吞吐量骤降。
判断网络是否拥塞可以观察 网络吞吐量与网络负载的关系,若随着网络负载增加,其吞吐量明显小于正常吞吐量,则可能发生了轻度拥塞;若大幅下降则可能进入拥塞状态;若下降到 0, 则可能已进入死锁。
为了避免拥塞的出现,就叫拥塞控制。
流量控制和拥塞控制的区别是前者往往是对点对点通信的控制,以便双方的传输速率相匹配;后者是一个全局性问题,设计网络中的所有主机路由器等,主要用两种方法:
- 开环控制,设计网络时就考虑到所有相关因素,静态预防,一旦系统运行就不再修改,不考虑当前的网络状态;
- 闭环控制,事先不考虑任何因素,采用监测系统,基于反馈环路,动态调整。
路由算法
静态路由和动态路由
前者指管理员手动配置路由信息,不能及时适应不断变化的网络,主要用于小型网络;开销较小,在拓扑变化不大的网络中运行良好;
后者指路由表项通过相互连接的路由器之间比起交换信息,随时获得最优的寻路效果;有助于改善网络性能和流量控制,但是算法复杂,开销大,常用的动态路由算法有两种:
- 距离 - 向量路由算法,所有结点定期地将他们的整个路由选择表传送给所有与之直接相邻的结点,其中包括每条路径的目的地及其带代价(距离,比如 RIP 算法每经过一个路由器就加一);如果接收到一条新的路由,并且在本结点的路由表中不存在,则加入;若已存在,则使用代价更小的路由;
- 链路状态路由算法,要求每个结点都有完全的网络拓扑信息,主动测试邻接结点的状态,并且定期将链路状态传播给所有其他结点;TODO
层次路由
随着挽留过规模增大,为了防止路由表过大,将路由选择按照层次进行;因特网将整个互联网分为很多较小的自洽系统(包含很多局域网),路由选择协议被分为:
- 内部网关协议(),也叫域内路由选择,有 、 等;
- 自洽系统间使用的外部网关协议(),也叫域间路由选择,用于不同系统间的路由器交换路由信息,有 等。
IPv4
IPv4 分组
定义了数据传送的基本单元——IP 分组及其确切格式,同时包含了一套规则,指明如何处理分组和控制错误等;尤其是其还包含了 非可靠投递 的思想,以及与此相关的分组路由选择的思想。
分组格式
首部,分为两部分,前一部分长度固定为 ;可选字段,长短可变,可以提供错误检测及安全等机制;
- 首部中有 位的版本和首部长度,最大可表示的十进制数是 ,若没有可选字段,则其值为 ,最长可表示 ;
- 总长度,占 位,首部和数据之和的长度,单位为 字节,因此数据报的最大长度为 ;以太网帧的最大传送单元()为 ,许多广域网不超过 , 因此 IP 数据报封装为帧的长度不可超过下层数据链路层的 ;
- 标识, 位,是一个计数器,每产生一个数据报就加一,但是其并不是序号(因为 IP 是无连接服务),当数据报长度超过网络的 时,必须分片,每片都会复制标识字段,保证能正确重装为原来的数据报;
- 片偏移, 位,指出分片后在原分组中的相对位置,单位是 八个字节,因此除了最后一个非分片,每个分片都一定是 的整数倍;
- 生存时间, 位,数据报在网络中可通过的路由器数的最大值,标识分组在网络中的寿命,确保分组不会永远在网路中循环;
- 协议, 位,指出携带的数据使用何种协议,如 和 等,分别以 和 表示;
- 首部校验和, 位,只检验首部;
- 源地址字段和目的地址地段,,标识发送方和接收方 地址;
IP 数据报分片
首部中标识位占 位,在标识和片偏移之间; 位中只有后 位有意义, 和 位,分别表示 ,,只有 时,才可以被分片, 表示是最后一个片。
每台连接到因特网的主机都分配一个 32 比特的唯一标识,即 IP 地址,由 ICANN 进行分配;早期采用的是分类的 IP 地址:
此外还有一些特殊的 IP 地址:
- 主机号全为 0,指的是网络本身,如 202.98.174.0;
- 主机号全为 1,广播地址,又称直接广播地址;
- 127.x.x.x,环回自检地址,表示任意主机本身,目的地址为环回地址的数据包永远不会出现在任何网络上;
- 0.0.0.0 表示本网络上的本主机;
- 255.255.255.255 表示本网络上的广播地址,又称受限广播地址,实际使用时,由于路由器对广播域的隔离,等效于本网络的广播地址。
这样的好处是 IP 地址管理机构只需要分配网络号,而主机号则由对应网络分配;路由器仅根据主机所连接的网络号来转发分组,而 不必考虑主机号。
IP 地址是 标志一台主机和一条链路的接口吗,当一台主机同时连接到两个网络时,该主机就必须具有两个相应的 IP 地址;使用转发器或桥接器时,连接的若干 LAN 仍然是同一个网络,因为其中所有主机的 IP 地址的网络号都相同。
网络转换地址 NAT
NAT 可以将专用网络地址转换为公用网络地址,从而 对外隐藏内部管理的 IP 地址,它使得专用网只需要一个全球 IP 地址就可以与因特网连通,专用网内部的 IP 地址可以重用,大大节省了 IP 地址的消耗,同时隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。
为了网络安全,划分除了私有 IP 地址,只用于 LAN,若要连接 WAN,NAT 需要对私有 IP 进行转换才行;并且允许私有 IP 地址可以被 LAN 重复使用。私有地址有
因特网中的所有路由器,对于目的地址是私有地址的数据一律不进行转发,这种采用私有地址的互联网被称为专用互联网或本地互联网。
在连接专用网和因特网的路由器中安装 NAT 软件,并且要至少有一个有效的外部全球 IP;通信时,通过 NAT 转换表进行本地 IP 和全球 IP 的转换,多个私有地址可以映射到同一个全球地址,如一个宿舍共同办理宽带,获得了一个全球 IP 地址,而宿舍内的各种机器分配了不同的私有地址。
子网划分与子网掩码、CIDR
两级划分的利用率有时很低并且不够灵活,当每个物理网络分配一个网络号会使路由表太大。因此增加了一个 子网号字段,变为了三级 IP 地址,称为 子网划分,思路如下:
- 子网划分属于单位内部的事情,对外仍然表现为没有划分的形式;
- 从主机号借用若干位作为子网号;
- 路由器通过子网号找到目的子网。
一开始规定 IPv4 的子网号不能全 1 或 0,但随着 CIDR 的广泛使用,全 1 和全 0 的子网号也可以使用,但要慎重,确保路由器支持。全 0 表示子网的网络号,全 1 表示子网广播地址。
使用 子网掩码 告诉主机或路由器进行了子网划分,其是一个 32bit 的二进制串,与 IP 地址逐位与运算,得出相应的子网地址。
未进行子网划分则使用默认的子网掩码,ABC 类默认的子网掩码是 。
使用子网掩码的情况下:
- 主机设置 IP 地址的同时还要设置子网掩码;
- 同属一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码;
- 路由器的路由表中,所包含信息的主要内容有目的网络地址、子网掩码、下一跳地址。
无分类编址 CIDR
在变长子网掩码的基础上提出的一种消除 ABC 分类网络划分、并且可在软件支持下实现 超网构造 的一种 IP 地址的划分方法。
比如一个网络需要 2000 个地址,那么就给它分配 2048 个地址(相当于 8 个 C 类地址),而不是一个完全的 B 类地址,依次减小路由表大小。
CIDR 使用网络前缀的概念代 替子网络的概念,前缀可以取任意位数,而掩码就是为了取得前缀所代表的网络号;前缀相同的地址组成 地址块,一个地址块可以表示很多地址,称为 路由聚合,或 构成超网,使得路由器中的一个项目可以表示多个原来传统分类地址的路由。
最长前缀匹配,路由表项又网络前缀和下一跳地址组成,查找路由表时可能会得到不止一个结果,此时应该选择有最长网络前缀的路由,因为前缀越长,地址块就越小,路由就越具体。
为了更有效的检索最长前缀匹配,通常使用二叉线索树。
ARP, DHCP 和 ICMP
地址解析协议(ARP),工作在网络层,将 IP 地址到 MAC 地址的映射,每台主机有一个 高速缓存,存放本局域网上各主机和路由器的 IP 到 MAC 的 表。
如果要找的主机不在局域网,需要通过 找到路由器转发; 的请求分组是广播转发,但是响应分组是单播。
动态主机配置协议(DHCP),提供了即插即用的联网机制,允许主机加入新的网络和获取 IP 地址而不用手工参与,是 应用层协议,基于 ,因为不知道地址, 需要建立连接;使用客户/服务器模式,需要 IP 地址的主机启动时向 服务器广播 发现报文(源地址 ,目的地址 ),成为 客户;服务器在数据库中查找,若能找到则返回,找不到则从 IP 地址池中取一个地址分配,该回答保温被称为 提供报文(源地址为服务器地址,目的地址为 ),如果主机接受,广播 DHCP 请求(源地址 ,目的地址 ),此时服务器广播 DHCP 确认(源地址服务器地址,目的地址 )。
该分配是临时的,因此有 租用期,可以由服务器决定,或者客户在发送报文中提出对租用期的要求。
网际控制报文协议(ICMP),目的提高 IP 数据报交付的成功率,工作在网络层,让主机和路由器报告差错和异常情况;ICMP 报文有两种:
- 差错报告报文,有 5 种常用类型:
- 终点不可达;
- 源点抑制,当路由器或主机由于拥塞丢弃数据报时,可以向源点发送抑制保温,降低发送速率;
- 时间超过,接收到生存时间为 0 的数据报,除丢弃外,还要向原点发送时间超过报文;或是终点在预先的规定时间内不能受到一个数据报的全部分片时,会丢弃,并向源点发送时间超过;
- 参数问题,首部中字段错误;
- 改变路由(重定向),路由器将改变路由报文发送给主机,让其知道下次发送时应该将数据报发送给另外的路由器。
- 询问报文:
- 回送请求和回答报文;
- 时间戳请求和回答报文;
- 地址掩码请求和回答报文;
- 路由器询问和通告报文;
某些情况不应该发送 ICMP 报文:
- 对 ICMP 差错报告报文不应再发送差错报文;
- 对第一个分片的数据报分片之后的所有的分片不再发送;
- 有组播地址的数据报;
- 有特殊地址的,如 。
最常用的功能就是分组网间探测 和 ,前者使用回送请求和回答报文,后者使用时间超过报文。
工作在应用层,直接使用网络层的 ,而不是传输层的 和 , 则工作在网络层。
IPv6
解决 IP 地址耗尽的措施有以下三种:
- 采用无类别编址 CIDR;
- 采用网络地址转换 NAT 节省 IP;
- 采用更大地址空间的新版本的 IPv6;
IPv6 的主要特点如下:
- 更大的地址空间,增长到了 128 位,16B, 而 v4 只有 4B ;
- 扩展的地址层次结构;
- 灵活的首部格式;
- 改进选项;
- 允许协议继续扩充;
- 支持即插即用,自动配置;
- 支持资源的预分配;
- 只有在源结点才能分片,端到端;而 v4 可由路由器分片;
- 首部必须是 8B 的整数倍,v4 的首部是 4B 的整数倍;
- 增大了安全性,身份验证和保密功能;
简化了 IP 分组头,包含 8 个域(v4 12 个),能使路由器更快出处理分组;更好地支持选项,之前的一些必要段变为了可选项,有助于加快分组处理速度。
地址
其目的地址可以是以下三种类型之一:
- 单播,点对点;
- 多播,一对多;
- 任播,新增类型,目的站是一组计算机,交付时之交付其中一台机器,通常是距离最近的。
同时拓展了分级:
- 顶级指明全球都知道的公共拓扑;
- 第二级场点级指明单个场点级;
- 第三级指明单个网络接口 便于路由器更快地查找路由。
从 v4 向 v6 过度可以使用双协议栈或者隧道技术,前者指同时安装两种协议栈,后者指将 v6 的数据报文存在 v4 报文中。
路由系统
自洽系统(Autonomous System,AS):单一技术管理下的一组路由器,使用一种 AS 内部的路由选择协议和共同度量来确定分组在该 AS 内的路由,同时使用一种 AS 之间的路由选择协议确定 AS 之间的路由;一个自洽网络内的所有网络都有一个行政单位管辖,内部的所有路由器都是连通的。
系统内部的路由选择被称为 域内路由选择,自洽系统之间的路由选择被称为域间路由选择;因特网有两大类路由选择协议:
- 内部网关协议(IGP),在系统内部使用的,常用的 RIP,OSPF;
- 外部网关协议 (EGP),系统间使用,常用有 BGP-4。
路由信息协议(RIP)
内部网关协议,基于距离向量的路由选择协议,简单;
路由器内部维护自身到其他每个目的网络的距离记录,这一组记录被称为 距离向量;距离也就是 跳数,每经过一个路由器,距离加一,但一条路径最多只能包含 15 个路由器,因此 RIP 只适用于小型互联网,这实际上是为了防止数据报在环路上不断循环。
默认每三十秒在两个使用 RIP 的路由器之间广播一次更新信息,动态维护路由表;RIP 中不支持子网掩码的 RIP 广播,因此每个网络中的子网掩码必须相同,但是 RIP2 中是支持变长子网掩码和 CIDR.
特点:
- 仅和相邻路由器交换信息;
- 路由器交换的信息是当前路由器所知道的全部信息,即自己的路由表;
- 定时交换。
距离向量算法:路由表项有三个关键数据,目的网络、距离、下一跳路由器地址,当相邻路由器发送 RIP 报文时:
- 若报文原地址为 X,则将报文下一跳地址都改为 X,再将距离都加一,表示从当前路由器,到表中不同网络的距离;
- 若报文中有当前路由表没有的项,则添加进来;
- 若已有相同的项,则认为报文中的是更新消息,更新;
- 若有 180s 没有受到相邻路由器的信息,则认为其不可达,距离设置为 16。
缺点:
- 限制了网络的规模;
- 交换完整路由表,网络越大,开销越大;
- 网络出现故障时,会出现慢收敛现象,需要较长时间才能将此信息传递给所有路由器,俗称 坏消息传得慢。
开放最短路由优先(OSPF)协议
使用分布式链路状态的典型代表,也是 IGP 的一种,与 RIP 相比有四点区别:
- 向本自洽系统中的所有路由器发送信息,使用的洪泛法;
- 发送的信息是本路由器所有相邻路由器的链路状态,但只是路由器所知道的部分;链路状态说明了本路由器和那些路由器相邻,以及链路的度量;
- 只有链路状态变化时,路由器才会使用洪泛法更新;并且更新过程收敛快;
- 网络层协议,不使用 UDP 或 TCP, 而是用 IP 数据报,RIP 是应用层协议,在传输层使用 UDP。 此外:
- 对不同链路可根据 IP 分组的不同类型(TOS)而设置不同的代价,从而有不同的路由,十分灵活;
- 如果到同一个目的网络有多条相同代价的路径,可以将通信量分配,从而实现 多路径间的负载平衡;
- 路由器之间交换的分组都有鉴别功能;
- 支持可变长度的子网划分和五分类编址 CIDR;
- 每个链路状态都带上一个 32 位的序号,序号越大,状态越新。
所有路由器最终会建立一个链路状态数据库,相当于全网的拓扑结构图;最短路径使用 Dijkstra 算法,但是每个路由器只知道下一跳地址。
为了使 OSFP 用于大规模网络,将一个自洽系统划分为若更小的范围;并且有层次之分。
有五种分组类型:
- 问候分组,发现和维持邻站的可达性;
- 数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息;
- 链路状态请求分组,相对法请求发送某些链路状态项目的详细信息;
- 链路状态更新分组,使用洪泛法更新;
- 链路状态确认分组,对链路更新分组的确认。
通常每隔十秒相邻的路由器就要交换一次问候分组,并维持数据库更新,达到同步后也需要不断更新。
边界网关协议(BGP)
边界网关协议用于不同自洽系统的路由器交换信息,是一种外部网关协议;难点如下:
- 因特网规模太太,自洽系统间的路由选择十分苦 难;
- 寻找最佳路由是很不现实的;
- 路由选择必须考虑有关策略。
BGP 只能力求寻找一条能够到达目的网络且比较好的路由,而非寻找一条最佳路线;其基于路径向量选择协议,属于应用层协议,基于 TCP。
原理为:
-
建立 BGP 会话:
- TCP 连接:BGP 作为基于 TCP 的协议,首先在两个 BGP 对等体之间建立一个可靠的 TCP 连接。这通常发生在端口号 179 上。
- 交换 Open 报文:一旦 TCP 连接建立,BGP 对等体之间会交换 Open 报文。这个报文包含了诸如自治系统号(ASN)、BGP 版本号、持有时间(Hold Time)等信息,用于初始化会话。
- 确认连接:如果 Open 报文被接受,对等体会发送 Keepalive 报文来维持连接。如果在 Hold Time 内没有收到 Keepalive 报文,连接将被认为已经断开。
-
交换路由信息:
- Update 报文:一旦 BGP 会话建立,对等体将通过 Update 报文交换路由信息。这些报文包含了可达性和不可达性信息,以及与路由相关的属性。
- 路由属性:BGP 路由属性提供了关于路由的详细信息,如起源类型(Origin)、AS 路径(AS-Path)、下一跳(Next Hop)等。
- 路由选择:每个 BGP 对等体根据其路由策略和属性来选择最佳路由。这包括比较路径的偏好、路径长度、起源验证等因素。
-
路由决策和传播:
- 最佳路径选择:BGP 使用一系列路由选择标准来确定到达目的地的最佳路径。这些标准包括最短的 AS 路径、最低的 MED 值、最近的下一跳等。
- 传播最佳路径:一旦确定了最佳路径,BGP 对等体将通过 Update 报文将这些信息传播给其他 BGP 邻居。
-
维护和故障恢复:
- Keepalive 和 Notification 报文:BGP 对等体定期发送 Keepalive 报文以维持会话。如果检测到错误或不兼容的路由信息,将发送 Notification 报文来终止会话。
- 重新连接:如果 BGP 会话断开,BGP 对等体将尝试重新建立连接。
-
路由聚合:
- 自动聚合:BGP 可以自动将具有相同前缀但不同长度的路由聚合成一个更长的前缀,以减少全局路由表的大小。
- 手动聚合:网络管理员可以手动定义聚合规则,以聚合特定的路由前缀。
-
多协议扩展(MP-BGP):
- 支持多种地址族:MP-BGP 允许 BGP 支持多种网络层协议,如 IPv4、IPv6、组播等。
- 地址族视图:每种地址族都有自己的视图,BGP 对等体可以在这些视图中交换相应的路由信息。
IP 组播
为了支持像视频颠簸和视频会议这样的应用,网络必须实现有效的组播机制;组播一定仅应用于 UDP。
因特网中的 IP 组播也使用组播组的概念,每个组都有一个特别分配的地址,要给该组发送的计算机将使用这个地址作为分组的目标地址,v4 中在 D 类地址空间分配,v6 中也有分配。
主机使用 IGMP(因特网组管理协议) 加入组播组,主机组播仅发送一份数据,只有数据传送出现分叉时,才将分组复制并继续转发。
IP 组播地址:首部的协议字段值是 2,表明使用 IGMP,需要注意:
- 尽最大努力交付;
- 只用于目的地址,不用于源地址;
- 不才生 ICMP 差错报文,因此永远 ping 不通;
- 并非所有 D 类地址都可作为组播地址。
移动 IP
以固定的网络 IP 地址实现跨越不同网段的漫游功能,并保证基于网络 IP 的网络权限在漫游过程中不发生任何改变。
移动 IP 中每个移动站都有一个 永久地址(即归属地),原始连接的网络是 归属网络;归属代理通常是连接到归属网络上的路由器,然而它实现的代理功能是在应用层完成的。
当移动战移动,所接入的网络被称为被访网络,其中使用的代理是外地代理,通常是连接在被访网络上的路由器,外地代理的作用:
- 为移动站创建一个临时的转交地址,称为 转交地址,网络号和被访地址一致;
- 及时将转交地址告诉其归属代理;
移动 IP 技术的基本通信流程如下:
- 在归属网络时,按照传统的 TCP/IP 进行通信;
- 漫游到外地网络时,向外地代理登记获得临时的转交地址;
- 归属代理构建通向转交地址的隧道,将对应的 IP 分组封装,通过隧道发送外地代理;
- 外地代理拆封,发送给移动站;
- 移动站在被访网络发送数据报时,仍然使用永久地址作为源地址,直接通过被访网络的发送;
- 移动站回到归属网络时,移动站向归属代理注销转交地址。
外地代理向移动站发送数据报时,直接使用其 MAC 地址。
网络层设备
冲突域和广播域
前者是连接到统一物理介质上的所有结点的集合,存在介质争用的现象,后者是能接受同样广播消息的结点集合。
路由器的组成和功能
具有多个输入输出端口的专用计算机,其任务是连接不同的网络并完成路由转发;多个逻辑网络(即广播域)互连时必须要使用路由器,因此说路由器可以隔离广播域。
结构上,路由器由路由选择和分组转发构成;路由器是网络层设备,实现了网络模型的下三层——物理层、数据链路层和网络层。
路由器由以下部分构成:
- 路由选择部分(控制部分),根据所选定的路由选择协议构造路由表,并定期和相邻路由器交换路由信息;
- 分组转发,在物理层接受的比特流中提出数据链路层帧,再从帧中提取网络层数据报,发送则相反;
路由器是面向协议的,如 OSI、TCP/IP、IPX 等,而网桥与高层协议无关。
交换机具有集线器的功能,可以并行地在连接的主机中转发帧;若是连接相同的网络,可以使用很大的交换机代替路由器,但是如果是异构网络则不行。