Post

网络层

网络层

4.1 概述

主机到主机、网络核心实现

核心功能

  • 转发:将分组从路由器的输入端口转移到合适的输出端口(数据平面
    • 通常由硬件实现
    • 转发表
  • 路由:确定分组从源到目的地经过的路径(控制平面
    • 通常由软件实现
    • 路由算法

网络层服务模型

  • 无连接服务
    • 不事先为系列分组的传输确定传输路径
    • 每个分组独立确定传输路径
    • 不同分组的传输路径可能不同
  • 连接服务
    • 为系列分组的传输确定从源到目的地所经过的路径(建立连接)
    • 系列分组的传输路径相同
    • 传输结束后拆除连接

虚电路网络

提供网络层连接服务的分组交换网络

  • 虚电路(VC):一条从源主机到目的主机,类似于电路的路径(逻辑连接)
  • 通信过程:呼叫建立——>数据传输——>拆除呼叫
    • 每个分组携带虚电路标识(VCID),而不是目的地址
    • 同一条VC,每段链路上的VCID通常不同,由路由器的转发表记录
    • VC路径上每个路由器都需要维护VC连接的状态信息
  • 虚电路信令协议
    • 用于VC的建立、维护与拆除
    • 应用于虚电路网络:ATM、帧中继

数据报网络

提供网络层无连接服务的分组交换网络

  • 每个分组携带目的地址
  • 路由器根据分组的目的地址转发分组
  • 例:Internet

对比

Internet(数据报网络)ATM(VC网络)
服务“弹性”服务,没有时间要求实时对话,严格要求时间
端系统智能(可自适应、性能控制、差错恢复)电话机、传真机
一言蔽之简化网络,复杂“边缘”简化“边缘”,复杂网络

4.2 IPv4协议

IP数据报

IPv4数据报格式

  • 首部长度:单位为4字节(首部通常为20字节)
  • 服务类型:指示期望获得哪种类型的服务(区分服务)
  • 总长度:IP分组的总字节数(首部+数据)
  • TTL:IP分组在网络中可以通过对路由器数
    • 路由器转发一次分组,TTL减1
    • 若TTL=0,则路由器丢弃该分组
  • 协议:运输层协议(UDP为17,TCP为6
  • 首部检验和
    • 路由器一般会丢弃检测出错误的数据报
    • 每台路由器上必须重新计算检验和并重新放到原处

IP数据报分片

  • MTU(最大传输单元):一个链路层帧能承载的最大数据量
  • 大IP分组向较小MTU链路转发时,可以被“分片”
    • 在端系统重组分片
  • 相关字段
    • 标识:每生成一个IP分组加1
    • 标志位(3位)

      字段说明
      保留 
      DF (Don’t Fragment)1禁止分片;0允许分片
      MF (More Fragment)1非最后一片;0最后一片(或未分片)
    • 片偏移(13位) :以8字节为单位
  • 原IP分组总长度L,待转发链路的MTU为M(L>M,DF=0)
    • 一个最大分片可封装的数据为$d=\lfloor {\frac{M-20}{8}} \rfloor \times 8$ (字节)
    • 需要的总片数$n=\lceil {\frac{L-20}{d}} \rceil$
    • 每片的片偏移字段取值:$F_i=\frac{d}{8}\times (i-1)$ (8字节)
    • 每片的总长度字段
      • $1\leq i <n$:$L_i=d+20$
      • $i=n$:$L_i=L-(n-1)d$

IP编址

  • 接口:主机与物理链路的边界(连接)
    • 路由器有多个接口;主机通常只有一个或两个
  • IP地址(IPv4);32比特(点分十进制)
    • IP地址与每个接口关联
    • 网络号(高位比特)+主机号(低位比特)
  • IP子网
    • 具有相同网络号的设备接口
    • 不跨越路由器,可彼此物理联通的接口

有类IP地址(分类编址)

有类IP地址

  • 特殊IP地址

    NetIDHostID源地址目的地址用途直观地址
    全0全0×在本网范围内表示主机;在路由表中用于表示默认路由0.0.0.0
    全0特定值×表示本网内某个特定主机 
    全1全1×本网广播地址(路由器不转发)255.255.255.255
    特定值全0××网络地址,表示一个网络 
    特定值全1×广播地址,对特定网络上的所有主机进行广播 
    127非全0或非全1的任何数环回地址,用于本地软件环回测试 
  • 私有地址

    classNetIDsBlocks
    A101
    B172.16 to 172.3116
    C192.168.0 to 192.168.255256
    • Internet不使用,只在私有网络里面使用,(可以重复使用)

子网划分

  • 子网掩码:网络号全取1,主机号取0(子网号也取1)
    • 用于划分网络位和主机位
    • 判断两个IP是否位于同一个子网
  • 划分
    • NetID : SubID : HostID
    • 子网号:原主机号部分比特
    • 子网地址+子网掩码–>确定地址大小
  • 将IP地址与子网掩码按位与运算,得到子网地址

CIDR(无类域间路由)

  • 消除传统的A类、B类和C类地址界限
  • 无类地址格式:a.b.c.d/x,x为前缀长度(可变长度)
  • 路由聚合:使用单个网络前缀通告多个网络
    • 最长前缀匹配优先

DHCP(动态主机配置协议)

别名:即插即用协议,零配置协议

  • 应用层
  • 允许主机自动获取一个IP地址、子网掩码、默认网关(第一跳路由器地址)、DNS服务器名称与IP地址
  • 支持在用地址续租
  • 流程
    • 主机广播“DHCP发现报文
    • DHCP服务器利用“DHCP提供报文”进行响应
    • 主机请求IP地址:“DHCP请求报文
    • DHCP服务器响应:“DHCP ACK报文
  • 报文封装到UDP中

4.3 NAT(网络地址转换)

  • 实现

    流程解释
    替换利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)
    记录将每对(NAT IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到NAT转换表
    替换根据NAT转换表,利用(源IP地址,源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号)
  • 16-bits端口号字段:可支持60000多并行连接
  • NAT穿透
    • 静态配置NAT,将特定端口的连接请求转发给服务器
    • 利用UPnP、IGD
      • 自动学习到NAT公共IP地址
      • 在NAT转换表中,增删端口映射
    • 中继
      • NAT内部的客户与中继服务器建立连接
      • 外部客户也与中继服务器建立连接
      • 中继服务器桥接两个连接的分组

4.4 IPv6协议

数据报格式

IPv6数据报格式

  • 流标签:表示同一“流”中的数据报
  • 下一个首部:标识下一个选项首部或上层协议首部(如TCP首部)
  • 跳步限制:TTL
  • 改变
    • 移除校验和:以便快速处理IP分组
    • 移除选项:从基本首部移出,定义多个选项首部
    • 不允许在中间路由器上进行分片与重新组装,只能在源与目的地执行

IPv6地址表示形式

  • 一般形式:由冒号分隔的16进制表示,共8组
    • 例:1080:0:FF:0:8:800:200C:417A
  • 压缩形式:全为0可用两个冒号压缩
    • 例:FF01:0:0:0:0:0:0:43——>FF01::43
  • IPv4-嵌入形式:前80位为0,16位为1,+IPv4
    • 例:0:0:0:0:0:FFFF:13.1.68.3
  • 地址前缀:2002:43c:476b::/48(不使用掩码)
  • URLs:http://[1080:0:FF:0:8:800:200C:417A]:8000

IPv6基本地址类型

  • 单播:一对一通信
  • 多播:一对多通信
  • 任意播:一对一组之一通信(一般为最近一个)

IPv4向IPv6过渡

  • 隧道:IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络

4.5 ICMP(因特网控制报文协议)

  • 作用与分类
    • 差错报告
      • 目的不可达
      • 源抑制
      • 超时/超期(TTL)
      • 参数问题(首部出错)
      • 重定向
    • 网络探询
      • 回声(Echo)请求与应答报文(Reply)
      • 时间戳请求与应答报文
  • 不发送ICMP差错报告报文的特殊情况
    • 对ICMP差错报告报文不再发送ICMP差错报告报文
    • 除第一个IP数据报分片外,对所有后续分片均不发送ICMP差错报告报文
    • 对所有多播IP数据报均不发送ICMP差错报告报文
    • 对具有特殊地址(如127.0.0.00.0.0.0)的IP数据报不发送ICMP差错报告报文
  • ICMPv6
    • 附加报文类型:例,“Packet Too Big”
    • 多播组管理功能

报文格式

ICMP报文格式

  • 数据部分一般包含IP数据报的首部和前8个字节

4.6 路由算法

分类

  • 静态路由vs动态路由
    • 静态路由
      • 手工配置、路由更新慢、优先级高
    • 动态路由
      • 路由更新快:定期更新;及时响应链路费用或网络拓扑变化
  • 全局信息vs分散信息
    • 集中式路由算法
      • 所有路由器掌握完整的网络拓扑和链路费用信息
      • Eg:链路状态路由算法(LS)
    • 分散式路由算法
      • 路由器只掌握物理相连的邻居及链路费用
      • 邻居间信息交换、运算迭代的过程
      • Eg:距离向量路由算法(DV)
  • 负载敏感vs负载迟钝
    • 负载敏感算法:链路开销会动态地变化以反映出底层链路当前的拥塞水平
    • 负载迟钝算法:链路开销不明确地反映链路当前的拥塞水平

链路状态路由算法(LS)

  • 所有节点掌握网络拓扑和链路费用
    • 每个节点向网络中所有其他节点广播链路状态分组(链路状态广播)
  • Dijkstra算法($O(n^2)$)
  • 问题:振荡
    • 解决方法:让每台路由器发送链路通告的时间随机化

距离向量路由算法(DV)

  • 迭代的、异步的、分布式
  • Bellman-Ford方程(动态规划)
    • $d_x(y)=min\{c(x,v)+d_v(y)\}$(v为x的邻居)
  • 算法:
    • $D_x(y)$为从节点x到节点y的最小费用估计
    • 每个节点维护的信息:
      • x的距离向量(DV):$D_x=[D_x(y): y\in N]$
      • x到每个邻居的费用:$c(x,v)$
      • x的每个邻居的距离向量:$D_v=[D_v(y): y\in N]$
    • 核心思想:
      • 每个节点不定时地将其自身的DV估计发送给其邻居
      • 当x接收到邻居的新DV估计时,依据B-F方程更新其自身的DV
      • $D_x(y)$将最终收敛于实际的最小费用$d_x(y)$ 距离向量路由算法流程图
  • 链路费用变化
    • 节点检测本地链路费用变化
    • 更新路由信息,重新计算距离向量
    • 如果DV改变,则通告所有邻居
  • 无穷计数问题
    • 毒性逆转:若z通过邻居y路由选择到达目的地x,则z将通告y:z到x的距离是无穷大
    • 定义最大度量:定义一个最大的有效费用值

层次路由

  • 问题
    1. 网络规模
    2. 管理自治
  • 自治系统AS:聚合路由器为一个区域
    • 由ICANN区域注册机构分配ASN进行标识
    • 自治系统内部路由协议(intra-AS routing protocol)

      也称为IGP

      • 内部路由器
      • 同一AS内的路由器运行相同的AS内部路由协议
      • 不同AS内的路由器可运行不同的AS内部路由协议
      • OSPF、RIP、IGRP
    • 自治系统间路由协议(inter-AS routing protocol)

      也称EGP

      • 网关路由器
        • 位于AS“边缘”
        • 通过链路连接其他AS的网关路由器
      • BGP是唯一的EGP
  • AS路由转发表 AS路由转发表
    • AS内部路由算法设置AS内部目的网络路由入口
    • AS内部路由算法与AS间路由算法共同设置AS外部目的网络路由入口

Internet路由

RIP(路由信息协议)

  • 使用距离向量路由算法
    • 距离向量:使用跳步数,每条链路1个跳步(max = 15hops,无穷大 = 16hops)
    • 通告:每隔30s,邻居之间交换一次DV
    • 每次通告:最多25个目的子网(IP地址形式)
    • 链路失效:超过180s没有收到通告,则标记为不可达路由器
  • RIP为应用层协议,使用UDP传送数据
  • RIP选择的路径不一定是时间最短的,但一定是具有最少路由器的路径。

OSPF(开放最短路径优先)

  • 使用链路状态路由算法
  • OSPF通告在整个AS范围泛洪
  • OSPF是网络层协议,使用IP数据报进行传送
  • 优点
    • 安全:所有OSPF报文可以被认证
    • 允许多条相同费用的路径
    • 对于每条链路,可以针对不同的TOS设置多个不同的费用度量
    • 集成单播路由域多播路由
    • 支持对大规模AS分层
  • 分层 分层的OSPF
    • 主干区、局部区
      • 链路状态通告只限于区内
      • 每个路由器掌握所在区的详细拓扑
    • 区边界路由器
    • 主干路由器

IGRP(内部网关路由协议)

  • Cisco的私有协议

BGP(边界网关协议)

  • 应用层协议
  • 使用179端口的半永久TCP连接
    • eBGP(外部BGP):从邻居AS获取子网可达性信息
    • iBGP(内部BGP):向所有AS内部路由传播子网可达性信息
  • BGP报文

    类型说明
    Open与peer建立TCP连接
    Update通告新路径(或撤销原路径)
    KeepAlive确保连接
    Notification报告先前报文的差错;也用来关闭连接
  • BGP属性

    前缀 + 属性 = “路由”

    • AS-PATH:包含前缀通告所经过的AS序列
      • 还用来检测和防止通告环路(若在路径列表中看到自己的AS,则拒绝该通告)
    • NEXT-HOP:开始一个AS-PATH的路由器结构,指向下一条AS
  • 热土豆路由
    • 选择最近的路由器
  • 路由器选择算法(顺序地调用消除规则)
    1. 本地偏好值属性:策略决策(由网络管理员决定)
    2. 最短AS-PATH
    3. 热土豆路由
    4. 附加准则
This post is licensed under CC BY 4.0 by the author.