课程资源
- 课程网站:http://staff.ustc.edu.cn/~qzheng/teaching.html
- 课程视频:https://www.bilibili.com/video/BV1JV411t7ow/
- 课程教材:计算机网络(自顶向下方法 第7版),机械工业出版社,2016
第四章
网络层:数据平面
1、网络层导论
网络层服务与功能
- 服务
- 在发送主机和接收主机对之间传送段(segment)
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
- 网络层协议存在于每一个主机和路由器
- 路由器检查每一个经过它的IP数据报的头部
- 功能
- 转发: 将分组从路由器的输入接口转发到合适的输出接口,硬件实现,几纳秒
- 路由选择: 使用路由选择算法来决定分组从发送主机到目标接收主机的路径,软件实现,几秒
- 路由选择算法
- 路由选择协议
数据平面与控制平面
- 数据平面
- 是每个路由器的功能,决定从路由器输入端口到达的分组如何转发到输出端口,即实现转发功能
- 传统方式:基于目标地址+转发表
- SDN方式:基于多个字段+流表
- 控制平面
- 是网络范围的逻辑,决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间的端到端路径,即实现路由选择功能
- 传统的路由算法: 在路由器中被实现
- software-defined networking (SDN): 在远程的服务器中实现
- 传统方式
- 在每一个路由器中的单独路由器算法元件,在控制平面进行交互
4. SDN方式
- 一个不同的(通常是远程的)控制器与本地控制代理(CAs)交互
2、路由器组成
路由器结构
- 高层面(非常简化的)通用路由器体系架构
- 路由:运行路由选择算法/协议 (RIP, OSPF, BGP)-生成路由表
- 转发:从输入到输出链路交换数据报-根据路由表进行分组的
输入端口
- 最长前缀匹配
- 当给定目标地址查找转发表时,采用最长地址前缀匹配的目标地址表项
- 输入端口缓存
- 当交换机构的速率小于输入端口的汇聚速率时, 在输入端口可能要排队
- 排队延迟以及由于输入缓存溢出造成丢失
- Head-of-the-Line (HOL) blocking: 排在队头的数据报阻止了队列中其他数据报向前移动
- 当交换机构的速率小于输入端口的汇聚速率时, 在输入端口可能要排队
交换结构
- 将分组从输入缓冲区传输到合适的输出端口
- 交换速率:分组可以按照该速率从输入传输到输出
- 运行速度经常是输入/输出链路速率的若干倍
- N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈
- 通过内存交换
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制 (数据报通过BUS两遍)
- 一次只能转发一个分组
- 通过总线交换
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争: 交换速度受限于总线带宽
- 1次处理一个分组
- 通过互联网络(crossbar等)的交换
- 同时并发转发多个分组,克服总线带宽限制
- Banyan(榕树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器
- 当分组从端口A到达,转给端口Y;控制器短接相应的两个总线
- 高级设计:将数据报分片为固定长度的信元,通过交换网络交换
输出端口
- 输出端口排队
- 排队带来延迟,由于输出端口缓存溢出则丢弃数据报
- 调度机制
调度: 选择下一个要通过链路传输的分组
FIFO (first in first out) scheduling: 按照分组到来的次序发送
- 丢弃策略: 如果分组到达一个满的队列,哪个分组将会被抛弃?
- tail drop: 丢弃刚到达的分组
- priority: 根据优先权丢失/移除分组
- random: 随机地丢弃/移除
- 丢弃策略: 如果分组到达一个满的队列,哪个分组将会被抛弃?
优先权调度:发送最高优先权的分组
- 类别可能依赖于标记或者其他的头部字段
- 先传高优先级的队列中的分组,除非没有
- 高(低)优先权中的分组传输次序:FIFO
Round Robin (RR) scheduling:
- 循环扫描不同类型的队列, 发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
Weighted Fair Queuing (WFQ):
- 一般化的Round Robin
- 一般化的Round Robin
3、IP:Internet Protocol
IP数据报格式
IP分片/重组
- 网络链路有MTU (最大传输单元) –链路层帧所携带的最大数据长度
- 不同的链路类型
- 不同的MTU
- 大的IP数据报在网络上被分片(“fragmented”)
- 一个数据报被分割成若干个小的数据报
- 相同的ID
- 不同的偏移量
- 最后一个分片标记为0
- “重组”只在最终的目标主机进行
- IP头部的信息被用于标识,排序相关分片
- 一个数据报被分割成若干个小的数据报
IPv4
IP编址
- IP 地址: 32位标示,对主机或者路由器的接口编址
- 接口: 主机/路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP地址和每一个接口关联
- 一个IP地址和一个接口相关联
子网(Subnets)
- 一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网
- 无需路由器介入,子网内各主机可以在物理上相互直接到达
IP地址分类
- 特殊IP地址
- 子网部分: 全为 0—本网络
- 主机部分: 全为0—本主机
- 主机部分: 全为1–广播地址,这个网络的所有主机
- 特殊IP地址
IP编址:CIDR(Classless InterDomain Routing无类域间路由)
- 子网部分可以在任意的位置
- 地址格式: a.b.c.d/x, 其中 x 是 地址中子网号的长度
子网掩码(subnet mask)
- 32bits , 0 or 1 in each bit
- 1: bit位置表示子网部分
- 0:bit位置表示主机部分
- 32bits , 0 or 1 in each bit
获得一个IP地址:
- DHCP(Dynamic Host Configuration Protocol),动态主机配置协议
- 是一个应用层协议
- 允许主机在加入网络的时候,动态地从服务器那里获得IP地址
- DHCP可以自动分配IP、子网掩码、网关、DNS。
- DHCP客户端使用的端口68,服务端使用端口67,使用的UDP应用层的协议。
- DHCP一般不为服务器分配IP,因为他们要使用固定IP,所以DHCP一般只为办公环境的主机分配IP。
- 获取一个网络的子网部分?
- 从ISP获得地址块中分配一个小地址块
- 一个ISP如何获得一个地址块
- ICANN: Internet Corporation for Assigned Names and Numbers
- 分配地址
- 管理DNS
- 分配域名,解决冲突
- ICANN: Internet Corporation for Assigned Names and Numbers
- DHCP(Dynamic Host Configuration Protocol),动态主机配置协议
NAT:网络地址转换
- 动机: 本地网络只有一个有效IP地址
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的–安全
- 实现: NAT 路由器必须
- 外出数据包:替换源地址和端口号为NAT IP地址和新的端口号,目标IP和端口不变 …远端的C/S将会用NAP IP地址,新端口号作为目标地址
- 记住每个转换替换对(在NAT转换表中)
- 进入数据包:替换目标IP地址和端口号,采用存储在NAT表中的mapping表项,用(源IP,端口)
- 争议
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
- 违反了end-to-end 原则
- 端到端原则:复杂性放到网络边缘
- 无需借助中转和变换,就可以直接传送到目标主机
- NAT可能要被一些应用设计者考虑, eg, P2P applications
- 外网的机器无法主动连接到内网的机器上
- 端到端原则:复杂性放到网络边缘
- NAT穿越: 如果客户端需要连接在NAT后面的服务器?
- 方案1: 静态配置NAT:转发进来的对服务器特定端口连接请求
- e.g., (123.76.29.7, port 2500)总是转发到10.0.0.1 port 25000
- 方案2: Universal Plug and Play(UPnP) Internet GatewayDevice (IGD) 协议. 允许NATted主机可以:
- 获知网络的公共 IP地址(138.76.29.7)
- 列举存在的端口映射
- 增/删端口映射 (在租用时间内)
- 方案 3: 中继 (used in Skype)
- NAT后面的服务器建立和中继的连接
- 外部的客户端链接到中继
- 中继在2个连接之间桥接
- 方案1: 静态配置NAT:转发进来的对服务器特定端口连接请求
- 地址短缺问题可以被IPv6 解决
IPv6
动机
- 初始动机: 32-bit地址空间将会被很快用完
- 另外的动机:
- 头部格式改变帮助加速处理和转发
- TTL-1
- 头部checksum
- 分片
- 头部格式改变帮助QoS
- 头部格式改变帮助加速处理和转发
数据报格式
- 固定的40 字节头部
- 数据报传输过程中,不允许分片
- ICMPv6: ICMP的新版本
- 附加了报文类型, e.g. “Packet Too Big”
- 多播组管理功能
- ICMPv6: ICMP的新版本
隧道:从IPv4到IPv6的平移
- 在IPv4和IPv6路由器混合时,网络如何运转?
- 隧道: 在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
4、通用转发和SDN
SDN(software-defined networking):逻辑上集中的控制平面
- 网络设备数据平面和控制平面分离
- 数据平面-分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻辑)进行PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
- 控制平面-控制器+网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
- 数据平面-分组交换机
- 优势
- 水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展
- 集中式实现控制逻辑,网络管理容易
- 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
- 实现流量工程等高级特性
- 架构
数据平面交换机
- 流表被控制器计算和安装
- 基于南向API(例如OpenFlow),SDN控制器访问基于流的交换机
SDN 控制器(网络OS)
- 维护网络状态信息
- 通过上面的北向API和网络控制应用交互
- 通过下面的南向API和网络交换机交互
- 逻辑上集中,但是在实现上通常由于性能、可扩展性、容错性以及鲁棒性采用分布式方法
网络控制应用
- 控制的大脑: 采用下层提供的服务(SDN控制器提供的API),实现网络功能
- 非绑定:可以被第三方提供,与控制器厂商以通常上不同,与分组交换机厂商也可以不同
OpenFlow
- 每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)
- 流: 由分组(帧)头部字段所定义
- 通用转发: 简单的分组处理规则
- 模式: 将分组头部字段和流表进行匹配
- 行动:对于匹配上的分组,可以是丢弃、转发、修改、将匹配的分组发送给控制器
- 优先权Priority: 几个模式匹配了,优先采用哪个,消除歧义
- 计数器Counters: #bytes 以及 #packets
本文含有隐藏内容,请 开通VIP 后查看