网络层
文章目录
概述
网络层中进行数据交换的方法(两种计算机网络):
比较 | 数据报子网 | 虚电路子网 |
---|---|---|
电路 | 不需要建立 | 一定要建立 |
分组 | 包含完整的源地址和目的地址的信息独立寻径 | 包含一个很短的标号——VC号 |
路由 | 不需要保留任何连接状态 | 都要保留连接状态 |
路由失效影响 | 基本无影响 | 连接/数据传输中断 |
服务质量拥塞控制 | 很难实现 | 容易实现 |
网络层功能可以分为两个层面去看:
-
数据层面:转发(forwarding)
从路由器的输入链路向其输出链路转发数据报——使用转发表
-
控制层面:路由选择(routing)
确认路径——路由选择算法
-
传统方法:
路由器之间根据路由选择算法来通信(遵守路由选择协议),从而确定转发表
-
SDN方法:
软件定义网络(SDN)——远程控制器是用软件实现,故网络是”软件定义“的
路由器和远程控制器进行通信,远程控制器计算并分发转发表
-
网络服务模型
因特网的网络层提供单一的服务,称为尽力而为服务
数据层面
一、路由器工作原理
路由器的四个组件:
-
输入端口——硬件
-
交换结构——硬件
-
输出端口——硬件
-
路由选择处理器——软件(区分它在传统路由器和SDN路由器的执行方式)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rEd79JF-1678365382890)(https://raw.githubusercontent.com/liweiqi11111/picBed/main/img/202303021408333.png)]
1. 输入端口处理和基于目的地转发
执行终结入物理链路的物理层功能
执行数据链路层功能
执行查找功能
转发表的表项是IP地址的前缀而不是直接使用IP地址
路由器用分组目的地址的前缀与转发表中的表项进行匹配——最长前缀匹配原则
2.交换
把分组从输入端口交换到输出端口
-
经内存交换
现代路由器——输入线路卡而不是CPU:查找目的地址、将分组存储(复制)进输出端口的缓存中。
-
经总线交换
分组预先计划一个交换机内部标签,所有输出端口都能收到,但只有与该标签匹配的输出端口才能保存该分组
一次只有一个分组能够跨越总线
-
经互联网络交换
纵横式交换机
纵横式网络能够并行转发多个分组
非阻塞的——不会在输出端口阻塞
3. 输出端口处理
取出已经存放在输出端口内存中的分组并将其发送到输出链路上;
4.何时出现排队
丢包:随着路由器的队列的增长,路由器的缓存空间会被耗尽,导致分组丢失
-
输入排队
线路前部(HOL)阻塞——一个分组(即使它的输出端口空闲)因为它的前面的分组等待而等待;
输入队列溢出,会造成严重的丢包后果
-
输出排队
主动队列管理(AQM)算法
路由器缓存大小设计的经验方法:B = RTT(平均往返时延) * C (链路的容量)
5.队列中的分组调度策略
-
先进先出
-
优先级排队
-
循环和加权排队
分组被分成几类,不存在严格的优先级,循环调度器在这些类之间轮流提供服务;
遵循保持工作排队规则:在有(任何类的)分组排队等待传输时,不允许链路保持空闲
二、网际协议:IPv4、寻址、IPv6及其他
1.IPv4数据报格式
2. IPv4数据报分片
最大传送单元(MTU):一个链路层帧能承载的最大数据量
不同链路可能使用不同链路层协议(MTU可能不同)——需要数据报分片
为了使网络内核保持简单,数据报的重新组装工作放到端系统中——目的主机
关键:
IP数据报首部的标识(标识出片是否属于同一数据报) 标志(标志是否收到最后一片:flag=0表示是最后一片)片偏移(指定片应该放在初始IP数据报的哪个位置,以8字节为单位)
3.IPv4编址
32位的IP地址按点分十进制记法书写
地址分配策略:
-
方案1:分类编址
IP地址可以分为A、B、C、D、E五类地址:
-
方案2:无类别域间路由选择(CIDR)
子网地址a.b.c.d/x的x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀
CIDR按需分配IP地址,遏制了IP地址枯竭的趋势
CIDR控制、缩减了路由表的规模
- 可进行路由聚合,形成超网
CIDR还带来了额外的好处:隔离了路由翻动
地址匹配时采用最长前缀匹配原则
-
子网规划
子网规划的任务是通过向主机位借位来创建子网,把大网络划分为小网络
借位原则:从高位开始借,至少保留两位主机位
主机或子网如何获得地址?
-
获得一块地址
组织从ISP获取一组地址,而ISP和其他组织则向非盈利的ICANN组织获取IP地址块,ICANN还管理DNS根服务器。
-
获得主机地址:动态主机配置协议(DHCP)——“即插即用”
-
DHCP允许主机自动获取(被分配)一个IP地址
-
是一个客户-服务器协议(应用层),基于UDP
简单场合下:每个子网具有一台DHCP服务器,为连接到该子网的到达客户提供DHCP服务
DHCP协议是一个4步骤的过程(注意途中每个步骤的源和目的地址):
-
DHCP服务器发现
-
DHCP服务器提供
-
DHCP服务器请求
-
DHCP ACK
-
ICMP
互联网控制协议——用来报告意外的事件或测试互联网
ICMP消息格式:
-
应用1:ping
- 测试TCP/IP是否工作正常
- 网络设备是否正确
- 检查对外连接的路由器
- …
-
tracert命令——利用了错误报告的机制
通过ICMP数据报超时报文得到一张途经的路由器列表
网络地址交换(NAT)
也是32位的IP地址枯竭的权衡之计
地址空间10. 0. 0. 0/8是在[RFC 1918]中保留的三部分IP地址空间之一,这些地址用于如图中的家庭网络等私有网络或具有私有地址的地域;(realm with private address)具有私有地址的地域是指其地址仅对该网络中的设备有意义的网络。——私有地址不具有唯一性
NAT路由器:私有IP地址和公有IP地址之间的转换
这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的确是一个方便并得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致通信效率的降低。
实现:NAT转换表
4. IPv6
-
数据报格式
变化:
-
扩大的地址容量
-
40字节首部
-
流标签
给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流
-
从IPv4到IPv6的迁移
-
双协议栈
网络设备、服务器等必须支持双栈
-
隧道技术
IPv4分组搭载IPv6分组,反过来也可以
-
地址转换
适用于纯IPv4和纯IPv6的网络通信中
控制层面
路由选择算法
分类方式一:
全局式(用完整的、全局性的计算最短路径)
分散式(迭代、分布式的计算)
分类方式二:
静态,路由的变化非常缓慢,通常是人工干预来调整
动态,当网络流量负载或拓扑发生变化时动态发生改变
链路状态(LS)算法
全局式,使用链路状态广播算法获得网络图的信息
图论:Dijkstra算法
距离向量(DV)算法
迭代的、异步的、分布式
Bellman-Ford方程
层次路由选择
两个问题:
-
规模
路由器规模很大时,采用同样的路由选择算法开销会非常大(LS)或难以收敛(DV);
-
管理自治
不同组织可能对路由选择算法的意愿不同
解决:
将路由器组织进自治系统(AS),每个AS由一组通常处于相同管理控制下的路由器组成——它们都全部运行同样的路由选择算法;
在一个自治系统内运行的路由选择算法叫做自治系统内部路由选择协议
而为了将AS彼此互联,AS内有一些路由器需要负责向本AS之外的目的地转发分组,这些路由器被称为网关路由器,这样的过程遵循自治系统间路由选择协议,在因特网中就是BGP4
因特网中的路由选择
因特网中自治系统内部的路由选择
历史上有两个AS内部路由选择协议:RIP和OSPF
-
RIP
RIP是一种距离向量协议,使用跳数作为费用度量,即每条链路的费用为1;
路由选择更新信息在邻居之间使用RIP响应报文(也叫RIP通告)来交换——UDP
“好消息传的快,坏消息传得慢”:当正常更新路由信息时,速度快;但路由发生异常时,更新慢
RIP的主要问题:
无穷计数,产生路由环
解决:
一条路径的最大费用被限制为15;水平分割、毒性逆转、抑制定时器等
问题根源:“站的不高,看的不远”
-
OSPF
基于LS路由选择算法,以带宽为度量
AS被分为多个area(至少一个),其中有一个骨干区域,编号为0,每个区域运行OSPF称为单区域OSPF,有三个重要术语:
- Rounter ID:32位,自治系统内唯一
- IP分组中协议号为89,表示该分组为OSPF报文
- TTL=1:OSPF只传给邻居路由器
OSPF分为五步:
-
建立路由毗邻关系
互为全毗邻关系的两台路由器,它们内部的LSP数据库完全一致
-
选举DR和BDR
降低同步次数为n-1,DR(指定路由器)按优先级选举
-
发现路由
-
选择最佳路由
-
维护路由信息
因特网中自治系统间的路由选择
-
BGP
BGP中,分组的目的地址不是特定的IP地址,而是CDIR化的前缀,每个前缀表示一个子网或一个子网的集合。因此一台路由器的转发表将具有(x, I)的表项,x表示可通往的子网前缀,I表示转发的接口号。
BGP分两步进行:
-
路由器之间通告路径信息
BGP中,每对路由器通过使用179端口的半永久TCP连接来交换路径信息。每条直接连接以及所有通过该连接发送的BGP报文,称为 BGP连接(BGP connection):
- 外部BGP(eBGP)连接:跨越两个AS的BGP连接
- 内部BGP(iBGP)连接:同一个AS中的两台路由器之间的BGP连接
使用iBGP和eBGP会话来传播可达性消息。
-
确定最好的路由
路由器通告前缀时,在BGP报文中包括一些BGP属性:
-
AS-PATH
包含通告已经通过的AS的列表,例如下图从AS1到子网x:“AS2 AS3”或“AS3”
用来检测和防止通告环路(在路径列表中发现包含了自己,则拒绝通告)
-
NEXT-HOP
是AS-PATH起始的路由器接口的IP地址,图中已标出
-
在上面的例子中,AS1中的每台路由器都知道了到前缀x的两个BGP路径:
(NEXT-HOP : 路由器2a的最左侧接口的IP地址)+(AS-PATH : AS2 AS3; x)
(NEXT-HOP : 路由器3d的最左侧接口的IP地址)+(AS-PATH : AS3; x)
-
热土豆路由选择——“烫手的山芋”,“自私”
考虑路由器1b。1b学习到了到达前缀x的两条BGP路径。现在,1b可以选择到达NEXT-HOP路由器2a,也可以选择到达NEXT-HOP路由器3d,根据热土豆路由选择,它将首先选择2a, 因为它在自己的AS中具有最小开销的
因此,如果将开销定义为穿越的链路数,则1b将选择路由器2a。
-
BGP路由选择——不再“自私”
在实践中,BGP使用了一种比热土豆路由选择更复杂但结合了其特点的算法。如果到相同的前缀有两条或多条BGP路径,则顺序地调用下列消除规则直到余下一条:
1)路由被指派一个本地偏好(local preference)值作为其属性之一(除了 AS-PATH和 NEXT-HOP以外)。一条路径的本地偏好可能由该路由器设置或可能由在相同AS中的另一台路由器学习到。本地偏好属性的值是一种策略决定,它完全取决于该AS的网络管理员。具有最高本地偏好值的路由将被选择。
2)从余下的路由中(所有都具有相同的最高本地偏好值),将选择具有最短AS-PATH的BGP路径。
3)从余下的路由中(所有都具有相同的最高本地偏好值和相同的AS-PATH长度), 使用热土豆路由选择,即选择具有最靠近NEXT-HOP路由器的路由。
4)如果仍留下多条路由,该路由器使用BGP标识符来选择路由。
-
BGP路由选择——不再“自私”
在实践中,BGP使用了一种比热土豆路由选择更复杂但结合了其特点的算法。如果到相同的前缀有两条或多条BGP路径,则顺序地调用下列消除规则直到余下一条:
1)路由被指派一个本地偏好(local preference)值作为其属性之一(除了 AS-PATH和 NEXT-HOP以外)。一条路径的本地偏好可能由该路由器设置或可能由在相同AS中的另一台路由器学习到。本地偏好属性的值是一种策略决定,它完全取决于该AS的网络管理员。具有最高本地偏好值的路由将被选择。
2)从余下的路由中(所有都具有相同的最高本地偏好值),将选择具有最短AS-PATH的BGP路径。
3)从余下的路由中(所有都具有相同的最高本地偏好值和相同的AS-PATH长度), 使用热土豆路由选择,即选择具有最靠近NEXT-HOP路由器的路由。
4)如果仍留下多条路由,该路由器使用BGP标识符来选择路由。
-