4 网络层: 数据平面
4.1 网络层概述
4.1.1 转发和路由选择
- OSI网络层功能
- 转发
- 将分组从一个输入链路接口转移到适当的输出链路借口的路由器本地操作, 一般硬件实现
- 排队和schedule
- 数据平面
- 路由选择:
- 确定分组从源到目的地所采取的端到端路径的网络范围处理过程, 一般软件实现
- 决定了转发表, 指出分组将被转发的路由器的输出链路接口
- 控制平面
4.1.2 网络服务模型
- 网络服务模型: 分组在发送和接收端系统之间的端到端运输特性
- 可能的服务:
- 确保交付
- 具有时延上限的确保交付
- 有序分组交付
- 确保最小带宽
- 安全性
- 因特网的网络层提供了单一的服务, 称为尽力而为服务:
- 不保证以发送的顺序接受, 不保证最终交付
- 不保证端到端时延和最小带宽
- 分组交换机:
- 链路层交换机: 链路层
- 路由器: 网络层
4.2 路由器工作原理
- 路由器的两个主要功能:
- 运行路由算法
- 从输入端口到输出端口转发分组
- 路由器的4个组件
- 输入端口
- 交换结构
- 输出端口
- 路由选择处理器
4.2.1 输入端口处理和基于目的地转发
- 输入端口处理:
- 线路端接->数据链路处理(协议, 拆分)->查找, 转发, 排队->交换结构
- 目的地转发:
- 路由器转发表采用前缀匹配的方式生成表项,对于每一个链路接口,其目的地址范围的前缀为表项中的前缀匹配
- 当存在多个成功匹配时,采用 最长前缀匹配规则,转发到匹配长度最长的那个链路接口
- 转发见下面对比中
4.2.2 交换
- 经内存交换
- 第一代交换机
- 速度由内存带宽限制
- 经总线交换
- 速度由带宽限制
- 经互联网络交换
- 数据报分为固定大小的单元, 在网络中交换单元
4.2.3 输出端口处理
- 交换结构—>排队(缓存管理)—>数据链路处理(协议, 封装)—>线路端接
包括选择和取出排队的分组进行传输, 执行所需的链路层和物理层传输功能
缓冲满的时候选择扔掉的分组
4.2.4 何处出现排队
- 缓存空间无内存可用: 丢包
- 输入排队
- 输出排队
4.2.5 分组调度
排队的分组如何经输出链路传输:
先进先出
优先权排队
- 将到达输出链路的分组按照优先级分成多个类,优先级高的类先传输,类内采用FIFO的方式
- 非抢占式优先权排队:一旦分组开始被传输,即使此时有更高优先级的分组到达,该分组的传输也不会被打断
循环排队
- 将分组分成多个类,循环调度器在类之间轮流传输
- 加权公平排队
补充: 虚电路和数据报网络
- 虚电路网络:
- 对分组的流提供网络服务
- 虚电路网络提供有连接的网络层服务
- 数据报电路
- 对单个分组提供网络服务
- 数据报网络提供无连接的网络层服务
虚电路网络
- 对于分组流建立, 删除连接
- 每个分组有VC标识符
- 路径上的交换机保持状态
- 链路, 交换机资源分配给VC
一个VC包括
- 源到目的地的路径
- VC数, 可能对于每条链路都不同
- 路径上交换机中的表项, 包括: 输入接口, 输入VC数, 输出接口, 输出VC数
虚电路: 信号协议
- 用于建立, 保持, 删除VC
- 在ATM, frame-relay等中使用
- 现在不用了
数据报网络
- 不需要建议连接
- 交换机没有端到端连接的状态
- 转发表使用目的地地址
- 相同的源和目的地之间的主分组对可能走不同的路径
- 转发表(路由表)格式:
- 目的地地址前缀
- 地址掩码
- 链路接口
- 最长前缀匹配规则: 寻找最长的匹配项, 向其相关联的链路接口转发分组
4.3 网际协议: IPv4, 寻址, IPv6和其他
- IP操作
- 路由
- 数据报生命周期
- 分片和重装
- 错误控制
- 流控制
- 路由:
- 主机和路由器维护路由表
- 数据报生命周期:
- 数据报可能会不确定地循环
- 在IP中用TTL(time to live)标记lifetime, 一旦用完, 数据报就会被丢弃
- lifetime的类型: 跳数, 每次在路由器间传递, 减少TTL
4.3.1 IPv4数据报格式
IP首部字段(不用背):
- 版本: 4 or 6(见后面)
- 首部长度(4 bits)
- 服务类型(8 bits)
- 说明该IP数据报是什么类型, 包括优先级 Precedence, 可靠性, 延迟, 吞吐量
- 数据报长度(16 bits): 首部+数据的长度
- 标识(16 bits)
- 序列号
- 和地址以及协议唯一标识数据报
- 标志flags(3bits)
- More flags
- Don’t fragment
- 片偏移(13bits)
- 寿命TTL(8bits)
- 协议(8bits)
- tcp, udp, ospf, (不可能是rip, 因为rip直接装在udp里面, udp装在ip里面)
- 首部校验和:
- 计算首部中所有16bits words的校验和
- 在每个路由器中重新计算
- 源地址(必考)
- 目的地址
- 选项及padding(凑整的): 可有可无
4.3.2 分片和重装
最大传送单元MTU: 一个链路层帧能够承载的最大数据量。
分片和重装: 分组长度超过了网络的MTU
位置:
- IPv4的分片在路由器实现(IPv6在主机)
- 一个数据报变为多个小数据报
- IP的重装只在目的地实现
- IPv4的分片在路由器实现(IPv6在主机)
实现:
- 分片. IPv4数据报分片利用标识,标志,片偏移三个字段:
- 发送主机通常将它发送的每一个数据报的标识号(ID)依次加1
- 分片后每个片(一个小的数据报)的源地址,目的地址,标识号一致,接收方可以通过标识号判断两个片是否属于同一个大的IP数据报
- 片偏移(在原始数据包中的位置(不含头), 以8个字节为单位, 因此计算片偏移需要除以8.)
- more flag: 判断是不是最后一个分片. 只有最后一个分片的more flag标志为1.
- 分片. IPv4数据报分片利用标识,标志,片偏移三个字段:
多次分片容易导致碎片化.
重装:
预留足够的缓冲区(开始不知道要多少)
分片到达, 则放在缓冲区的对应位置
- 知道所有的数据域都重装
失败:
- 当分片丢失
重装超时, 扔掉所有的部分数据
使用分组lifetime(TTL in IP)
- 随着分组下降, 超时则杀死所有数据
- IPv6使用源分片
错误控制和流量控制
错误控制:
- 不保证到达
- 如果分组丢失, 路由器试图告诉信息源
ICMP用于发送错误信息
- 源可能用更高层的协议
流量控制
- 运行路由器限制到达数据速率
- 当缓冲区满了, 路由器丢弃输入分组
- 可能告知源
- 使用ICMP
4.3.3 IPv4编址 (非常重要, 必考)
- 接口: 主机与物理链路之间的边界
- 一般一个主机有一条链路和一个接口, 路由器有多个链路和多个接口
- IP要求每台主机和路由器接口拥有自己的IP地址(全球唯一, NAT除外)
- 每个IP地址32位(4字节), 按照点分十进制记方书写, 即每个字节用十进制, 各字节之间用点隔开.
- 包含2部分: 网段地址和主机地址, Net+Host
- IP只关心网段之间的通讯
- 0和255慎用, 0表示网段地址, 255广播地址
- 在CIDR被采用之前使用分类编址:具有8, 16, 24比特的子网分别被称为A, B, C类网络.
- A类网, B类网, C类网(略)
- 子网和子网掩码
- 子网: 分开主机和路由器的每个接口, 产生几个隔离的网络岛, 使用接口端接这些隔离的网络的端点. 这些隔离的网络中的每一个都叫做一个子网.
- 解决网络地址使用不充分问题
- 地址通过子网掩码分为子网数和主机数
- CIDR(无类别域间路由选择)
- 网段地址A.B.C.D/n, n为IP前缀, 表示掩码的1的数量, 前n位为IP地址的网络部分, 后32-n位用于分配组织内部设备使用
- 地址汇聚:
- 多个网段看做一个更大的网 段
获取主机地址: DHCP协议
DHCP(动态主机配置协议): 主机刚入网如何获取IP地址
分为以下四步骤:
- DHCP服务器发现(discover)
- 一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器
- 因为不知道服务器的IP地址, 所以客户生成包含DHCP dicover的IP数据报, 广播目的地址255.255.255.255(广播), 本主机地址0.0.0.0, 传给链路层, 广播到该子网的所有节点.
- DHCP服务器提供(offer)
- DHCP服务器收到一个DHCP discover报文时, 用DHCP offer报文向客户做出响应, 向子网的所有节点广播, 使用地址255.255.255.255
- 可能有多台DHCP服务器, 他们向客户提供的报文包含:
- 收到的发现报文的事务ID
- 向客户推荐的IP地址
- 网络掩码
- IP地址租用期
- DHCP请求(request)
- 新到达的客户从一个或多个DHCP offer中选择一个, 并向选取的DHCP offer用 DHCP request报文进行响应(含DHCP服务器ID, 即选择的那个服务器的offer包的IP头里面的IP地址), 回显配置的参数.
DHCP ACK
- 服务器用DHCP ACK报文对DHCP request进行响应
全部使用IP广播
4.3.4 网络地址转换(NAT)
- 内部(虚拟地址)和外部地址分开
- 和外网通信时转换IP地址
- NAT使能路由器对于外部来说可以就是一个具有单一IP地址的单一设备,而其实际上对外部隐藏了内部网络的细节。
- 内部网络使用的IP地址是RFC 1918中保留的IP地址空间之一,用于家庭网络等专用网络或者具有专用地址的地域(即其地址只对该网络中设备有意义)
- 实现:
- 用NAT表的方式进行地址转换, 记录对应的WAN端和LAN端的IP地址和端口号
- 通过分配不同的源端口号来区分内部的主机
- 内部主机向外通信,发送源地址为主机IP地址,端口号随机生成的报文
- NAT使能路由器接收到内部主机发送的报文后,改变源地址为自身IP地址,生成一个不在NAT表中的端口号,发送报文,随后添加NAT表项
- 外部主机收到后,发送 目的地址为路由器IP地址,端口号为路由器生成端口号的 响应报文
- NAT使能路由器接收到外部主机的响应报文后,通过查NAT表,来转发给内部主机
4.3.5 IPv6
- 最初动机: 地址空间用完了
- 额外动机:
- 提升处理速度
- 不在路由器处分片, 算校验和
- …
IPv6数据报格式
IPv6引入的主要变化
扩大的地址容量: 32bits变为128bits, 冒分(冒号分隔); 还引入的任播地址(传播给任意一个)
简化高效的40字节首部, 许多IPv4字段被舍弃或者作为选项. 舍弃的字段:
- 分片/重装: 不允许在路由器上分片
- 首部校验和: 运输层和数据链路层做过校验, 所以去除
- 选项: 不在标准IP首部内, 但是可能在IPv6首部的”下一个首部”指出的位置上. 这样IP首部就是定长的了
- 流标签: 给属于特殊流的分组加上标签, 这些特殊流是发送方要求进行特殊处理的流, 如一种非默认服务质量或需要实时服务的流. 例如音频和视频传输
IPv6首部字段:
- 版本: 4或6
- 流量类型: 同IPv4
- 流标签: 标识一条数据报的流, 能够对一条流中的某些数据报给出优先权
- 有效载荷长度: 在定长的40字节首部后面的字节数量
- 下一个首部: 标识数据报内的内容(数据字段)需要交付给哪个协议
- 跳限制: 每一跳-1, 0则丢弃
- 源地址和目的地址
题目:
IPv4首部图, 哪些字段在经过中间路由器的时候肯定不会被修改(分为不考虑和考虑NAT)
IPv4和IPv6的互通
隧道模式:
- 原始的包 包在外面的包里面
- VPN使用
- 通用
补充:
ARP
ARP协议: IP地址转换为对应的MAC地址
ARP过程
Sender
- 查找自己的cache, 如果没有就
- 构建ARP请求, 插入
- 用MAC帧广播
- 缓存目的地的
对, 以及时间戳
Receiver:
- 查目的地IP, 如果OK
建立ARP应答, 插入
用MAC帧发送sender MAC
- 缓存发送方的
以及时间戳
下面的都不考:
IP组播
- 组播: 发送的一个数据包, 要发给多个目的地(不是域内的所有主机)
广播: 发送给在一个域内的所有主机
IP电视, 远程会议, 分布式计算…
完成IP组播
- 组播树: 在组成元的网段的路由器之间建立组播树, 分组只在组播树上传播
- 发送方只发一次
IP组播服务模型(不考)
协议组成:
- 组播地址
- IPv4: D类地址, 1110开头
- IPv6: 8位前缀, 4位flag, 4位地域限制. 112位组标记符
地址翻译
- IP:
- MAC:
局域网:
- IGMP:
wide area:
- 构建组播树
IGMP主要操作
主机
- 发送报告加入和退出组
- 主机不需要明确退出
路由器
每过一段时间发送询问信息
组内主机必须回应
两个特殊地址:
- 224.0.0.1: 子网所有组播组
- 224.0.0.2: 子网所有路由器
每个局域网中一个路由器被选为询问者
收到询问后, 对于每个组, 主机开始随机计时器(倒计时)
倒计时结束, 发送报告给整个组
组内其他成员收到报告,停止计时器
组播路由
- 共享树: 所有成员共享一棵树
- 源树: 每个成员一棵树
移动IP(不考)
网段地址决定路由
移动节点
对应节点
本地代理
远地代理
对应节点C发送给移动节点B:
- C发给本地代理
- 本地代理通过隧道方式发给远地代理
B发给C: 直接发
移动IP的三个能力:
- 到达新的网段后发现远地代理
- 注册: 要求本地代理转发给远地代理
- 隧道: 本地代理和远地代理之间的隧道
MPLS(了解即可)
- 有连接网络
- 略