德华
2023/01/27阅读:14主题:雁栖湖
计算机网络第四章
计算机网络自顶向下书籍B站中科大郑老师课程BV1JV411t7ow笔记
Part1第四章 网络层:数据平面
前几章在网络边缘,进入网络核心部分。
-
导论(数据平面、控制平面) -
路由器结构组成 -
IP协议(格式、分片重组、地址转换、IPv4、IPv6) -
SDN情况下数据平面(流表匹配)
14.1 导论
——数据平面、控制平面
-
服务模型 -
转发和路由——分别是数据平面和控制平面,分为传统方式和SDN方式(四种) -
路由器工作原理 -
通用转发
——协议实例与实现
功能概述
网络层服务:
-
主机对之间传送段(封装的传输层TCP段UDP数据报) -
封装、解封装 -
协议存在于每个主机和路由器,路由器检查所有IP数据报头部
关键功能:
-
转发:输入接口转发到输出接口(局部功能) -
路由:选择路径到达目标主机(全局功能)——算法、协议
数据平面、控制平面:
-
数据平面:转发(依靠路由表)——本地。传统:地址+转发表;SDN:多个字段+流表。 -
控制平面:路由(生成路由表)——全局。传统:路由器中实现;SDN:远程的服务器实现。
传统方式仅依靠IP地址,SDN方式匹配流表依靠一系列字段(MAC、配置信息等),SDN除了转发还可以阻止(block)、泛洪、修改等。SDN厂家的网络控制服务器通过南翔接口算出来流表分配给每个主机。
传统方式和SDN方式:
-
传统方式:路由器 分布式计算路由表(Per-router),两个平面紧耦合。——很难改运行逻辑。 -
SDN方式:分组交换机通过南向接口收到网络服务器的集中控制,两个平面分开。——很好改、可编程。
SDN:软件定义网络(software defined network)
服务模型
指标:
-
单个数据报:可靠性、延迟。 -
数据报流:保序性、带宽、延迟差(jitter)。
下下页具体模型(这些指标为特定值时表示某种模型)
-
best effort(尽力而为):全部无法保证——IP -
CBR(恒定速率)——下面都是ATM -
VBR(变化速率) -
ABR(可用比特率) -
UBR(不指名比特率)
连接建立
某些架构中有连接(和传输层面向连接区别——连接还体现在交换路径上),如ATM等。
IP无连接建立的功能。
网络层和传输层连接服务区别:
-
网络层: 在2个主机之间,涉及到路径上的一些路由器 -
传输层: 在2个进程之间,很可能只体现在端系统上
graph TB
A[导论]
A-->B[功能概述]
B-->B1[数据/控制平面]
B-->B2[传统/SDN方式]
A-->C[服务模型]
C-->C1[各种指标]
C-->C2[具体模型]
A-->D[连接建立]
D-->D1[ATM网络]
D-->D2[和传输层区别]
24.2 路由器组成
结构概况
路由:路由处理器(运行路由实体软件)产生路由表
转发:输入端口、输出端口、交换机(根据路由表局部转发)——真实路由器端口既可以输入也可以输出
每个路由器设备涉及三层的数据:物理层、数据链路层、网络层。最多拆分到网络层。
输入端口
-
物理层:物理信号转换成数字信号; -
数据链路层:检测帧头帧尾,检测是否出错,提取目标mac,一致则收取,把帧交给网络层实体; -
网络层实体排队,根据路由表,排到队头根据目标IP转发到对应主机。(SDN则查流表,执行对应操作)
为转发地址空间进行划分,不同地址空间转发到不同的端口。采用最长地址前缀匹配的目标地址表项。
一般使用TCAMs( ternary content addressable memories)硬件实现,在IP匹配时也总使用。
-
可以在一个时钟周期内检索出地址,不管表空间有多大 -
Cisco Catalyst系列路由器在TCAM中可以存储多达约为1百万条路由表项
交换结构
——switch fabric
存在队列缓冲的原因:存在头部阻塞(Head-of-the-Line (HOL) blocking)如多入一出,匹配输入输出速率瞬时不一致性。
局部交换速率要n倍于发送速率(n为输入输出端口个数)
三种典型交换结构:
-
基于memory(内存):第一代,拷贝到系统内存头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口。——经过两次系统总线,收到内存带宽限制,一次只能转发一个分组。 -
基于bus(总线):此总线不是系统总线,而是switch fabric。——收到总线带宽限制,一次处理一个分组,对于企业网、接入网速度完全够。 -
基于crossbar(互联网络):Banyan(榕树)网络,crossbar(纵横)和其它的互联网络(不同于互联网!)。每次把不同两根线之间短路即可随时接通。可以把分组切开,通过网络时间固定,便于调度。——克服总线带宽限制,对于骨干网来说常使用。
输出端口
-
物理层:把链路层的数据变成物理信号打出去; -
链路层:帧封装,加帧头帧尾,校验等等功能; -
网络层:排队,排到队头转发,交给链路层网卡。
存在缓存队列原因:交换结构速度和输出端口瞬时速度不一致。溢出则会被抛弃掉。
存在调度规则,不一定先来的先发(保证对某些应用服务质量的支持)。
缓存建议规则(自己看):拇指规则等。
调度机制:
-
FIFO (first in first out)先到先出
丢弃策略:
-
tail drop:丢弃刚到达的分组 -
priority:根据优先权丢失/移除分组 -
random:随机地丢弃/移除
-
-
优先权调度:多类,不同类别有不同的优先权。先传高优先级的队列中的分组
-
Round Robin (RR):循环所有类,公平轮换。
-
Weighted Fair Queuing (WFQ):每种分组享用不同权重的优先级占比。
graph TB
A[路由器组成]
A-->B[结构概况]
B-->B1[三层数据操作]
A-->C[输入端口]
C-->C1[最长地址前缀匹配]
C-->C2[缓存排队]
A-->D[交换结构]
D-->D1[内存]
D-->D2[总线]
D-->D3[互联网络]
A-->E[输出端口]
E-->E1[缓存排队]
E-->E2[调度机制]
34.3 IP: Internet Protocol
——互联网的网络层:路由协议、ICMP 协议(信令协议:报错、测试网络是否通畅-ping)、IP 协议
IP协议实现数据平面的转发功能:• 地址约定 • 数据报格式 • 分组处理的约定
IP 数据报格式
-
头部:无选项20字节(有可选项,可变长)
-
协议版本号(IPv4 0100) -
头部长度(以一当四,即最后乘4字节) -
数据类型(载荷类型,基本废弃了) -
数据报总长 -
16位分组的id标识、标志位、偏移量(用于分片重组)——第二行 -
TTL(存活倒计时)、上层协议的标识、头部校验和(不校验数据) -
32位源IP、32位目的IP -
可选内容(Options):一般没有,有的话可以记录自己的路径
-
-
内容(载荷):上层协议传输的数据
分片和重组
-
网络链路有MTU (最大传输单元),不同链路层协议的最大承载量不同。
-
大的IP数据报在网络上被分片,需要在接收端重新拼接起来。(8字节切分)。
-
路由器转发的时候不去组合,只管转发,不同片可能经过不同的路径。
-
有某一片(Fragment)没到,所有片全部丢弃。
分片的方法:
-
相同的ID,表示属于同一个分组 -
不同的偏移量,表明这一片在分组中的未知 -
最后一个分片fragflag标记为0,表示后面没有分片了(传完了)
IPv4地址
——IP地址:标识网络设备(主机、路由器)的接口。32位标示,对主机或者路由器的接口编址。
路由器IP地址一般有两个或两个以上IP地址、主机可以只有一个IP地址。
有线以太网网口链接到以太网络、物理上可以使用交换机连接、无线WiFi接口被WiFi基站连接——同一子网下一跳可达,服务由链路层提供。
子网的定义:
-
设备和接口断开,构成了一个个网络的孤岛。 -
可以分为纯子网、非纯子网(纯子网组成的)
子网的特点:
-
前缀一样(高位部分相同)、 -
无需路由器介入(交换机在IP层面看起来就是一跳)——一跳可达
例子,几个子网?
-
局域网一般多点连接(通过交换机)、长途连接一般只有两点。 -
一共有6个子网(路由器之间算长途连接,一个子网就两点)
IP 地址分类:
单播地址:点对点
-
A类:第一位为0,7bit代表网络号,24bit代表主机号 -
网络数:128-2=126个,全0,全1不使用; -
主机数:2^24-2个.
-
-
B类:前两位10,14bit代表网络号,16bit代表主机号 -
网络数:2^14-2个; -
主机数:2^16-2个.
-
-
C类:前三位110,21bit代表网络号,8bit代表主机号 -
网络数:2^21-2个; -
主机数:2^8-2个.
-
组播地址:发给属于组内的主机可以接收到
-
D类:前四位1110,28bit代表组播地址号
-
E类:前5 为11110,27bit预留将来使用
广播一般不用在互联网,只用在局域网通信。
以子网为单位散播子网可达信息,便于组织,一般通过对不同子网进行聚集进一步简化组织查找。
特殊IP地址:
-
主机号全为0---本网络
-
网络号全为0---本网络上的某个主机
-
32位全为0--本主机
-
主机部分:全为1--广播地址,这个网络的所有主机
-
32位全为1--本网络广播地址 -
只有主机部分全1--远程网络广播地址
-
-
127开头:回路地址--到IP层会反转朝上。
内网(专用)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
无类域间路由:CIDR
——按需分配,不完全按照字节进行划分网络号和主机号,根据需求在任意未知切分。
-
a.b.c.d/x, 其中 x 是地址中子网号的长度 -
子网掩码:32位,1代表网络号,0代表主机号 -
路由的时候,和子网掩码进行与操作即可提取出子网号。
转发表表项:目标子网号、子网掩码、下一条、接口。
转发算法:目标地址与子网掩码、匹配目标子网号、将分组转发到不同的接口、发送到下一跳。最后一个路由器解析主机号,转发到对应的主机。——都没有找到,则使用默认表项转发数据报
如何获得一个IP地址:
一、主机:配置四项信息
-
在主机里面配置:IP地址、子网掩码、默认网关、local-nameserver。
-
DHCP(动态主机配置协议):自动获取四个信息。允许主机在加入网络的时候,动态地从服务器那里获得IP地址等信息。plug-and-play
刚开始源地址0.0.0.0表示本机,目标地址255.255.255.255广播。可能有多个DHCP所以还需要第二次握手确认。——运行在UDP之上
-
主机广播寻找DHCP服务器 -
DHCP 服务器响应 -
主机请求IP地址 -
DHCP服务器发送地址、子网掩码等四项信息
自己看一下两次交互的过程
-
二、子网:从ISP获得地址块中分配一个小地址块
——进一步把主机号做拆分,可以嵌套地划分子网。
层次编址: 路由聚集
-
子网路由器向主网路由器发布通告,表明该路由器就是该子网前缀的下一条。 -
主网路由器向自己的ISP发布路由通告,综合多个路由信息向外发布
层次编址: 特殊路由信息
-
聚集的时候支持有空洞的大概聚集,匹配时可能有多个表项与IP匹配,采用最长前缀匹配。
-
聚集可以有效减少路由通告的数量,节约资源与计算代价。
-
不同子网掩码也可以使用同一个路由器进行聚集,如公司收购的情况,通告加入不同表项即可。
三、ISP:向ICANN机构申请
网络地址转换:NAT
——内部有内网地址,在互联网共享一个外网地址,记录每台设备的分组对应于外网的端口即可。
动机:1.省钱(IP不够用),2.可以方便更改内部IP,3.可以更改ISP,而不用改内网IP,4.外部看不到内网情况。
实现:
-
外出数据包:替换源地址和端口号为NAT IP地址 和新的端口号,目标IP和端口不变 -
记住每个转换替换对 -
进入数据包:替换目标IP地址和端口号,采用存 储在NAT表中的mapping表项,用(源IP,端口)
存在的问题:外部主动连接内部会找不到对应主机和端口,需要进行内网穿透。
争议:
-
违反分层原则(网络层更改了传输层内容) -
违反端到端原则,网络核心设备具备了复杂性 -
地址短缺问题可以被IPv6 解决
NAT 穿越问题:
-
静态配置映射 -
UPnP协议、IGD协议:动态查询、增加、删除映射表项。 -
中继:中继在2个连接之间桥接
IPv6
动机:
IPv4用完、分组切片重组负担很大、每次头部变化需要重新校验、头部格式改变帮助QoS
IPv5是实验室版本,被废弃了。
IPv6不允许分片,128位地址,40 字节头部。分组太大了发送错误报告让源主机自己切分。
头部字段:
-
版本号 -
优先级 -
流标签(对同一个流的数据做同样的处理) -
载荷长度 -
Next header-上层协议 -
hop limit-跳数限制 -
源、目的IP
移除了Checksum、在头部之外, 被 “Next Header” 字段标示、ICMPv6: ICMP的新版本
从IPv4到IPv6的平移:
迁移:逐步升级,不能设置flag day。
-
设置同时支持两种协议的路由器进行转换。 -
隧道Tunneling:在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
——至少还需要20年以上
graph LR
A[IP]
A-->B[数据报格式]
B-->B1[16位分组的id标识 标志位 偏移量]
A-->C[分片和重组]
C-->C1[分片原因]
C-->C2[分片重组方法]
A-->D[IPv4]
D-->D1[子网定义]
D-->D2[IP地址分类-特殊规定]
D-->D3[无类域间路由-子网掩码]
D-->D4[如何获得IP]
D4-->D41[主机]
D4-->D42[子网]
D4-->D43[ISP]
A-->E[NAT]
E-->E1[动机 实现 争议]
A-->F[IPv6]
F-->F1[动机 数据报格式 向IPv6迁移]
44.4 通用转发和SDN
网络层功能:转发、路由(控制平面数据平面相互配合)——传统方法:垂直集成、分布式实现、每个路由器都包含数据平面和控制平面。
使用原因
传统方法特点:他种类繁多网络设备更改很难,控制平面分布式实现,行为僵化、升级管理很难。
-
垂直集成:硬件、操作系统、协议都私有 -
每台设备包含所有层面的功能:控制功能分布式实现 -
控制逻辑固化:按照固定方式工作
传统方法问题:
-
昂贵 -
无法改变工作逻辑 -
管理困难 -
更新困难
——2005年开始重新思考网络控制平面的处理方式:
-
集中:远程的控制器集中实现控制逻辑 -
远程:数据平面和控制平面的分离
SDN:逻辑上集中的控制平面
远程计算流标,通过南向接口发送到每台分组交换设备,增加匹配规则和对应的操作。
-
可以随时更改升级 -
可以让多个分组交换机厂商参与竞争——更好的生态 -
可以在网络操作系统上运行网络应用
主要思路:
-
网络设备数据平面和控制平面分离 -
数据平面-分组交换机:动作有转发、丢弃、拷贝、泛洪、阻塞 -
控制平面-控制器+网络应用
分离的优势:
-
水平集成控制平面的开放实现创造出好的产业生态 -
集中式实现控制逻辑,网络管理容易 -
基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
——类比: 主框架到PC的演变,水平集成带来业界的繁荣。
传统方法流量工程的问题:
-
自主选择路径,只能通过改变链路代价来实现,非常困难且无法按自己需求实现 -
两路分拆负载均衡,无法完成,只能完全更换新路由算法 -
不同流量走不同路由,无法完成,只能基于目标进行转发
SDN特点:
-
分组交换机通过流表进行动作(常见协议OpenFlow) -
控制平面和数据平面分离 -
控制平面功能在数据交换设备之外实现 -
可编程控制应用:控制器之上以网络应用形式实现各种网络功能
SDN 架构:
-
数据平面交换机: -
基于南向API(例如OpenFlow),SDN控制器访问基于流的交换机 -
使用流表进行匹配控制,流表被控制器计算和安装 -
采用硬件实现通用转发功能,快速简单 -
定义了和控制器的协议
-
-
SDN控制器 -
维护网络状态信息 -
通过上面的北向API和网络控制应用交互 -
通过下面的南向API和网络交换机交互 -
逻辑上集中,物理上可以分布式实现
-
-
控制应用 -
控制的大脑: 采用下层提供的服务实现网络功能:路由、接入控制、防火墙、负载均衡 -
非绑定:可以适配不同公司的设备,生态更健康。
-
通用转发和SDN过程:查看分组条目属性、匹配流表表项(头部、计数、操作等等)、执行对应操作
OpenFlow
数据平面抽象:
-
流: 由分组(帧)头部字段所定义(广义的分组) -
通用转发:简单的分组处理规则 -
模式:字段属性 -
行动:丢弃、转发、修改等 -
优先权:优先选择那个匹配上的表项 -
计数器:匹配上后就+1,有#bytes级别和#packets级别
-
流表的表项结构:
-
Rule(规则、模式):十几个字段 -
Action(行动):各种操作 -
Stats(状态、计数):基于包、基于字节
OpenFlow 抽象:
match+action(匹配+行动模式): 统一化各种网络设备提供的功能
-
路由器:基于目标的转发 -
防火墙:基于目标端口、基于源IP等禁止 -
交换机:来自对应mac地址的分组进行转发 -
NAT:匹配IP地址和端口号进行重写 -
各种操作……实现各种各样的功能
例子:精确控制两台主机交互数据的路径,在每台分组交换机的流表中进行配置。
graph TB
A[通用转发和SDN]
A-->B[使用原因]
B-->B1[传统方法问题]
B-->B2[SDN特点]
A-->C[SDN]
C-->C1[水平集成优势]
C-->C2[SDN架构]
A-->D[OpenFlow]
D-->D1[数据平面抽象]
D1-->D11[流 通用转发 表项结构]
D-->D2[OpenFlow抽象]
D2-->D21[match+action]
总结:路由表、流表怎么来?——控制平面(下一章)
作者介绍