计算机通信网课程自学笔记
前言
本人选择并阅读的参考书为《计算机网络——自顶向下方法第七版》,因此本人将尝试以书中的顺序来梳理自己的学习笔记。同时本人还借鉴了一些课程课件中的知识内容,也将一并与书本内容结合进行归纳。
网络层:数据平面
- 网络层能够被分解为两个互相作用的部分,即数据平面和控制平面
- 数据平面功能即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报(即网络层的分组)如何转发到该路由器的输出链路之一
4.1 网络层概述
- 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信
- 在发送端,运输层将从发送应用程序进程接收到的报文转换成运输层报文段
4.1.1转发和路由选择:数据平面和控制平面
- 转发:当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法
- 每台网络路由器中有一个关键元素是它的转发表
1.控制平面:传统的方法
由人工配置,但是很不现实
上图中每台路由器都有一个与其他路由器的路由选择组件通信的路由选择组件
2.控制平面:软件定义网络(SDN)方法
远程控制器计算和分发转发表以供每台路由器使用
下图中控制平面路由选择功能与物理的路由器是分离的,即路由选择设备仅执行转发,而远程控制器计算并分发转发表。
4.1.2网络服务模型
- 网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性
- 因特网的网络层提供了单一的服务——尽力而为服务
4.2 路由器工作原理
- 下图标识了一台路由器的四个组件
- 输入端口:输入端口执行几项重要功能
①:终结入物理链路(输入端口部分最左端的方框与输出端口部分最右侧的方框)
②:与位于入链路远端的数据链路层交互来执行数据链路层功能(输入与输出端口部分中间的方框)
③:在输入端口执行查找功能(输入端口最右侧的方框) - 交换结构:将路由器的输入端口连接到它的输出端口
- 输出端口:存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组
- 路由选择处理器:执行控制平面功能
①:在传统路由器中,它执行路由选择协议
②:在SND路由器中,它负责与远程控制器通信以及执行网络管理功能 - 路由器的输入端口、输出端口和交换结构几乎总是用硬件来实现
- 路由器需要处理的信息:
①:基于目的地转发
②:通用转发
4.2.1输入端口处理与基于目的地转发
- 在输入端口中执行的查找对于路由器运行是至关重要的,正是在这个地方,路由器使用转发表来查找输出端口
- 转发表是由路由选择处理器计算和更新的,或者转发表接受来自远程SDN控制器的内容
- 使用这种风格的转发表,路由器用分组目的地址的前缀与该表中的表项进行匹配;如果存在一个匹配项,则路由器向与该匹配项相关联的链路转发分组
- 当有多个匹配时,该路由器使用最长前缀匹配规则;即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组
- 一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构
- 除了查找之外,还必须采取其他许多动作:
①必须出现物理层和链路层处理
②必须检查分组的版本号、检验和以及寿命字段,并重写后两个字段
③必须更新用于网络管理的计数器(如接收到的IP数据报的数目)
4.2.2交换
- 通过交换结构,分组才能实际地从一个输入端口交换(即转发)到一个输出端口中
- 交换可以用许多方式完成:
①经内存交换
②经总线交换
③经互联网络交换
4.2.3输出端口处理
- 取出已经存放在输出端口内存中的分组并将其发送到输出链路上
4.2.4何处出现排队
- 在输入端口和输出端口处都可以形成分组队列,排队的位置和程度将取决于流量负载、交换结构的相对速率和线路速率
1.输入排队
如果交换结构不能快得使所有到达分组无延时地通过传送,则在输入端口将出现分组排队
线路前部阻塞(HOL):在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口是空闲的),因为它被位于线路前部的另一分组所阻塞
2.输出排队
当没有足够内存来缓存一个入分组时,就必须做出决定:
①丢弃到达的分组(采用一种称为弃尾的策略)
②删除一个或多个已排队的分组为新来的分组腾出空间
分组丢弃与标记策略统称为**主动队列管理(AQM)**算法
**随机早期检测(RED)**算法是得到最广泛研究和实现的AQM算法之一
4.2.5分组调度
1.先进先出(FIFO)
- FIFO调度规则按照分组到达输出链路队列的相同次序来选择分组在链路上传输
2.优先权排队
- 优先权排队规则下,到达输出链路的分组被分类放入输出队列中的优先权类
- 在同一优先权类的分组之间的选择通常以FIFO方式完成
- 在非抢占式优先权排队规则下,一旦分组开始传输,就不能打断
3.循环和加权公平排队
- 循环排队规则下,分组像使用优先权排队那样被分类。然而类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务
- 一个所谓的保持工作排队规则在有(任何类的)分组排队等待传输时,不允许链路保持空闲。当寻找给定类的分组但是没有找到时,保持工作的循环规则将立即检查循环序列中的下一个类
4.加权公平排队WFQ‘
- 到达的分组被分类并在合适的每个类的等待区域排队
- 每个类在任何时间间隔内可能收到不同数量的服务,对于一条传输速率为R的链路,第i类总能获得至少R·wi/(Σwj)的吞吐量
4.3 网际协议:IPv4、寻址、IPv6
4.3.1IPv4数据报格式
- 网络层分组被称为数据报
IPv4数据报中的关键字段如下:
- 版本号:这4个比特规定了数据报的IP协议版本
- 首部长度
- 服务类型(TOS):使不同类型的IP数据报能相互区别开来
- 数据报长度
- 标识、标志、片偏移:与所谓IP分片有关
- 寿命(TTL):确保数据报不会永远在网络中循环
- 协议:指示了IP数据报的数据部分应交给哪个特定的运输层协议
- 首部检验和:帮助路由器检测收到的IP数据报中的比特错误
- 源和目的IP地
- 选项:选项字段允许IP首部被扩展
- 数据(有效载荷)
4.3.2IPv4数据分片
- 一个链路层帧能承载的最大数据量叫做最大传送单元(MTU),MTU严格地限制着IP数据报的长度
- 如果MTU比该IP数据报的长度要小,则将IP数据报中的数据分片成两个或更多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送这些帧。
- 每个这些较小的数据报都称为片
- 片在其到达目的地运输层以前需要重新组装
- 标识、标志和片偏移字段用于重新组装任务
①当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号
②发送主机通常将它发送的每个数据报的标识号加1
③通过检查数据报的标识号,路由器能确定哪些数据报实际上是同一较大数据报的片
④最后一个片的标志比特被设为0,而所有其他片的标志比特被设为1
⑤为了让目的主机确定是否丢失了一个片(且能按正确的顺序重新组装片),使用偏移字段指定该片应放在初始IP数据报的哪个位置
4.3.3 IPv4编址
- 主机与物理链路之间的边界叫作接口
- 一个IP地址与一个接口相关联,而不是包括该接口的主机或路由器相关联
- 全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址
- 每一个IP地址长度为32比特,采用点分十进制记法,每个字节用它的十进制形式书写,各字节间以句点隔开
- 用IP的术语来说,图中有三个互联的网络各自形成一个子网
- IP编址为这个子网分配一个地址223.1.X.0/24,其中的/24计法,有时称为子网掩码,指示32比特中的最左侧24比特定义了子网地址
- 因特网的地址分配策略被称为无类别域间路由选择(CIDR)
- 当使用子网寻址时,32比特的IP地址被划分为两部分,并且也具有点分十进制数格式a.b.c.d/x,其中x指示了地址的第一部分中的比特数
- 形式为a.b.c.d/x的地址的x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀
- 形式为a.b.c.d/x的单一表项足以将数据报转发到该组织内的任何目的地
- 使用单一网络前缀通告多个网络的能力通常称为地址聚合或路由聚合或路由摘要
- 一个地址的剩余32-x比特可认为是用于区分该组织内部设备的
- 当该组织内部的路由器转发分组时,才会考虑这些比特
- 这些较低阶比特可能(或可能不)具有另外的子网结构
- 当一台主机发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一网络中的所有主机
1.获取一块地址
为了获取一块IP地址用于一个组织的子网内,某网络管理员也许会与它的ISP联系,该ISP可能会从已分给它的更大地址块中提供一些地址
2.获取主机地址:动态主机配置协议(DHCP)
主机地址能手动配置,但是更多的是使动态主机配置协议(DHCP)来完成
由于DHCP具有将主机连接进一个网络的网络相关方面的自动能力,故又常被称为即插即用协议或零配置协议
DHCP是一个客户-服务器协议,新到达客户的地址分配有四步:
①DHCP服务器发现:通过使用DHCP发现报文,一台新达到的主机与DHCP服务器交互。DHCP客户生成包含DHCP发现报文的IP数据报,其中使用广播目的地址255.255.255.255并且使用“本主机”源IP地址0.0.0.0
②DHCP服务器提供:DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,该报文向该子网的所有节点广播,仍然使用IP广播地址255.255.255.255。因为子网中可能存在多个DHCP服务器,该客户也许会发现它处于能在几个提供者之间进行选择的优越位置
③DHCP请求:新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数
④DHCP ACK:服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数
- 因为客户可能在租用期超时后还希望使用这个地址,所以DHCP还提供了一种机制以允许客户更新它对IP地址的租用
4.3.4网络地址转换
- 一个特定的IP地址只有在给定的网络中才有意义,但是当其向或从全球因特网发送或接收分组时,如何处理唯一确定的编址问题需要依靠 NAT(Network Address Translation) 来解决
- 对于外界而言,NAT路由器 的行为就像是一个具有单一IP地址的单一设备,它对外界隐藏了家庭网络的细节
- NAT路由器从ISP的DHCP服务器中得到它的专属地址,并且其本身也运行一个DHCP服务器,为位于NAT-DHCP路由器控制的家庭网络地址空间中的计算机提供地址。
- 对于一个路由器,NAT路由器也拥有其独有的NAT转化表,并且在表项中包含了端口号以及其IP地址。这样,借助唯一的端口号,NAT路由器可以知道将某个分组转发到哪个主机
4.3.5 IPv6
-
IPv6数据报格式
IPv6的数据报引入并删除了一些内容:- 扩大的地址容量:IPv6将IP地址长度从32位增加到了128比特。除了单播和多播地址以外,IPv6还引入了一种称为**任播地址(anycast address)**的新型地址,这种地址可以使数据报交付给一组主机中的任意一个
- 简化高效的40字节首部:允许路由器更快地处理IP数据报
- 流标签:IPv6有一个难以捉摸的**流(flow)**定义。特殊流是发送方要求进行特殊处理的流
减少内容: - 分组/重新组装:IPv6不允许在中间路由器上进行分片与重新组装。如果路由器收到的IPv6数据报因太大而不能转发到出链路上的话,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文即可
- 首部检验和
-
从IPv4到IPv6的迁移
在实践中已经得到广泛采用的IPv4到IPv6迁移的方法包括建隧道(tunneling)
4.4 通用转发与SDN
-
因特网路由器的转发决定传统上仅仅基于分组的目的地址,但是执行许多网络层功能的中间盒有了很大的发展,如:
- NAT盒重写首部IP地址和端口号
- 防火墙基于首部字段值阻拦流量或重定向分组以进行其他处理
- 负载均衡器将请求某种给定服务的分组转发到提供该服务的服务其集合中的一个
-
基于目的地转发的特征可以总结为两个步骤:查找目的IP地址(匹配),将分组发送到有特定输出端口的交换结构(动作)
因为能够使用网络层和/或链路层源和目的地址做出转发决定,所以显示在上图的转发设备被称之为分组交换机,其中的匹配+动作表由远程控制器计算、安装和更新
匹配加动作转发表在OpenFlow中称为流表(flow table),其包括:- 首部字段值的集合,入分组将与之匹配。匹配不上流表项的分组将被丢弃或发送到远程控制器做更多处理
- 计数器集合(当分组与流表项匹配时更新计数器)
- 当分组匹配流表项时所采取的动作集合:转发、丢弃、复制,等等
4.4.1匹配
到达一台分组交换机的一个链路层帧将包含一个网络层数据报作为其有效荷载,该载荷通常依次将包含一个运输层报文段
- 入口端是指分组交换机上接收分组的输入端口
- 流项表也可以有通配符。每个流表项也具有相应的优先权,如果一个分组匹配多个流表项,选定的匹配和对应的动作将是其中有最高优先权的那个。
4.4.2动作
- 每个流表项都有零个或多个动作列表,这些动作决定了应用于与流表项匹配的分组的处理。如果有多个动作,它们以在表中规定的次序执行。
- 转发
- 丢弃
- 修改字段
4.5 小结
网络层的数据平面(data plane)功能,即每台路由器的如下功能:
- 决定到达路由器的输入链路之一的分组如何转发到该路由器的输出链路之一
跳转
我们将以以下顺序进行总结: