网络层:数据平面
网络中每一台主机和路由器都有一个网络层部分。
网络层数据平面:
网络层中每台路由器的功能
决定到达路由器输入链路之一的数据报【网络层分组】,如何转发到该路由器输出链路之一。
传统IP转发:转发基于数据报的目的地址
通用转发:可使用数据报首部中几个不同域的值执行转发和其他功能
网络层控制平面:
控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式
路由选择算法
OSPF/BGP等路由选择协议
网络层概述
下图是一个简单的网络
有H1,H2两台主机
假设H1向H2发送消息
H1中的网络层取得来自H1运输层的报文段
将每个报文段封装成一个数据报,
向相邻路由器R1发送该数据报
在接收方主机H2
网络层收到来自相邻路由器R2的数据报
提取出运输层报文段
将其向上交付给H2的运输层
路由器只包含网络层/数据链路层/物理层协议部分
转发和路由选择:数据平面和控制平面
网络层的作用表面看简单,即将分组从一台发送主机移动到一台接收主机
- 转发
当一个分组到达某路由器的一条输入链路时,
该路由器必须将该分组移动到适当的输出链路
- 路由选择
分组从发送方流向接收方时,
网络层须决定这些分组所采用的路由或路径
计算路径的算法称为路由选择算法
转发指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。
转发发生的时间尺度短,采用硬件实现
路由选择指确认分组从源到目的地所采取的端到端路径的网络范围处理过程。
路由选择发生的时间尺度长得多,常用软件实现。
每台网络路由器中有一个关键元素是它的转发表
路由器检查到达分组首部的一个或多个字段值,
使用这些首部值在其转发表中索引,来转发
控制平面:传统的方法
路由选择算法决定插入该路由器转发表的内容
路由选择算法运行在每台路由器中,
在每台路由器中都包含了转发和路由选择两种功能
在一台路由器中的路由选择算法与在其他路由器中的路由选择算法通信,
及计算出它的转发表的值
控制平面:SDN方法
路由选择厂商在其产品中采用传统方法。
每台路由器有一个与其他路由器的路由选择组件通信的路由选择组件
上图,显示从路由器物理上分离的另一方法。
远程控制器计算和分发转发表以供每台路由器使用。
上图,控制平面路由选择功能与物理的路由器是分离的。
远程控制器计算并分发转发表。
路由器和远程控制器,通过交换包含转发表和其他路由选择信息的报文通信。
上图,计算转发表并与路由器交互的控制器用软件实现。
网络服务模型
网络服务模型定义了分组在发送与接收端系统间的端到端运输特性
考虑网络层能提供的某些可能服务
- 确保交付
- 有时延界限的确保交付
- 有序分组交付
- 确保最小带宽
- 安全性
因特网的网络层提供单一服务,称尽力而为
不保证有序,不保证交付,不保证端到端时延,不保证最小带宽
约定,
分组交换机指一台通用分组交换设备,它依据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。
分组交换机又可分为
链路层交换机:依据链路层帧字段来转发
路由器:依据网络层数据报首部字段来转发
路由器工作原理
- 输入端口
在路由器中执行终结入物理链路的物理层功能
还要与位于链路远端的数据链路层交互来执行数据链路层功能
在输入端口还要执行查找
到达的分组通过路由器的交换结构转发到输出端口
控制分组从输入端口转发到路由选择处理器
- 交换结构
将路由器的输入端口连接到它的输出端口
这种交换结构完全包含在路由器中,是一个网络路由器中的网络
- 输出端口
存储从交换结构接收的分组
通过执行必要的链路层和物理层功能在输出链路上传输这些分组
链路是双向时,输出端口常与该链路的输入端口成对出现在同一线路卡上
- 路由选择处理器
路由选择处理器执行控制平面功能。
传统路由器中,
它执行路由选择协议,
维护路由选择表
关联链路状态信息
为该路由器计算转发表
SDN路由器中,路由选择处理器负责与远程控制器通信
路由选择处理器还执行网络管理功能。
路由器的输入端口,输出端口,交换结构总是用硬件实现。
数据平面以纳秒时间尺度运行,
路由器的控制功能以毫秒或秒时间尺度运行,
这些控制功能包括执行路由选择协议,对上线或下线的连接链路进行响应,与远程控制器通信,和执行管理功能
控制平面功能常用软件实现,在路由选择处理器上执行。
- 基于目的地转发
- 通用转发
输入端口处理和基于目的地转发
输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。
在这些地方,路由器使用转发表来查找输出端口,使到达的分组能经过交换结构转发到该输出端口
转发表从路由选择处理器经过独立总线复制到线路卡
使用在每个输入端口的影子副本,转发决策能在每个输入端口本地做出
考虑最简单情况,
一个入分组基于该分组的目的地址交换到输出端口
作为一个说明处理规模问题例子,假设路由器有4条链路,编号0到3
分组按地址范围,分别转发到对应链路接口
使用上述风格的转发表,路由器用分组目的地址的前缀与该表表项匹配
多个匹配时,使用最长前缀匹配规则
一旦通过查找确定了某分组的输出端口,
则该分组就能发送进入交换结构
查找在输入端口处理中可认为是最重要动作,
其他动作是
- 物理层和链路层处理
- 检查分组版本号,检验,寿命,重写后两个字段
- 更新用于网络管理的计数器
交换
通过交换结构,分组实际地从一个输入端口交换【转发】到一个输出端口
- 经内存交换
最早的路由器是传统计算机,
输入和输出端口功能像传统操作系统中的I/O设备一样
一个分组到达一个输入端口时,该端口会先通过中断方式向路由选择处理器发出信号
分组从输入端口处被复制到处理器内存
处理器提取目的地址,
在转发表找输出端口,
将分组复制到输出端口缓存
这时,
如内存带宽为每秒可写进内存或从内存读出最多B个分组,
则总的转发吞吐量【分组从输入端口被传送到输出端口的总速率】必小于B/2
许多现代路由器通过内存进行交换,
差别是,
目的地址的查找,将分组存储进适当的内存存储位置由输入线路卡完成
- 经总线交换
输入端口经一根共享总线,将分组直接传送到输出端口
不需路由器选择处理器的干预
让输入端口为分组预先计划一个交换机内部标签
指示本地输出端口
使分组在总线上传送和传输到输出端口
分组能由所有输出端口收到,
但只有与该标签匹配的端口才能保存该分组
然后标签在输出端口被去除
如多个分组同时到达路由器,每个位于不同输出端口
一次只能一个分组跨越单一总线
- 经互联网络交换
多个总线组成互联网络
如图4-6
每条垂直的总线在交叉点与每条水平的总线交叉
交叉点通过交换结构控制器能在任何时候开启和闭合
当某分组到达端口A,需转发到端口Y时,
交换机控制器闭合总线A和Y交叉部分的交叉点
端口A在其总线上发送该分组
分组由总线Y接收
来自端口B的一个分组在同一时间能转发到端口X
A到Y
B到X的分组使用不同的输入和输出总线
纵横式网络可并行转发多个分组
纵横式交换机是非阻塞的,
主要没其他分组当前被转发到该输出端口,转发到输出端口的分组将不会被达到输出端口的分组阻塞
输出端口处理
输出端口取出已经存放在输出端口内存的分组,将其发送到输出链路
选择,取出,链路层和物理层传输
何处出现排队
在输入端口和输出端口处,可形成分组队列
排队的位置和程度将取决于流量负载,交换结构的相对速率,和线路速率
随着这些队列的增长,路由器的缓存空间将耗尽,无内存可用时,存储到达分组时将出现丢包
设
输入线路速度和输出线路速度相同,
均为R_{line}【单位为每秒分组数】
且有N个输入端口,N个输出端口
设所有分组有相同固定长度,
分组以同步方式到达输入端口,
任何链路发送分组的时间等于任何链路接收分组的时间
在这样时间间隔内,在一个输入链路能到达0或1个分组
定义交换结构传送速率R_{switch}为从输入端口到输出端口能移动分组的速率,
如R_{switch}比R_{line}快N倍
则在输入端口处仅会出现微小的排队
输入排队
如交换结构不能快的使所有分组无时延通过
输入端口将出现分组排队
假定
基于纵横式交换
- 所有链路速度相同
- 一个分组能以一条输入链路接收一个分组所用的相同的时间量,
从任意一个输入端口传到给定输出端口
- 分组按FCFS方式,从一指定输入队列移动到其要求的输出队列中
只要输出端口不同,
多个分组可并行传送
如位于两输入队列前端的两个分组是发往同一输出队列的,则其中一个分组被阻塞,且需在输入队列等待。交换结构一次只能传送一个分组到指定端口。
因为队列前分组本次由于和其他队列前某分组导向同一目的端口,而未被选中,本次阻塞,导致其后一分组,也等待,称为线路前部阻塞。
输出排队
假设
- R_{switch}比R_{line}快N倍
- 且到达N个输入端口的每个端口的分组,其目的地是相同的输出端口
这时,
在向输出链路发送一个分组的时间内,
将有N个新分组到达该输出端口
输出端口在一个单位时间【该分组的传输时间】内仅能传输一个分组
这N个到达分组必须排队经输出链路传输
当没有足够内存来缓存一个入分组时,
要么丢弃到达的分组,
要么删除一个或多个已排队的分组
某些情况下,
缓存填满前便丢弃一个分组,称为主动队列管理
分组调度
先进先出
优先权排队
到达输入链路的分组被分类放入输出队列中的优先权类
每个优先权类通常有自己的队列。
循环和加权公平排队
循环排队规则下,
分组像使用有限权排队那样被分类
但在类之间不存在严格的服务优先权,
循环调度器在这些类之间轮流提供服务
最简单形式循环调度中,类1的分组被传输,
接着是类2的分组,接着又是类1的分组,如此往复。
一个所谓的保持工作排队规则,在有【任何类的】分组排队等待传输时,
不允许链路保持空闲。
寻找给定类的分组但没找到时,保持工作的循环规则将立即检查循环序列的下一个类。
一种通用形式的循环排队已经广泛实现在路由器中,
即所谓的加权公平排队规则。
到达的分组被分类并在合适的每个类的等待区域排队,
与循环调度一样,
WFQ调度器也以循环方式为各个类提供服务
WFQ【加权公平排队】和循环排队的不同在于:
每个类在任何时间间隔内可能收到不同数量的服务
具体而言,
每个类i被分配一个权w_{i}
使用WFQ方式,
在类i有分组要发送的任何时间间隔,
第i类将确保接收到的服务部分等于w_{i}/(∑w_{j}),式中分母中的和是计算所有有分组排队等待传输的类别得到的。
对一条传输速率为R的链路,
第i类总能获得至少为R*w_{i}/(∑w_{j})的吞吐量
网际协议:Ipv4,寻址,Ipv6及其他
Ipv4数据报格式
IPv4数据报中的关键字段
- 版本号
这4比特规定了数据报的IP协议版本,
通过版本号,路由器能确定如何解释IP数据报的剩余部分
不同的IP版本使用不同的数据报格式
- 首部长度
一个IPv4数据报可包含一些可变数量的选项
选项包括在IPv4数据报首部中,
故需用这4比特来确定IP数据报中载荷实际开始地方
一般的IP数据报有20字节的首部
- 服务类型
实时数据报/非实时流量
提供特定等级的服务是一个由网络管理员对路由器确定和配置的策略问题
- 数据报长度
IP数据报的总长度[首部加上数据],以字节计。
该字段16比特。
- 标识,标志,片偏移
IP分片
- 寿命
每当一条路由器处理数据报时,该字段的值减1.若变为0,则该数据报被丢弃
- 协议
通常仅当一个IP数据报到达其最终目的地时才会有用
该字段值指示了IP数据报的数据部分应交给哪个特定的运输层协议。
值为6表明数据部分交给TCP
值为17表明数据要交给UDP
IP数据报中的协议号所起的作用,类似于运输层报文端中端口号字段所起的作用。
协议号是将网络层与运输层绑定到一起的黏合剂。
端口号是将运输层和应用层绑定到一起的黏合剂。
链路层帧也有一个特殊字段用于将链路层与网络层绑定到一起
- 首部检验和
首部检验和用于帮助路由器检测收到的IP数据报中的比特错误
首部检验和:
将首部中的每2个字节当作一个数,
用反码算术对这些数求和
该和的反码【称为因特网检验和】存放在检验和字段中
路由器要对每个收到的IP数据报计算其首部检验和,
如数据报首部中携带的检验和与计算得到的检验和不一致,
则检测出差错。
路由器一般会丢弃检测出错误的数据报
每台路由器上必须重新计算检验和并再次存放到原处,
因为TTL及可能的选项字段会改变
在TCP/IP的运输层和网络层都执行差错检测,原因:
在IP层只对IP首部计算了检验和
TCP/UDP检验和是对整个TCP/UDP报文段进行的
TCP/UDP与IP不一定都必须属于同一个协议栈
原则上,
TCP能运行在一个不同的协议上,
而IP能携带不一定要传递给TCP/UDP的数据
- 源和目的IP地址
某源生成一个数据报时,在源IP字段插入它的IP地址,
在目的IP地址字段插入其最终目的地地址
源主机通过DNS查找来决定目的地址
- 选项
允许IP首部被扩展
- 数据【有效载荷】
IPv4数据报分片
有的链路层协议能承载大数据报,有的只能承载小分组
一个链路层帧能承载的最大数据量叫作最大传送单元【MTU】
每个IP数据报封装在链路层帧中从一台路由器传输到下一台路由器
故链路层协议的MTU严格限制着IP数据报的长度
发送方与目的路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU
想象你是,一台互联几条链路的路由器,
且每条链路运行具有不同MTU的链路层协议
设你从某条链路收到一个IP数据报
通过检查转发表确定出链路
且该条出链路的MTU比该IP数据报的长度要小
解决办法是:
将IP数据报中的数据分片成两个或更多个较小的IP数据报
用单独的链路层帧封装这些较小的IP数据报,通过输出链路发送这些帧。
每个这些较小的数据报称为片。
片在其到达目的地运输层以前需要重新组装。
为坚持网络内核保持简单的原则,
IPv4的设计者决定将数据报的重新组装工作放到端系统,而非网络路由器
一台目的主机从相同源收到一系列数据报时,
它需确定这些数据报中的某些是否是一些原来较大的数据报的片,
如某些数据报是这些片的话,
则它须进一步确定何时收到最后一片
且如何将这些接收到的片拼接到一起以形成初始的数据报
为让目的主机执行这些重新组装任务,
IPv4的设计者将标识,标志,和片偏移字段放在IP数据报首部中。
生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号。
发送主机通常将它发送的每个数据报的标识号加1.
当某路由器需要对一个数据报分片时,
形成的每个数据报【即片】具有初始数据报的源地址,目的地址与标识号。
当目的地从同一发送主机收到一系列数据报时,
它能检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片
为了让目的主机绝对地相信它已收到了初始数据报的最后一个片,
最后一个片的标志比特被设为0,
而所有其他片的标志比特被设为1
为了让目的主机确定是否丢失了一个片【且能按正确顺序重新组装】
使用偏移字段指定该片应放在初始IP数据报的哪个位置
IPv4编址
一台主机通常只有一条链路连接到网络,
当主机中的IP想发送一个数据报时,
它就在该链路上发送
主机与物理链路间的边界叫接口
现考虑一台路由器及其接口
路由器的任务是从链路上接收数据报并从某些其他链路转发出去
路由器必须拥有两条或更多链路与它连接
路由器与它的任意一条链路之间的边界也叫接口
一台路由器有多个接口,每个接口有其链路
每台主机和路由器都能发送和接收IP数据报,
IP要求每台主机和路由器接口拥有自己的IP地址,
从技术上讲,
一个IP地址与一个接口相关联
而不是与包括该接口的主机或路由器相关联
每个IP地址长度为32比特,
因此共2^32个可能的IP地址
通常按所谓点分十进制记法
地址中的每个字节用它的十进制形式书写,
各字节间以句点隔开
在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址
一个接口的IP地址的一部分需要由其连接的子网来决定
该图中,一台路由器【有3个接口】,用于互联7台主机。
左上侧3台主机及它们连接的路由器接口,都有一个形如223.1.1.xxx的IP地址。
也即,在它们的IP地址中,最左侧的24比特是相同的。
这四个接口也通过一个并不包含路由器的网络互联起来。
该网络可能由一个以太网LAN互联。
此时,这些接口将通过一台以太网交换机互联,
或通过一个无线接入点互联
用IP的术语说,
互联这3个主机接口与一个路由器接口的网络形成一个子网
IP编址为这个子网分配一个地址223.1.1.0/24
其中的/24记法,有时称为子网掩码
指示32比特中的最左侧24比特定义了子网地址。
子网223.1.1.0/24由3个主机接口223.1.1.1/2/3和一个路由器接口223.1.1.4组成
任何其他要连到223.1.1.0/24网络的主机都要求其地址具有223.1.1.xxx的形式。
一个子网的IP定义并不局限于连接多台主机到一个路由器接口的以太网段。
上图显示了3台通过点对点链路彼此互联的路由器
每台路由器有3个接口
每条点对点链路使用一个
一个用于直接将路由器连接到一对主机的广播链路。
对于一个路由器和主机的通用互联系统,按如下定义系统中的子网:
为了确定子网,
分开主机和路由器的每个接口,
产生几个隔离的网络岛,
使用接口端接这些隔离的网络的端点,
这些隔离的网络中的每一个都叫作一个子网
上图中有6个子网
223.1.1/2/3/7/8/9
一个具有多个以太网段和点对点链路的组织【如一个公司或学术机构】
将具有多个子网
在给定子网上的所有设备有相同的子网地址
全球因特网的编址
因特网的地址分配策略称为无类别域间路由选择【CIDR】
CIDR将子网寻址的概念一般化了,
使用子网寻址时,
32比特的IP地址被划为两部分,
且也具有点分十进制数形式a.b.c.d/x
x指示了地址的第一部分中的比特数
形如a.b.c.d/x的地址的x最高比特构成了IP地址的网络部分,
且经常被称为该地址的前缀
一个组织常被分配一块连续的地址
即具有相同前缀的一段地址。
这时,组织内部的设备的IP地址将共享共同的前缀,
组织网络外部的路由器仅考虑前面的前缀比特x
也即,当该组织外部的一台路由器转发一个数据报,
且该数据报的目的地址位于该组织的内部时,
仅需考虑该地址的前面x比特
这减少了在这些路由器中转发表的长度,
因为a.b.c.d/x的单一表项足以将数据报转发到该组织内的任何目的地。
这种使用单个网络前缀通告多个网络的能力通常称为地址聚合,也称为路由聚合或路由摘要
当地址按块分给ISP,又由ISP分给客户组织时,
地址聚合工作极为有效
上图是,
一个路由器包含了两类性质不同子网情况,
此时更大的因特网上的其他路由器看见地址块200.23.16.0/20和200.23.18.0/23时,使用最长前缀匹配。
一个地址的剩余32-x比特,可认为是用于区分该组织内部设备的。
该组织内部的路由器转发分组时,才考虑这些比特。
在CIDR被采用前,IP地址的网络部分被限制为长度为8/16/24特别,这是一种称为分类编址的编址方案。
具有8、16、24比特子网地址的子网称为A,B,C类网络。
一个C类子网,仅能容纳2^8 - 2 = 254台主机。有两个地址用作特定用途。
在分类编址下,
如一个有2000台主机的组织常被分给一个B类(/16)地址
这导致了B类地址空间的迅速损耗,及所分配空间的利用率低下。
255.255.255.255目的地址,对应同一个网络中的所有主机。
一个组织如何为其设备得到一个地址块,
再看,一个设备如何从某组织的地址块中分配到一个地址的
获取一块地址
网络管理员也许首先与他的ISP联系,
该ISP可能从已分给它的更大地址块中提供一些地址。
从一个ISP获取一组地址,不是得到一块地址唯一方法。
IP地址由因特网名字和编号机构管理,管理规则基于[ RFC7020]
ICANN,分配IP地址,管理DNS根服务器,分配域名,解决域名纷争。
ICANN--区域性因特网注册机构--...--ISP--主机
获取主机地址:动态主机配置协议
某组织一旦获得了一块地址,
就可为本组织内的主机与路由器接口逐个分配IP地址。
系统管理员,常手工配置路由器中的IP地址
主机地址也能手动配置
但目前更多使用动态主机配置协议
DHCP允许主机自动获取一个IP地址,
网络管理员能配置DHCP,使某给定主机每次与网络连接时能得到一个相同的IP地址或某主机将被分配一个临时的IP地址,每次与网络连接时该地址也许是不同的。
除主机IP地址分配外,DHCP还允许一台主机得知其他信息。
如子网掩码,第一跳路由器地址【默认网关】,本地DNS服务器地址
DHCP有将主机连接进一个网络的网络相关方面的自动能力,常称为即插即用协议或零配置协议。
DHCP是一个客户-服务器协议。
客户常为新到达的主机,
它要获得含自身使用的IP地址在内的网络配置信息。
简单场合下,
每个子网有一台DHCP服务器
如某子网没服务器,则需一个DHCP中继代理【常为一台路由器】,
代理知道用于该网络的DHCP服务器地址
对一台新到达的主机,
针对上图的网络设置,
DHCP协议是一个4个步骤的过程,
下图yiaddr指示分配给该新到达客户的地址
- DHCP服务器发现
一台新到达主机的首要任务是发现一个要与其交互的DHCP服务器
可通过使用DHCP发现报文完成,
客户在UDP分组向端口67发该发现报文,
该UDP分组封装在一个IP数据报中
DHCP客户生成包含DHCP发现报文的IP数据报,
使用广播目的地址255.255.255.255
且使用"本主机"源IP地址0.0.0.0
DHCP客户将该IP数据报传递给链路层,
链路层然后将该帧广播到所有与该子网连接的节点
- DHCP服务器提供
DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,
该报文向该子网的所有节点广播
仍使用IP广播地址255.255.255.255
在子网中可能存在几个DHCP服务器,
客户也许会发现它处于能在几个提供者之间进行选择的优越位置。
每台服务器提供的报文包含有收到的发现报文的事务ID,向客户推荐的IP地址,网络掩码及IP地址租用期【IP地址有效的时间量】
- DHCP请求
新到达的客户从一个或多个服务器提供中选择一个
向选中的服务器提供DHCP请求报文进行响应,
回显配置的参数
- DHCP ACK
服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。
一旦客户收到DHCP ACK后,交互便完成了,且客户能在租用期使用DHCP分配的IP地址。
客户可能在该租用期超时后还使用这地址,
DHCP还提供了一种机制以允许客户更新它对一个IP地址的租用。
移动性看,
每当节点连到一个新子网,
要从DHCP得到一个新IP地址,
一个移动节点在子网间移动时,
不能维持与远程应用间的TCP连接。
网络地址转换
每当一个SOHO想安装一个LAN以互联多台机器时,
需ISP分配一组地址以供该SOHO的所有IP设备【电话,平板电脑,打印机...】使用。
子网变大时,需分配一块较大地址
如ISP已为SOHO网络的当前地址范围分配过一块连续地址该如何?
家庭主人要首先知道的管理IP地址的典型方法?
网络地址转换
位于家中的NAT使能的路由器有一个接口,
该接口是上图右侧家庭网络一部分。
家庭网络内的编址像上面所看。
其中的所有4个接口有相同的网络地址10.0.0/24
地址空间10.0.0.0/8是在[RFC 1918]保留的三部分IP地址空间之一,
这些地址用于上图的家庭网络等专用网络,或具有专用地址的地域。
有专用地址的地域指其地址仅对该网络中的设备有意义的网络。
许多家庭网络,使用了相同的地址空间10.0.0.0/24
在一个给定家庭网中的设备能使用10.0.0.0/24编址彼此发送分组。
转发到家庭网络之外进入更大的全球因特网的分组显然不能使用这些地址【或作为源地址,或作为目的地址】
因为有很多网络使用这块地址。
即10.0.0.0/24地址仅在给定的网络中才有意义。
如专用地址仅在给定网络中才有意义,
当向或从全球因特网发送或接收分组时如何处理编址问题。
地址在何处需要唯一。
NAT使能路由器对于外部世界甚至不像一台路由器。
NAT路由器对外界的行为如同一个具有单一IP地址的单一设备。
所有离开家庭路由器流向更大因特网的报文都拥有一个源IP地址138.76.29.7
且所有进入家庭的报文都拥有同一个目的IP地址138.76.29.7
本质上讲,
NAT使能路由器对外界隐藏了家庭网络的细节
【家庭网络计算机从哪个得到其地址,路由器从哪儿得到它的单一IP地址。通常为DHCP】
路由器从ISP的DHCP服务器得到它的地址,
且路由器运行一个DHCP服务器,
为位于NAT-DHCP路由器控制的家庭网络地址空间中的计算机提供地址
如从广域网到达NAT路由器的所有数据报都有相同的目的IP地址【特别对NAT路由器广域网一侧的接口】,路由器怎样知道它应将某个分组转发给哪个内部主机。
NAT路由器上一张NAT转换表,表项包含了端口号及其IP地址。
NAT的争议:
- 端口号传统下用于进程寻址,NAT下参与主机寻址。
家庭网络中的服务器需在周知端口号上等待接入请求
解决方案:
NAT穿越,通用即插即用。
- 路由器指第三层设备,且应处理只能达到网络层的分组。
NAT违反主机应直接彼此对话原则,修改了数据报IP地址及端口
NAT已成为因特网的一个重要组件,称为所谓中间盒
中间盒运行在网络层,不执行传统的数据报转发,而执行诸如NAT,流量流的负载均衡,流量防火墙等。
检查数据报:防火墙,和入侵检测系统
对抗恶意分组攻击的两种流行的防御措施是防火墙和入侵检测系统
网络和因特网间的防火墙
防火墙检查数据报和报文段首部字段
拒绝可疑数据报进入内部网络
基于源和目的IP地址及端口号阻挡分组
IDS,常位于网络的边界,执行"深度分组检查"
检查数据报【包括应用层数据】中的首部字段,
检查其有效载荷。
IDS具有一个分组特征数据库,
特征是已知攻击的一部分。
随新攻击的发现,该数据库自动更新特征。
分组通过IDS时,IDS试图将分组的首部字段和有效载荷与其特征数据库中的特征匹配。
Ipv6
Ipv6数据报格式
- 扩大的地址容量
IPv6将IP地址长度从32比特增加到128比特。
这确保全世界不会用尽IP地址。
除了单播与多播外,IPv6还引入了一任播地址。
使数据报交付给一组主机中的任意一个。
- 简化高效的40字节首部
40字节定长首部允许路由器更快地处理IP数据报
一种新的选项编码允许更灵活的选项处理
- 流标签
IPv6有一个难捉摸的流定义。
该字段可用于"给属于特殊流的分组加上标签,特殊流是发送方要求进行特殊处理的流"
- 版本
IPv6该字段值设为6,4比特
- 流量类型,8比特
- 流标签,20比特
用于标识一条数据报的流
能对一条流中的某些数据报给出优先权,或它能用来对来自某些应用的数据报给出更高优先权
- 有效载荷长度,16比特
作为一个无符号整数,
给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数量
- 下一个首部
该字段标识数据报中的内容[数据字段]需交付给哪个协议[如TCP或UDP...]
该字段使用与IPv4首部中协议字段相同的值
- 跳限制
转发数据报的每台路由器对该字段内容减1
如跳限制到0,数据报被丢弃
- 源地址和目的地址
IPv6 128比特地址的各种格式描述见RFC 4291
- 数据
IPv6数据报的有效载荷部分
数据报达到目的地时,有效载荷就从IP数据报移出,交给在下一个首部字段中指定的协议处理
IPv4中存在,IPv6中不存在的几个字段
- 分片/重新组装
IPv6不允许在中间路由器上进行分片和重新组装
如路由器收到的IPv6数据报太大,而不能转发到出链路
路由器丢弃该数据报,向发送方发回一个分组太大的ICMP差错报文即可.
于是,发送方能使用较小长度的IP数据报重发数据
- 首部检验和
因特网中的运输层和数据链路层协议执行了检验操作
网络层移除,以便加快处理速度
- 选项
可能出现在IPv6首部中由"下一个首部"指出的位置上.
就如TCP/UDP协议首部可为下一个首部一样,选项字段也可为下一个首部
从IPv4到IPv6的迁移
新型IPv6使能系统可发送/路由/接收 IPv4数据报
已部署的具有IPv4能力的系统却不能处理IPv6数据报
在实践中广泛采用的IPv4到IPv6迁移的方法包括建隧道
除IPv4到IPv6迁移外的许多其他场合的应用都具有建隧道的关键概念
建隧道依据的基本思想如下:
假定两个IPv6节点,要使用IPv6数据报进行交互
但它们经中间IPv4路由器互联
将两条IPv6路由器中间IPv4路由器的集合称为一个隧道
借助于隧道,在隧道发送端的IPv6节点可将整个IPv6数据报放到一个IPv4数据报的数据[有效载荷]字段中.
该IPv4数据报的地址设为指向隧道接收端的IPv6节点,
再发给隧道中的第一个节点
隧道中间的IPv4路由器在它们之间为该数据报提供路由
像对待其他数据报一样
隧道接收端的IPv6节点收到该IPv4数据报
确定该IPv4数据报含有一个IPv6数据报
从中取出IPv6数据报
再为该IPv6数据报提供路由
通用转发和SDN
因特网路由器的转发传统上仅基于分组的目的地址
目前许多执行第三层功能的中间盒有了大量发展
NAT盒重写首部IP地址和端口号
防火墙基于首部字段值阻拦流量或重定向分组以进行其他处理[如深度分组检查]
负载均衡将请求某种给定服务的分组转发到提供该服务的服务器集合中一个
第二层交换机和第三层路由器等中间盒的剧增,给网络操作员带来了麻烦.
近期软件定义网络的进展预示且正提出一种统一的方法,以一种现代,简洁和综合方式,提供多种网络层功能及某些链路层功能.
基于目的地转发的特征总结为:
查找目的IP地址
将分组发送到有特定输出端口的交换结构
现考虑一种更有意义的通用"匹配加动作"范式
能对协议栈的多个首部字段进行"匹配"
这些首部字段与不同层次的不同协议相关联
动作包括:
将分组转发到一个或多个输出端口
跨越多个通向服务的离开接口进行负载均衡分组
重写首部值
有意识地阻挡/丢弃某个分组
为进一步处理和动作向某个特定的服务器发送一个分组
等等
通用转发中,
一张匹配加动作表将在4.2.1看到的基于目的地的转发表一般化了
能使用网络层和/或链路层源和目的地址做出转发决定
转发设备描述为分组交换机
下图显示位于每台分组交换机中的一张匹配加动作表
该表由远程控制器计算,安装和更新
虽然在各台分组交换机中的控制组件可相互作用,
但实践中通用匹配加动作能力是通过计算,安装,更新这些表的远程控制器实现的.
后续对通用转发的讨论将基于OpenFlow
它已成为匹配加动作转发抽象,控制器,及更为一般的SDN革命等概念的先驱
主要考虑OpenFlow1.0,
该标准引入了SDN抽象和功能
匹配加动作转发表在OpenFlow中称为流表,它的每个表项包括:
- 首部字段值的集合
入分组将与之匹配
与基于目的地转发一样,基于硬件匹配在TCAM内存中执行得最为迅速
匹配不上流表项的分组将被丢弃或发送到远程控制器做更多处理
- 计数器集合
计数器可包括已经与该表项匹配的分组数量,及自从该表项上次更新以来的时间
- 当分组匹配流表项时所采取的动作集合
动作可能将分组转发到给定的输出端口,丢弃该分组,复制该分组,将它们发送到多个输出端口,和/或重写所选的首部字段
将学习每台分组交换机网络范围的匹配规则集合如何来实现多种多样功能
如路由选择/第二层交换路由/防火墙/负载均衡/虚拟网络/...
通过在网络分组交换机的集合中适当地编程/配置这些表,
网络范围的行为能被类似地编程
匹配
下图显示了11个分组首部字段和入端口ID
该ID能被OpenFlow1.0中的匹配加动作规则所匹配
到达一台分组交换机的一个链路层帧将包含一个网络层[第三层]数据报作为其有效载荷,
该载荷通常依次将包含一个运输层[第四层]报文段
第一个观察是,
OpenFlow的匹配抽象允许对来自三个层次的协议首部所选择的字段进行匹配
显示在下图的源和目的MAC地址是与帧的发送和接收接口相关联的链路层地址
通过基于以太网地址而不是IP地址进行转发,看到OpenFlow使能的设备能等价于路由器转发数据报以及交换机转发帧.
以太网类型字段对应于较高层协议,
利用该字段分解该帧的载荷,
且VLAN字段与所谓虚拟局域网相关联
入端口是指分组交换机上接收分组的输入端口
流表项也可有通配符
如
一个流表中IP地址128.119.*.*将匹配其地址的前16比特为128.119的任何数据报所对应的地址字段
每个流表项也具有相应的优先权
如一个分组匹配多个流表项,选定的匹配和对应的动作,将是其中有最高有限权的.
最后,
我们观察到并非一个IP首部中的所有字段都能被匹配
OpenFlow不允许基于TTL字段或数据报长度的匹配
动作
每个流表项有0个或多个动作列表
这些动作决定了应用于与流表项匹配的分组的处理
如有多个动作,它们以在表中规定的次序执行
其中最重要的动作可能是:
- 转发
一个入分组可转发到一个特定的物理输出端口,广播到所有端口[除分组到达端口]
或通过所选的端口集合进行广播
该分组可能被封装并发送到用于该设备的远程控制器
该控制器可能或可能不对该分组采取某些动作,
包括安装新的流表项,及可能将该分组返回给设备以在更新的流表规则集合下进行转发
- 丢弃
没有动作的流表项表明某个匹配的分组应当被丢弃
- 修改字段
在分组被转发到所选的输出端口前,
分组首部的10个字段中的值可以重写
匹配加动作操作中的OpenFlow例子
- 第一个例子:简单转发
假定希望的转发行为是:
来自h5或h6发往h3或h4的分组从s3转发到s1,从s1转发到s2
在s1中的流表项将是:
在s3中的流表项,使得该数据报从h5/h6经过出接口3转发到s1
最后,也需要在s2中有一个流表项来完成第一个例子,使得从s1到达的数据报转发到它们的目的主机h3或h4
- 第二个例子:负载均衡
考虑一个负载均衡场景,
来自h3发往10.1.*.*的数据报经过s1和s2之间的直接链路转发
与此同时,来自h4发往10.1.*.*的数据报经过s2和s3,s3到s1之间的链路转发
这种行为不能通过基于IP的目的地址转发取得,这种情况下,在s2中的流表项将是
- 第三个例子:充当防火墙
考虑一个防火墙场景,其中s2仅希望[在它的任何接口上]接收来自与s3相连的主机所发送的流量
如果在s2的流表中没有其他表项,则仅有来自10.3.*.*的流量将被转发到与s2相连的主机
学习SDN时,再次考察流表,
其中SDN控制器计算和分发流表,
协议用于在分组交换机和它的控制器之间通信.
小结
网络层的数据平面功能:即每台路由器决定到达路由器输入链路之一的分组如何转发到该路由器的输出链路之一
输入/输出端口
基于目的地的转发
路由器的内部交换机制
分组排队管理
..
传统转发
通用转发
Ipv4/Ipv6协议
因特网编址