[toc]
- 交换网络的问题
- 扩展能力有限(线性扩展/FDB爆表/大规模路由和寻址难实现/生成树收敛)
- 存在多种类型异构网络(网络种类、地址模型、服务模型)
- 网络互联技术:网际协议IP
- 连接异构网络,任意规模扩展,大规模路由
- 对底层抽象,对上层提供接口
- 向上提供最基本的、简单的(高效)、灵活的(不依赖特定物理介质)数据报传输服务
- 无连接。不编号且前后分组无关
- 尽最大努力交复。不提供服务质量的承诺,传输层负责可靠传输,与网络节点无关
- 中间转发设备功能简单、成本低;协议设计简单、适应性和扩展性强
- IP数据报服务
- 网络层到网络层
- 分组可能沿不同路径传输(灵活性)
- 虚电路(历史)
- 所有分组沿同一条虚电路传送
- 面向连接的通信方式,源于电路交换思想
- 保障可靠传输
- 但节点故障时会有巨大延时和重建开销,灵活性不足
- 互联结点
- 路由器/网关
- IP的关键:建立可扩展的异构互连机制,在所有节点(主机和路由器)上运行
- 网络层功能
- 逐跳分组实现源、目的结点间数据传输。有两种重要的功能实现
- 转发(动作、局部信息)
- 分组到达输入链路时,路由器将分组移动到离目的更近的输出链路
- 基于路由器缓存和学习的局部信息
- 路由选择(决策、全局)
- 分组从源结点流向目的结点时,网络层决定分组采用的路由或路径
- 通过路由选择算法计算
- 基于网络层全局的路由表信息进行决策
- 转发(动作、局部信息)
- 逐跳分组实现源、目的结点间数据传输。有两种重要的功能实现
- 网际协议IP
- TCP/IP体系
- 包括编制规则、数据包格式、分组处理规则
- 配套使用的协议
- 路由选择协议(RIP/OSPF/BGP)
- 地址解析协议ARP(IP地址到硬件地址的映射)
- 网络控制报文协议ICMP(对不可靠网络进行有限控制诊断)
- 网际组管理协议IGMP(IP多播)
- IPV4(位置和身份合二为一)
- 全球唯一的32位结点标识符
- 点分十进制表示,每8位转换为十进制
- 分类的IP地址:最基本的编址方法
- 子网划分:改进基本编址方法
- 构成超网:无类别编址
- 层次结构:IP地址 = 网络号 + 主机号
- 网络号指出结点所在网络,同一网络上IP地址的网络地址部分相同
- 主机号指出结点在网络的标识,由网络管理员分配
- 分类的IP地址
- 单播地址
- A类
- 0开头,1字节网络号,3字节主机号
- 网络号全0的IP地址保留
- 网络号全1的IP地址保留为环回地址
- 主机号全0的IP地址保留为网络地址
- 主机号全1的IP地址保留为广播地址
- B类
- 10开头,2字节网络号,2字节主机号
- 不保留网络号全1的IP地址
- C类
- 110开头,3字节网络号,1字节主机号
- 不保留网络号全1的IP地址
- 一些特定地址未被分配,称为私有地址
- A类
- 组播地址
- D类
- 1110开头,后跟多播地址
- D类
- 保留地址(特殊用途)
- E类
- 1111开头
- E类
- 单播地址
- IP地址的特点
- IP地址为两级层次结构
- 方便IP地址管理(得到网络号的单位自行分配主机号)
- 减小路由表存储空间(路由器只根据网络号转发分组)
- IP地址标识一个结点和一条链路的接口
- 同时连接多个网络的主机必须同时具有相应个数的IP地址,且网络号不同(多归属主机)
- 路由器至少应当由两个不同的IP地址(因为至少连接到两个网络)
- 路由器直接相连的接口处可以(现在通常)不指明IP地址,以省下一个网络号
- 同一网络上结点的IP地址的网络号必须一样
- 用网桥/中继器连接时仍为同一网络
- 分配到网络号的网络之间平等
- IP地址为两级层次结构
- IP地址与硬件地址的区别
- TCP报文 + IP地址首部 = IP数据报
- 尾部 + IP数据报 +硬件地址首部 = MAC帧
- 具体物理链路层只能看到MAC帧,虚拟的IP层看到IP数据报的流动
- IP数据报的源地址和目的地址始终不变,首部不包含中间路由器的IP地址,路由器根据目的结点的IP地址选择路由
- MAC帧首部硬件地址每一跳都会改变
- 路由器将转发信息(网络号与下一跳地址的映射关系)存储在转发表FIB
- 根据目的网络地址查表确定下一跳路由器。可能通过多次转发,最后一个路由器才交付给主机
- 特定主机路由(32位全都是网络号)
- 为特定主机指明路由
- 方便控制和测试网络;考虑安全问题
- 小范围使用,但依然遵从分组转发
- 默认路由
- 路由表中无匹配地址时采用的缺省出口
- 对单网卡主机,缺省路由即为与网卡相连的路由器
- 减少路由表空间和检索时间,在网络对外连接不多时很有用(如连接在只用一个路由器和互联网连接的小网络上的主机,缺省为公网)
- 分组转发规则
- 从首部提取目的主机IP地址,得到目的网络地址
- 目的网络地址与路由器直接相连时直接交付目的主机;否则间接交付
- 根据目的主机IP地址查找特定主机路由
- 若无,查找到达目的网络的下一跳路由
- 若无,把数据包传送给默认路由
- 若无,报告转发分组出错(ICMP,目的不可达)
- 问题:结点的物理接口硬件在转发数据时只能理解特定网络的编址方案(硬件地址,如MAC地址)
- 地址解析:IP地址到硬件地址
- 每个结点根据本次传输的目的结点IP查找本跳接收结点的硬件地址
- 网络适配器把IP数据包封装成帧,目的地址为该本次传输目的硬件地址
- 直接对应方式:硬件地址长度有限制
- 地址解析协议ARP:每个结点保留一张IP地址→硬件地址的对照表
- 每个三层结点中有一个ARP高速缓存,存储本局域网各结点到其硬件地址的映射表
- cache miss时,广播ARP请求,询问目的结点的IP地址对应的硬件地址,目的结点单播回复,此后双方都将信息写入cache
- 广播时,目的结点添加或更新信息;其他结点若有广播方条目则更新信息或延长生命期,否则忽略
- 目的结点和源结点不在同一局域网时,分组转发向下一网络
- IP地址到硬件地址的解析自动进行
- ARP cache中条目有生命期,超时删除
- ARP分组不是IP协议一部分,不包括IP头,直接放在以太网帧的数据部分(IPV6则放在IP协议中)
- IP数据包 = 首部 + 数据
- 首部20字节固定长度,长度可变可选字段
- 首部 = 4bit版本 + 4bit首部长度(5
15个单位,1单位=4字节) + 8bitTOS(区分服务) + 16bit总长度(不超过最大传输单元MTU,最大长度65535字节) + 32bit标识、标志、片偏移字段(16+3+13,用于IP数据包分片) + 8bit生存时间TTL(数据报可通过的路由器跳数,一般不超过64,防止僵尸数据) + 8bit协议(上层,如IP=4,TCP=6,IPV6=41) + 16bit校验和(只校验首部,反码求和) + 32bit源地址 + 32bit目的地址 + 140Byte选项(第一字节标识选项类型,变长选项第二字节标识长度,主要用于测试和控制,增加功能也增加处理数据包开销)
- 不同异构网络拥有各自不同的最大传输单元长度(不同介质各不相同),且发送方不知道中间网络的MTU
- MTU中包含IP报头,但不包含链路层报头
- 分片
- 分组经历网络MTU小于分组长度时把分组分成小数据块后放进物理帧
- 每片长度都是8的倍数,最后一个可任意小
- 每段包含一个IP数据抱头,其中只改变长度、标志、片偏移、校验和字段
- 重组
- 分片数据包到达目的主机后的反向过程
- 标识
- IP数据报的标识号,分片后共享同一标识号
- 标志
- 3位,仅使用低2位(未用 | DF | MF)
- DF置0才允许分片,MF置0表示后续无分片
- 片偏移
- 指明分片在分组中的位置,偏移单位8字节
- 缺点
- 不能充分利用网络资源(转发代价与大小无关,与包数量有关)
- 端到端性能差(丢失一个分片也就丢弃其他分片)
- 可被利用生成DoS攻击(发送小片offset非0或MF恒1流,重组数据时崩溃)
- 解决方案:MTU发现机制避免分段(探测沿途最小MTU);IPV6废止分片
- 分类IP地址的问题
- 地址利用率低
- 无法根据网络规模灵活选择网络地址
- 分配网络号(数量有限),耗尽速度快
- 网络规模不可调(网络号主机号固定),造成分配不合理
- 每个物理网络分配一个网络号使路由表过大
- 每个网络号一条目,增大查找延迟,降低性能
- 使用不灵活
- 同一组织不同地点需要新网络地址开通新物理网络
- 不利于扩展和管理
- 地址利用率低
- 划分子网的思路
- 把两级地址变为三级:从主机号借用若干位增加子网号字段,IP地址=网络号+子网号+主机号
- 实现多个物理网络共享一个网络号,减少分配网络总数,实现路由聚合
- 子网应距离很近,外部看来是同一网络号的单一网络,划分是机构内部行为
- 子网号借位规则:不得全1全0,至少2位,至多主机号-2位(A类22位,B类14位,C类6位)
- 对同一个IP地址,不同子网掩码可能得出相同网络地址,但实际效果不同
- 路由器FIB表需要增加子网掩码列,以计算网络号(源节点和路由器都需要计算过程)
- 子网划分的特点:
- 本质上事允许一列类比额的地址在子网内分拆
- 实现多个物理网络共用一个网络地址,减少浪费
- 路由聚合:内部看到不同路由,远端只看到单一网络
- 子网划分在一个逻辑网络内部进行,利于网络扩展、管理
- 但是不能解决地址空间利用率的问题
- 同一个物理地址包含多个网络号时引起路由器超量存储
- 解决方式:连续分配网络号
- 网络号可为变长,仅用一条转发表记录指示到达多个网络(路由聚合)
- 使三级编址变为无分类两级编址:IP地址=网络前缀+主机号。其中网络前缀包括网络号和子网号
- 网络前缀都相同的连续IP地址组成CIDR地址块
- 一般用于C类地址
- 也称为构造超网
- 只有ABC中同类网络可聚合
- 使属于同一**自治系统(AS)**的多个网络映射到一个地址
- 产生多个匹配结果时,从匹配结果中选择具有最长网络前缀的路由
- 查找方法
- 朴素算法:对每个可能的前缀长度提取前若干位匹配网络号,最坏32次
- 网际报文协议,封装在IP数据包的IP层协议
- 主机或路由器报告差错和异常情况
- PING(Packet InterNet Groper)
- 回送请求和应答报文
- 测试传输时延、丢包率
- Traceout/Tracert
- 超时报文
- 跟踪分组路径
- 从1开始逐次增加TTL,得到路径IP地址及往返时间
- 条件:路径在分钟级别保持稳定,沿同一路径传播
- 路径MTU发现
- 条件:路径在分钟级别保持稳定,沿同一路径传播
- 连续发送多个长度不同的数据报文(大号数据包被回复不可达)
- 传输错误时通知源主机
- 终点不可达:不能交付数据报
- 源点抑制:因拥塞丢弃数据报(控制结点发送速率)
- 超时:TTL归0或终点未收到所有分片
- 参数问题:版本号、校验和等首部参数不正确
- 改变路由:通知主机下次将数据包发给另外的路由器
- 主动判断网络问题,成对出现(回复)
- 回送请求、应答:询问目的主机,测试可达性和状态;收到请求的主机必须回复应答报文
- 时间戳请求、应答:请求当前的日期和时间
- 多输入端口、多输出端口的专用计算机,用于转发分组
- 转发与路由
- 转发:接收一个分组,查询转发表,分组转发(获得MAC)
- 路由:建立路由表,确定下一跳IP(获得IP)
- 转发更激进,是实现相关的优化
- 输入端口:物理层、数据链路层、网络层(路由信息交由路由选择处理器且不转发,普通数据报查找转发表)
- 输出端口:网络层分组、链路层、网络层(输入输出队列溢出时可能会有分组丢失)
- 交换结构:核心。分为:经内存交换、经总线交换和经互联网络交换
- 路由选择算法:找到两个结点间开销最低的路径,保存在路由表FIB/RIT中
- 路由器可抽象成节点,节点间链路是带权重(开销,包括延迟、拥塞程度、价格等)的边
- 正确性、简单性、健壮性、稳定性、公平性、最优性(时延和吞吐量)
- 静态路由选择(集中式手工配置)和动态路由选择(分布式、自适应,路由器之间相互交换路由信息)
- 分为域内路由和域间路由
- 规模大,分层减小计算复杂性
- 管理自治,隐藏自身网络的细节布局
- 单一实体管辖的路由器集合而成
- 域内路由:内部网关协议和统一的度量标准。性能目标导向,全网目标统一
- 域间路由:外部网关协议,以可达性为目的。策略和经济目标导向,每个AS策略不同
- 每个AS有唯一的标识
- 基于距离向量算法
- 仅与相邻路由器交换路由信息,输出处理后信息
- 交换本路由器所知的全部信息
- 定期转发,且触发交换(发生变化时)
- 基于跳数的距离向量算法
- 结点保存已知最优路径的开销及下一跳结点
- 初始化时只有到相邻节点的信息,而后将整个向量信息发送给相邻节点
- 迭代时从接收信息和自身存储信息中选择更优的开销和下一跳节点
- 迭代时若有更新,触发推送新信息(不需要同步进行)
- 本质上是分布式的BF最短路径算法(求含负权图的最短路径的算法)
- k次更新后保存k+1跳可达的路由信息
- 跳数大于15时,视为不可达(因为RIP收敛慢,且存在环形链路的迭代时不收敛问题Count-to-Infinity)
- 水平分割:更新信息时,不把从相邻节点学到的路由返回
- 反向抑制:返回从相邻结点学到的信息时加入否定信息的标志位
- 以上为2个节点的情况。对于多节点环路,需要引入抑制计时器。抑制期间忽略更高跳数的信息
- 节点发现故障的方式:主动探测(主动发送控制分组等待应答)、被动侦听(收不到预期的定期更新)
- 路径更新原则:短优先、新优先、无到有优先
- UDP协议承载
- RIP请求报文:路由器启动/记录超时
- RIP应答报文:答复请求/定期发送请求
- RIP协议启动时检测直接相邻网络,并加入路由表;此后广播RIP请求
- 接收到的新包,距离字段全+1,下一跳为新包的源节点。无记录时直接添加条目,已有记录时若下跳相同无条件更新,否则比较距离
- 局限性:可扩展性有限(直径15)、丢失率高的网络中无法使用(更新和超时机制迭代负荷进一步加大)、无法动态使用时延/负载等信息选择路由(使用固定费用值)、开销大(定期交换、完整路由表)、收敛速度慢
- 开放最短路径优先协议
- 使用最广泛的链路状态路由协议
- 各节点从域内所有结点获取信息(同时也发送信息),建立链路状态数据库
- 仅发送与本路由器相邻的路由器之间的链路状态
- 触发交换为主,也有长周期的定期交换
- 链路(接口间互联)状态:接口IP地址、掩码;链路类型;开销
- 可靠扩散机制:链路状态数据库同步
- 各节点根据链路状态数据库单独计算最短路径,并生成路由表
- 以自身为根的树形结构
- 网络拓扑构建
- 链路状态信息通过链路状态分组LSP传播(节点标识、节点列表和链路开销、序列号、生存期)
- LSP的产生:周期性超时/链路层探测到拓扑结构变化时(定期探测hello包)
- 可靠扩散链路状态信息
- 节点接收到LSP副本后保存或更新,此后向外广播扩散(必要时确认和重传)
- LSP序号及TTL保证旧信息被新信息取代
- 收敛速度更快、可支撑更大规模路由(区域)
- 开放性度量链路优先度
- 路由消息进行认证,防止无用LSP
- 负载平衡(允许多条具有相同开销的路由使通信量均匀分别;RIP维护中间实时状态,不利于多路径收敛)
- 把域划分为区域(一般不超过200个路由器,主干区域负责沟通),引入更小规模以减小收敛时间(减少通信量),每个区域不知道其他区域内部情况。路由信息只在区域内洪范,跨区域数据包通过边界路由器汇总(并非屏蔽,依然可以学习到其他区域路由器的分布)
- 直接用IP协议组建数据报传送
- 五种分组类型:
- HELLO分组。发现邻接路由器
- 数据库描述分组。描述链路状态数据库的摘要信息,在初始化邻接关系时交换
- 链路状态请求分组。数据库内容过期
- 链路状态更新分组。相应请求或洪范更新
- 链路状态确认分组。确认更新报文
- 1确认可达性,2达到数据库同步,345实现新情况下的同步
- 可能会出现短暂环路
- 边界路由器进行域间路由决策
- 每个AS有自己的路由策略
- 寻找一条能到达目的网络且比较好的路由
- BGP发言人:AS管理员选择至少一个路由器(边界路由器)交换域间路由信息,建立TCP连接
- 路径向量:
- 每次更新携带整条路径信息(策略控制的必要条件)
- 收到路由通告时根据本地策略选择较好路径、向哪些AS通告更新
- 检测自身是否在路径中。若是说明存在环路,丢弃消息
- 度量指标不需全局统一;AS可根据自身策略选择路径;可以避免环路
- 一个多连接AS可以拒绝传送中转数据(限制路径通告)
- 一个多连接AS可以为一些AS中转数据(如二级运营商)
- 简化路由协议设计,避免消息确认
- 连接建立后交换所有信息,连接有效则条目有效
- 仅更新变化部分,可批量更新,减小更新开销
- 链路负载高时性能可能受影响
- 4种报文:
- 打开报文。建立关系
- 保活报文。周期性发送保证连接不断开
- 更新报文。发送更新和撤销信息
- 通知报文。告知差错
- 以太网等多点访问网络用硬件实现多播,同时给多台主机传送信息
- 在IP级模拟多点访问网络,基于多播组的多对多或一对多传输模式
- 每个多播组都有自己的IP多播地址,多播路由器负责实现(但是难以实现)
- 减少冗余流量,尤其是发送节点附近
- D类IP地址为多播保留
- IP多播与硬件多播的关系
- IP多播分组进入局域网时,内部可通过硬件多播实现(以太网多播地址的映射)
- 多播IP地址与MAC地址映射关系可能不唯一,此时可以用IP层内容过滤
- 让局域网的多播路由器获取主机进程加入或退出多播组的信息
- 位于网络层,使用IP数据报传递
- 主机加入多播组时声明自身为成员,多播路由器广播组员关系
- 多播组成员关系动态,多播路由器周期性探询主机等待效应。无响应时不再发送本组信息给其他多播路由器
- 主机和多播路由器之间所有通信都用IP多播
- 多播路由器对所有组发送一个询问报文(而非每个组)
- 同一网络存在多个多播路由器时,只有一个用于探询组成员关系
- 延迟响应:指明最长响应时间后随机选择响应时点,每组只需一台主机响应,其他主机响应后自身无需响应
- 以上都可减小信令开销
- 目标是找到以源主机为根的多播转发树
- 每个多播路由器向叶子结点方向复制不重复的多播分组
- 不同多播组或同一多播组中不同源点的发送都对应不同的多播转发树
- 距离向量多播路由选择协议DVMRP,基于核心的转发树CBT,开放最短通路优先的多播扩展MOSPF
- 专用互联网/本地互联网:节省IP地址,提高安全性
- 在组织内部给每个主机分配一个私有IP地址,并可进一步划分子网。私有地址只能作为本地地址,不能作为全局IP(路由器在目的地址为私有地址时不转发分组)
- 虚拟专用网VPN采用IP隧道技术,实现分布在不同位置的私有地址(内部网络)通讯
- 隧道两端以公有地址互通,原数据包作为DATA部分在隧道两端被封装和分析
- 内部网络中使用私有地址的主机访问公网
- NAT负责私有地址与全局地址间的翻译,内部地址情况对外部网络屏蔽
- NAT路由器有至少一个有效的全局IP地址,内部主机通过NAT路由器代理才能与外界通信
- NAT路由器维护包含内部地址、内部端口、外部端口的映射表
- NAT拦截客户端消息,并标记自身为发送方;接收服务器端数据,更新目的地址和端口后发送给内网主机