123章都是在网络边缘,45章网络核心。第4章聚焦于网络层的数据平面:
目标:
一、理解网络服务的基本原理:
(1)网络服务模型;(2)转发和路由;(3)路由器工作原理;(4)通用转发。
二、互联网中网络层协议的实例和实现。
4.1 导论
网络层服务
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
- 网络层协议存在于每一个主机和路由器
- 路由器检查每一个经过它的IP数据报的头部
网络层的关键功能
网络层功能:
- 转发:将分组从路由器的输入接口转发到合适的输出接口
- 路由:使用路由算法来决定分组从发送主机到目标接收主机的路径
- 路由算法协议
- 路由选择协议
转发类似于通过单个路口,路由相当于从源到目的的路由路径规划过程
转发:局部的功能,决定路口。数据平面的功能,转发依赖于路由表。
路由:全局的功能,决定路径。控制平面的功能。
数据平面:
- 本地,每个路由器功能
- 决定从路由器输入端口到达的分组如何转发到输出端口
- 转发功能:
- 传统方式:基于目标地址+转发表
- SDN方式:基于多个字段+流表
控制平面:
- 网络范围内的逻辑
- 决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径。负责路由表的计算、路由信息的交互。
- 2个控制平面方法:
- 传统的路由算法:在路由器中被实现
- software-defined-networking(SDN):在远程的服务器中实现
传统方式和SDN的区别?
传统方式仅根据目标IP地址对分组进行转发。SDN可以利用很多字段与流表中的信息进行匹配,不是仅仅只有IP地址,再对分组进行处理,不仅仅只有转发,还可以有阻止、泛洪、修改字段,灵活性很强。
泛洪:从一个端口收,向多个端口发。
流表怎么来?网络操作系统计算得到交给分组交换设备。
传统方式

传统方式中的路由器既实现了数据平面的功能,也实现了控制平面的功能。紧耦合,集中在一个机器上。每个路由器功能的实现是分布式实现的。
分布式+紧耦合,协议定下来之后,很难对路由器的逻辑进行修改。僵化。
SDN方式

控制器把流表算出来交给每一个分组交换设备(packet switch),分组交换设备对流表进行装载,对发送进来的分组进行多字段匹配,获得对应的“动作”项。
控制平面是集中式的,灵活、方便修改。
从发送方主机到接收方主机传输数据报的“通道”,网络提供什么样的服务模型?
对于单个数据报的服务:
- 可靠传送
- 延迟保证
对于数据报流的服务:
- 保序数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
连接建立
有连接的服务:
比如:ATM异步传输
两个网络在通信之前要建立连接,不仅涉及两台主机,还包括路径上的所有路由器,在所有节点上维持着通信状态。
对于有些网络而言,网络连接是除了路由和转发之外的第三个重要功能。
网络层和传输层连接服务的区别:
网络层:在2个主机之间,涉及到路径上的一些路由器
传输层:在2个进程之间,很可能只体现在端系统上(TCP连接)
TCP/IP的网络
控制层面计算出路由表交给IP协议,IP协议使用路由表对到来的数据进行转发。路由表是数据层面和控制层面的粘合剂。
IP网络没有连接建立的功能。
IP网络向上层提供的是best effort,尽力而为服务模型。
4.2 路由器组成
路由器结构概况
简化的通用路由器体系结构
路由:运行路由选择算法/协议(RIP,OSPF,BGP)—-生成路由表
转发:从输入到输出链路交换数据报 —-根据路由表进行分组的转发
fabric完成局部的转发
三个小方块:黑色物理层,蓝色链路层,红色网络层
图上虽然分开画,其实一个端口既可以是输入端口也可以是输出端口。
输入端口

物理层:bit级的接收
数据链路层:链路层协议动作、解封装
网络层:输入端,分布式交换
- 根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找合适的输出端口(匹配+行动)
- 基于目标的转发:仅仅依赖于IP数据报的目标IP地址(传统方法)
- 通用转发:基于头部字段的任意集合进行转发
为什么输入端口有一个队列?
因为链路层到网络层的数据传输速率可能大于路由器输入端口的速率,当交换结构的速率小于输入端口的汇聚速率时,在输入端口可能要排队。
排队延迟以及由于输入缓存溢出可能造成丢失。
交换结构
交换结构位于一台路由器的核心部位, 因为正是通过这种交换结构, 分组才能实际地
从一个输入端口交换(即转发) 到一个输出端口中。
三种常见的交换结构
书p.207
经内存交换:
- 分组被拷贝到系统内存,CPU从分组的头部提取目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制(数据报通过BUS两遍)
- 一次只能转发一个分组
经总线交换:
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争:交换速度受限于总线带宽
- 1次处理1个分组
相比于基于内存的方法需要通过BUS两遍,这种只需要一遍,效率好些。基于BUS的方式应用比较广泛。
经互联网络交换:
- 同时并发转发多个分组,克服总线带宽限制
前面两种都只能1次处理1个分组,crossbar方法的可以同时并发转发多个分组。
输出端口

当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存。
由调度规则选择排队的数据报进行传输。
同样有queueing部分,如果溢出数据报会丢失。
缓存队列的分组先来的不一定先传。会根据调度规则进行操作。
调度机制
调度:选择下一个要通过链路传输的分组
(1)FIFO(First In First Out) 按照分组到来的次序发送
(2)优先权调度:发送最高优先权的分组
(3)Round Robin(RR) scheduling,循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类。
(4)Weighted Fair Queueing(WFQ),每个类在每一个循环中获得不同权重的服务量,不是绝对优先。
4.3 IP协议
IP数据报格式

上层协议表示上层是TCP还是UDP,分别是6和17
IP分片和重组
为什么要分片?
- 网络链路有MTU(最大传输单元)—-链路层帧所携带的最大数据长度。不同的链路类型会有不同的MTU
- 大的IP数据报在网络上被分片(fragmented)
- 一个数据报被分割成若干个小的数据报:
- 相同的ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行
- IP头部的信息被用于标识,排序相关分片
- 一个数据报被分割成若干个小的数据报:
如果定时器到时后有缺失的分片,已到达的其他分片会被全部丢弃
一个例子:
IP编址
子网
IP地址子网部分 高位bits
IP地址主机部分 低位bits
什么是子网?
- 一个子网内的节点(主机或者路由器),它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网。
- 无需路由器介入,子网内各主机可以在物理上相互直接到达
223.1.1.1和223.1.3.2也算子网
但不是shun子网,不知道老师在说啥
注意看一共是6个子网
IP地址分类
在CIDR被采用之前, IP地址的网络部分被限制为长度为8、 16或24比特, 这是一种称为分类编址的编制方案。具有8、 16和24比特子网地址的子网分别被称为A、 B和C类网络。
class A:1字节网络地址+3字节主机地址,2^7-2=128-2=126子网,全1和全0的不用
class B:2字节网络地址+2字节主机地址,2^14-2 64k host
class C:3字节网络地址+1字节主机地址,2^8-2=254 host
ABC三类网络:
https://blog.csdn.net/weixin_44517301/article/details/93920003
ABC都是单播地址
路由以子网为单位,向外散播可达信息,不是以IP为单位。
特殊IP地址
子网部分:全为0—-本网络
主机部分:全为0—-本主机
主机部分:全为1—-广播地址,这个网络的所有主机
内网(专用)地址
地址空间的一部分供专用地址使用
永远不会被当做公用地址来分配,不会与共用地址重复。只在局部网络中有意义,区分不同的设备。
路由器不对目标地址是专用地址的分组进行转发。
专用地址范围:
ClassA 10.0.0.0-10.255.255.255 MASK 255.0.0.0
ClassB 172.16.0.0-172.31.255.255 MASK 255.255.0.0
ClassC 192.168.0.0-192.168.255.255 MASK 255.255.255.0
IP编址:CIDR
Classless Inter Domain Routing
无类域间路由
- 子网部分可以在任意位置
- 地址格式:a.b.c.d/x,其中x是地址中子网号的长度
(相对于ABC类来说的无类)
200.23.16.0/23
子网掩码 11111111 11111111 11111110 00000000
转发表户和转发算法

- 获得IP数据报的目标地址
- 对于转发表中的每一个表项
- 如(IP Des addr)&(mask)==destination,则按照表项对应的接口转发该数据报(确认子网号)
- 如果都没有找到,则使用默认表项转发数据报
如何获得一个IP地址?
- 系统管理员将地址配置在一个文件中
- DHCP Dynamic Host Configuraion Protocol 在服务器中动态获得一个IP地址
动态主机配置协议 DHCP
又被称为即插即用协议(plug-and-play protocol)或零配置(zeroconf)协议。
目标:允许主机在加入网络的时候,动态地从服务器那里获得IP地址:
- 可以更新对主机在用IP地址的租用期-租期快到了
- 重新启动时,允许重新使用以前用过的IP地址、
- 支持移动用户加入到该网络(短期在网)
DHCP工作概况:
- 主机广播“ DHCP discover”报文[可选]
- DHCP服务器用“ DHCP offer”提供报文响应[可选]
- 主机请求IP地址:发送“ DHCP request”报文
- DHCP服务器发送地址:“ DHCP ack”报文
DHCP是一个客户-服务器协议,客户通常是新到达的主机。
最简单的情况下,每个子网有一台DHCP服务器。如果某子网中没有服务器,则需要一个DHCP中继代理,这个代理知道用于该网络的DHCP服务器的地址。
对于一台新到达的主机,DHCP协议是一个4步骤的过程。两次交互。
yiaddr表示你的因特网地址
(1)DHCP服务器发现。一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器。 这可通过使用DHCP发现报文(DHCP discover message)来完成, 客户在UDP分组中向端口 67发送该发现报文。
(2)DHCP服务器提供。 DHCP服务器收到一个DHCP发现报文时, 用DHCP提供报文(DHCP offer message)向客户做出响应, 该报文向该子网的所有节点广播, 仍然使用IP广播地址255. 255. 255. 255。 因为在子网中可能存在几个DHCP服务器, 该客户需要进行选择。 每台服务器提供的报文包含有收到的发现报文的事务ID、向客户推荐的IP地址、 网络掩码以及IP地址租用期(address lease time) , 即IP地址有效的时间量。 服务器租用期通常设置为几小时或几天。
(3)DHCP请求。 新到达的客户从一个或多个服务器提供中选择一个, 并向选中的服务器提供用DHCP请求报文(DHCP request message)进行响应, 回显配置的参数。
(4)DHCP ACK。服务器用 DHCP ACK 报文(DHCP ACK message)对 DHCP 请求报文进行响应, 证实所要求的参数。
DHCP还允许一台主机得知其他信息, 例如它的子网掩码、 它的第一跳路由器地址(常称为默认网关) 与它的本地DNS服务器的地址。
DHCP请求>>封装在UDP段中>>封装在IP数据报中>>封装在以太网帧中
该帧被运行DHCP服务器的路由器收到
Q:如何获得一个网络的子网部分?
A:从ISP获得地址块中分配一个小地址块
Q:一个ISP如何获得一个地址块?
A:ICANN:Internet Corporation for Assigned Names and Numbers
分配地址;管理DNS;分配域名,解决冲突
层次编址:路由聚集
地址A比如200.23.16.0/23,说明前面23位表示网络号,后面9位是主机号,有效地址2^9-2个
路由通告:
A向大机构路由器发布一个路由通告,说凡是子网前缀是200.23.16的都发给我,A这个地址IPx便是这个子网前缀的下一跳。
同理地址B比如200.23.18.0/23也发布一个通告,IPy。
同理地址C比如200.23.30.0/23也发布一个通告,IPz。
大机构路由器IP’再进一步向ISP发布多个路由通告。
优化:路由聚集
如果可以实现路由聚集(比如上面三个前20位都相同),大机构路由器一起向外发布一个路由通告,比如200.23.16.0/20,那么IP’就是这个子网前缀的下一跳。
路由表表项中如果有多个符合,找到最长前缀匹配
为什么要聚集?
减少路由表表项数量;减少路由信息通告的代价;减少路由存储和计算的代价。
NAT 网络地址转换
Network Address Translation
一个机构分配到一个ip,但是有多台机器,给他们分配内网地址。但是内网地址不参与路由。
NAT的作用:内网机器向外面发送消息时,NAT把内网地址转换为机构外部IP,信息传回时,再把外网IP转换为对应的接收请求的内网地址。
动机:本地网络只有一个有效IP地址
不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备—-省钱
可以在局域网改变设备的地址情况下而无须通知外界
可以改变ISP(地址变化)而不需要改变内部的设备地址
局域网内部的设备没有明确的地址,对外是不可见的—-安全
不支持NAT的人认为:
- 端口号是用于进程寻址的, 而不是用于主机寻址的。
- 路由器只应该对第三层做信息处理,而这里对端口号(4层)做了处理。
- 违反了端到端原则
IPv6
p.228
由于新的子网和IP节点以惊人的增长率连到因特网上(并被分配唯一的IP地址) , 32比特的IP地址空间即将用尽。 为了应对这种对大IP地址空间的需求, 开发了一种新的IP协议, 即IPv6。 

版本:设置为4表示为IPv4,6表示IPv6。但是仅仅设置该字段不能创建一个合法的IPv4数据报。
下一个首部: 该字段标识数据报中的内容(数据字段) 需要交付给哪个协议(如TCP或UDP)。 该字段使用与IPv4首部中协议字段相同的值。
跳限制: 转发数据报的每台路由器将对该字段的内容减1。 如果跳限制计数达到0,则该数据报将被丢弃。
IPv6的变化:
- 扩大的地址容量。 IPv6将IP地址长度从32比特增加到128比特。
- 简化高效的40字节首部。 许多IPv4字段已被舍弃或作为选项。 因而所形成的40字节定长首部允许路由器更快地处理IP数据报。 IPv6数据报的结构更简单、 更高效。
- 流标签。 给属于特殊流的分组加上标签, 例如, 音频与视频传输就可能被当作一个流。 另一方面, 更为传统的应用(如文件传输和电子邮件) 就不可能被当作流。
- 数据报传输过程中,不允许分片
- 没有首部检验和。因为因特网层中的运输层(如TCP与UDP)和数据链路层(如以太网) 协议执行了检验操作,所以将其去除。
从IPv4到IPv6的迁移
假定两个IPv6节点(如图4.27中的B和E)要使用IPv6数据报进行交互, 但它们是经由中间IPv4路由器互联的。 我们将两台IPv6路由器之间的中间IPv4路由器的集合称为一个隧道(tunnel)。
隧道接收端的IPv6节点最终收到该IPv4数据报(它是该IPv4数据报的目的地),并确定该IPv4数据报含有一个IPv6数据报(通过观察在IPv4数据报中的协议号字段是41 [RFC 4213],指示该IPv4有效载荷是IPv6数据报) , 从中取出IPv6数据报, 然后再为该IPv6数据报提供路由, 就好像它是从一个直接相连的IPv6邻居那里接收到该IPv6数据报一样。
4.4 通用转发和SDN
传统方式实现网络功能的问题:
垂直集成,每个设备都实现了数据平面和控制平面的事情,设备基本上只能按照固定方式工作,控制逻辑固化。不便于创新的生态。一台设备配置错误影响全网运行,升级和维护会涉及到全网设备,管理困难。
SDN:逻辑上集中的控制平面
一个不同的(通常是远程)控制器和本地控制代理(CA)交互,控制器决定分组转发的逻辑(可编程),CA所在设备执行逻辑。
实现了数据平面和控制平面的分离。
SDN的主要思路
- 网络设备数据平面和控制平面分离
- 数据平面—-分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻輯)进行PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
- 控制平面控制器+网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
SDN控制平面和数据平面分离的优势
- 水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展
- 分组交换机、控制器和各种控制逻辑网络应用app可由不同厂商生产,专业化,引入竞争形成良好生态
- 集中式实现控制逻辑,网络管理容易:
- 集中式控制器了解网络状况,编程简单,传统方式困难
- 避免路由器的误配置
- 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
- 实现流量工程等高级特性
- 在此框架下实现各种新型(未来)的网络设备
Q:转发表(基于目标的转发)和流表(通用转发)是如何计算出来的?
A:通过控制平面 下一章
