4网络层(数据平面)
参考博文:https://blog.csdn.net/qq_53111905/article/details/120578747
4.1导论
网络层的关键功能:
-
转发——数据平面——路由器的输入接口转发到合适的输出接口(局部)
-
路由——控制平面——规划从源主机到目标主机的路径(全局)
传统方式——分布式——数据平面和控制平面在一台设备上实现
SDN——逻辑集中的控制平面,根据流表对不同的数据报进行动作(block,泛洪等)
连接建立
在某些网络架构中是第三个重要的功能
ATM, frame relay, X.25
在分组传输之前,在两个主机之间,在通过一些 路由器所构成的路径上建立一个网络层连接
涉及到路由器
网络层和传输层连接服务区别:
- 网络层: 在2个主机之间,涉及到路径上的一些路由器 —— 有连接
- 传输层: 在2个进程之间,很可能只体现在端系统上 (TCP连接) —— 面向连接
传输层的连接指的是端到端的连接,网络层的连接和传输层不一样,不仅体现在主机和主机之间,而且体现在内部所有的网络交换节点上。
路由表是数据平面和控制平面的粘合剂。
网络层服务模型:
IP——best effort尽力而为
4.2路由器的组成
路由器结构概况:
高层面(非常简化的)通用路由器体系架构
- 路由:运行路由选择算法/协议 (RIP, OSPF, BGP) - 生成 路由表
- 转发:从输入到输出链路交换数据报 - 根据路由表进行分组的转发
输入端口功能:
输入端口缓存:
- 当交换机构的速率小于输入端口的汇聚速率时, 在输入端口可能要排队
- 排队延迟以及由于输入缓存溢出造成丢失!
- Head-of-the-Line (HOL) blocking: 排在队头的数据报 阻止了队列中其他数据报向前移动
Head of line block——头部节点堵塞——queue来匹配速度的不一致性。
交换结构:
将分组从输入缓冲区传输到合适的输出端口
交换速率:分组可以按照该速率从输入传输到输 出
运行速度经常是输入/输出链路速率的若干倍
N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理 想,才不会成为瓶颈
3种典型的交换机构:
- 通过内存交换
- 通过总线交换
- 通过互联网络交换(crossbar)
输出端口:
当多个输入端口同时向输出端口发送时,缓冲该分组(当通过交换网络到达的速率炒熟输出速率则缓存)
排队带来延迟,如果输出端口缓存溢出则丢弃数据报
调度机制(挺重要,作业题里有):
调度:选择下一个要通过链路传输的分组(分组被转发的顺序)
- 优先权排队:发送最高优先权的分组
- Round Robin scheduling循环排队规则:循环扫描不同类型的分组,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
- Weight Fair queueing加权公平排队:在一段时间内,每个队列得到的服务时间是: Wi /(XIGMA(Wi )) *t ,和权重成正比
丢弃策略:如果分组到达满的队列,哪个分组将会被抛弃
路由器的输入和输出端口通常是整合在一起的。
SDN——网络可编程
4.3网际协议:IPV4,寻址,IPV6和其他
IP协议主要实现的是数据平面的转发功能
IP地址:32位标识,对主机或者路由器的接口编址
ip数据报格式
IP 分片和重组(Fragmentation & Reassembly)
网络链路有MTU (最大传输单元) –链路层帧所携带的最大数据长度
- 不同的链路类型 —— Access链路、Trunk链路、
- 不同的MTU
大的IP数据报在网络上被分片 (“fragmented”)——
-
一个数据报被分割成若干个小 的数据报
-
相同的ID
-
不同的偏移量
-
最后一个分片标记为0
-
-
“重组”只在最终的目标主机进行
-
IP头部的信息被用于标识,排序相关分片
其中flagflag用来标识后面还有没有同一个ID的IP数据报
IP 编址: 引论
- IP 地址: 32位标示,对 主机或者路由器的接口编址
- 接口: 主机/路由器和物理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP地址和每一个接口关联
- 一个IP地址和一个接口相关联
IP地址:
- 子网部分(高位bits)
- 主机部分(低位bits)
什么是子网(subnet) ?
- 一个子网内的节点(主机或者路由器)它们的 IP地址的高位部分相同 ,这些节点构成的网络的一部分叫做子网
- 无需路由器介入,子网内各主机可以在物理上相互直接到达 —— 只需要交换机即可,一跳可达
IP 地址分类
- Class A:126 networks ,16 million hosts
- Class B:16382networks ,64 K hosts
- Class C:2 million networks ,254 host
- Class D:multicast
- Class E:reserved for future
全0全1不用!
特殊IP地址
- 一些约定:
- 子网部分: 全为 0—本网络 127 Loopback —— 回路地址
- 主机部分: 全为0—本主机
- 主机部分: 全为1–广播地址,这个网络的所有主机
- 全为1——在本地网络广播
- 特殊IP地址
内网(专用)IP地址
专用地址:地址空间的一部份供专用地址使用
- 永远不会被当做公用地址来分配, 不会与公用地址重复
- 只在局部网络中有意义,区分不同的设备
- 路由器不对目标地址是专用地址的分组进行转发
- 专用地址范围
- Class A 10.0.0.0-10.255.255.255 MASK 255.0.0.0
- Class B 172.16.0.0-172.31.255.255 MASK 255.255.0.0
- Class C 192.168.0.0-192.168.255.255 MASK 255.255.255.0
IP 编址: CIDR
CIDR: Classless InterDomain Routing (无类域间路由)
- 子网部分可以在任意的位置,满足不同机构的需要
- 地址格式: a.b.c.d/x, 其中 x 是 地址中子网号的长度
互联网中是以网络为单位进行路由信息的计算,而不是以主机为单位
子网掩码(subnet mask)
32bits ,0 or 1 in each bito
- 1: bit位置表示子网部分
- 0:bit位置表示主机部分
原始的A、B、C类网络的子网掩码分别是
A:255.0.0.0 : 11111111 00000000 00000000 00000000
B:255,255.0.0:11111111 11111111 0000000 00000000
C:255,255,255.0:11111111 11111111 11111111 00000000
CIDR下的子网掩码例子:
1111111111111111 11111100 0o0000oo
另外的一种表示子网掩码的表达方式
/#
例:/22:表示前面22个bit为子网部分
转发表和转发算法
获得IP数据报的目标地址,对于转发表中的每一个表项
如 (IP Des addr) & (mask)== destination, 则按照表项 对应的接口转发该数据报
如果都没有找到,则使用默认表项转发数据报
DHCP: Dynamic Host Configuration Protocol: 从服务器中动态获得一个IP地址
上图展示了主机获得IP地址的两种方式~
注:yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
第二次是因为可能有多个DHCP服务器相应,需要确定用哪一个。
DHCP 返回:
- IP 地址
- 第一跳路由器的IP地址(默认网关)
- DNS服务器的域名和IP地址
- 子网掩码 (指示地址部分的网络号和主机号)
DHCP的一个实例:
第一次握手
联网笔记本需要获取自己的IP地址,第一跳路由器地址和DNS服务器:采用DHCP协议
DHCP请求被封装在UDP段中,封装在IP数据报中,封装在以太网的帧中
以太网帧在局域网范围内广播(dest: FFFFFFFFFFFF)
被运行DHCP服务的路由器收到
以太网帧解封装成IP,IP解封装成UDP,解封装成DHCP
DHCP服务器生成DHCP ACK,包含客户端的IP地址,第一跳路由器的IP地址和DNS域名服务器的IP地址
DHCP服务器封装的报文所在的帧转发到客户端,在客户端解封装成DHCP报文
客户端知道它自己的IP地址,DNS服务器的名字和IP地址,第一跳路由器的IP地址
第二次握手 略
NAT: Network Address Translation 网络地址转换(内网)
动机: 本地网络只有一个有效IP地址: 分配更多地址
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知 外界
- 可以改变ISP(地址变化)而不需要改变内部的 设备地址
- 局域网内部的设备没有明确的地址,对外是不可 见的–安全
实际上就是用外网的某个IP代替内网里面的网络号,
出去的时候替换 原来IP 和 端口号
进来的时候替换 目标IP 和 端口号
NAT 穿越问题(略)
- 客户端需要连接地址为 10.0.0.1的服务器
- 服务器地址10.0.0.1 LAN本地地址 (客户端不能够使用其作为目标地址)
- 整网只有一个外部可见地址: 138.76.29.7
- 了解一下有三种方案
路由聚集:层次编址允许路由信息的有效广播
IPV6
如何实现从IPV4到IPV6的平移?
- 隧道:在IPV4的路由器之间传输的IPv4数据包中携带IPV6数据报
4.4通用转发和SDN
每个路由器(Per Route)的控制平面 (传统)
- 每个路由器上都有实现路由算法元件(它们之间需要相互交 互)- 形成传统IP实现方式的控制平面
- 控制平面式分布式的,由各个路由器的各自完成,难于管理
数量众多、功能各异的中间盒
路由器的网络层功能:
- IP转发:对于到来的分组按照路由表决定如何转发,数 据平面
- 路由:决定路径,计算路由表;处在控制平面
还有其他种类繁多网络设备(中间盒):
- 交换机;防火墙;NAT;IDS;负载均衡设备
- 未来:不断增加的需求和相应的网络设备
- 需要不同的设备去实现不同的网络功能
- 每台设备集成了控制平面和数据平面的功能
- 控制平面分布式地实现了各种控制平面功能
- 升级和部署网络设备非常困难
SDN:逻辑上集中的控制平面 (新)
一个不同的(通常是远程)控制器和CA交互,控制器决定分组 转发的逻辑(可编程),CA所在设备执行逻辑。
SDN的主要思路
网络设备数据平面和控制平面分离
数据平面-分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽 象成:按照流表(由控制平面设置的控制逻辑)进行PDU (帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制 逻辑
控制平面-控制器+网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
SDN 架构: SDN控制器
SDN 控制器(网络OS):
- 维护网络状态信息
- 通过上面的北向API和网络 控制应用交互 向上
- 通过下面的南向API和网络 交换机交互 向下
- 逻辑上集中,但是在实现上通常由于性能、可扩展性、 容错性以及鲁棒性采用分布式方法
传统路由器:垂直集成,集成了数据平面和控制平面的功能
SDN:水平集成
openflow:
OpenFlow,一种网络通信协议,属于数据链路层,能够控制网上交换器或路由器的转发平面(forwarding plane),借此改变网络数据包所走的网络路径。
OpenFlow能够启动远程的控制器,经由网络交换器,决定网络数据包要由何种路径通过网络交换机。这个协议的发明者,将它当成软件定义网络(Software-defined networking)的启动器。 [1]
OpenFlow允许从远程控制网络交换器的数据包转送表,透过新增、修改与移除数据包控制规则与行动,来改变数据包转送的路径。比起用访问控制表(ACLs) 和路由协议,允许更复杂的流量管理。同时,OpenFlow允许不同供应商用一个简单,开源的协议去远程管理交换机(通常提供专有的接口和描述语言)。
OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。
OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。
流表的表项结构:
例子:
具体例子:
s信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。
流表的表项结构:
例子:
具体例子: