• 计算机网络第七章知识点回顾(自顶向下)


    系列文章戳这里👇

    1. 计算机网络第一章知识点总结
    2. 计算机网络第二章知识点总结
    3. 计算机网络第三章知识点总结
    4. 计算机网络第四章知识点总结
    5. 计算机网络第五章知识点总结
    6. 计算机网络第六章知识点总结
    7. 计算机网络第七章知识点总结
    8. 计算机网络第八章知识点总结

    1.网络层

    1. Chapter goals:
      • 理解网络层服务原理,主要关注数据面
        • 网络层服务模型
        • 网络层上的重要功能:转发和选路
        • 路由器工作原理
        • 编址
        • 因特网架构
      • 因特网的网络层(数据面)
        • IP协议
        • NAT,中间件

    1.1网络层服务

    1. 网络层为传输层提供主机到主机的通信服务
    2. 每一台主机和路由器都运行网络层协议
    3. 发送终端:将传输层报文段封装到网络层分组中,发送给边缘路由器
    4. 路由器:将分组从输入链路转发到输出链路
    5. 接收终端:从边缘路由器接收分组,取出报文段交付给传输层

    1.1.1网络层的两个主要功能

    1. 网络层的功能
      • 选路: 确定去往目的路由器的路由
      • 转发: 路由器根据选定的路由,将分组从输入端口转移到输出端口
    2. 交通出行的类比
      • 选路:规划到目的地的路线
      • 转发:在到达路口时,根据选好的路线转移到下一个路段

    1.1.2选路和转发的关系

    • 转发表:记录分组头中某个字段与路由器输出端口之间的映射关系
    • 选路:计算转发表
    • 转发:根据转发表转运分组
    • 在这里插入图片描述

    1.2网络层: 数据面和控制面

    1. 数据面(Data plane)
      执行数据传输的功能属于数据面
      转发是数据面功能,在路由器内部实施分组转运
      是路由器本地功能
    2. 控制面(Control plane)
      控制数据传输的功能属于控制面
      选路是控制面功能,确定分组如何去往目的节点
      是网络范围的功能
    3. 两种控制面实现方法
      传统寻路算法:在路由器中实现
      软件定义网络:在服务器中实现

    1.3 网络服务模型

    1. 网络服务模型:
      定义了分组在发送终端与接收终端之间的传输特性
    2. 可能的网络服务:
      • 保证交付
      • 具有时延上界的保证交付
      • 有序分组交付
      • 保证最小带宽
      • 安全性

    1.3.1网络层服务模型举例

    在这里插入图片描述

    • 不同架构的网络提供的网络层服务可能不同
    • 同一个网络也可以提供不同的网络层服务

    2.面向连接的服务,无连接服务

    1. 两种基本的网络类型:
      • 数据报网络:提供网络层无连接服务
      • 虚电路网络:提供网络层面向连接服务
    2. 网络层服务
      • 主机-主机
      • 一个网络不能同时提供无连接服务和面向连接的服务
      • 在网络核心实现
    3. 传输层服务
      • 进程-进程
      • 可同时提供无连接服务和面向连接的服务
      • 在网络终端实现

    2.1虚电路(Virtual circuits)

    1. 虚电路网络在网络层上使用连接,这些网络层连接称为虚电路
    2. 虚电路是一条端到端路径:
      • 传输分组前需建立虚电路,传输结束后应拆除虚电路
      • 所有分组在这条虚电路上传输(分组传输是保序的)
      • 如果将路由器资源(带宽、缓存等)预先分配给虚电路,则虚电路可以提供可预期的网络服务
    3. 建立虚电路的本质:
      • 预先选好从源主机到目的主机的路径,此后分组仅沿选好的路径传输,是否分配资源是可选的

    2.2虚电路(VC)实现

    • 一条虚电路由以下几部分组成:
      1. 从源主机到目的主机的端到端路径
      2. 途经每条链路时的虚电路号(用于区分经过该链路的不同虚电路,仅有本地意义)
      3. 沿途每个路由器中的转发表项:<进入端口,进入VC号> --> <输出端口,输出VC号>

    2.3虚电路转发

    在这里插入图片描述
    左上角路由器中的转发表
    在这里插入图片描述

    • 分组携带VC号,路由器利用输入端口和VC号查找转发表
    • 转发前,路由器使用输出链路上的VC号替换分组中的VC号
      注意:在虚电路上传输分组时,分组只需携带VC号,不需携带目的地址

    2.4虚电路: 信令(signaling)协议

    1. 信令报文:专门用于建立、维护、拆除虚电路的控制报文
    2. 信令协议:交换信令报文的协议
      在这里插入图片描述

    3. 数据报网络

    1. 分组携带目的主机地址,路由器按目的地址转发分组
    2. 路由器中的转发表记录目的地址→输出端口的映射
    3. 转发表被选路模块修改,约1~5分钟更新一次
    4. 同一对主机之间传输的分组可能走不同的路径,从而可能重排序
      在这里插入图片描述

    3.1数据报网络与虚电路网络对比

    在这里插入图片描述
    在这里插入图片描述

    4.路由器架构概述

    1. 路由器的两个主要功能:
      • 选路:运行选路协议,计算转发表
      • 转发:依据转发表,从输入链路到输出链路转发数据报
        在这里插入图片描述

    4.1输入端口功能

    在这里插入图片描述

    4.2交换结构

    在这里插入图片描述

    4.2.1通过内存交换

    在这里插入图片描述

    4.2.2通过总线交换

    在这里插入图片描述

    4.2.3通过互联网络交换

    在这里插入图片描述

    4.3输出端口功能

    在这里插入图片描述

    4.4输入端口排队与丢包

    在这里插入图片描述

    4.5输出端口排队与丢包

    在这里插入图片描述

    4.6分组丢弃

    1. 分组丢弃策略:当队列满时丢弃哪个分组?
      • 弃尾:丢弃到来的分组
      • 按照优先级丢弃:低优先级分组
      • 随机丢弃:随机选择一个分组丢弃,如Ramdom Early Detection (RED)
    2. 主动队列管理:
      • 在队列满之前就开始丢弃分组,如RED

    4.7随机早检测(RED)

    1. 丢弃策略:
      • 路由器在每个端口上记录输出队列的平均长度:
        • 在这里插入图片描述
      • 当平均队列长度达到第一个阈值minth时,按照丢弃概率 p 丢弃到来的分组
      • 当平均队列长度达到第二个阈值maxth时,丢弃每一个到达的分组
      • 概率 p 是平均队列长度和上一次丢弃距当前时间的函数,分组队列长度越大、丢弃间隔越大,p越大
    2. 和TCP拥塞控制机制配合使用:
      • 当平均队列长度达到低限时,若丢弃一个包,TCP发送端收到3个重复ACK,发送速率降至一半
      • 当平均队列长度达到高限时,每个包都丢弃,TCP发送端超时,发送速率降至最低

    4.8. 调度策略

    1. 调度:

      • 输出端口选择下一个要发送的分组
    2. 先来先服务

      • 按照分组到达输出队列的次序发送
    3. 优先级调度:

      • 严格按优先级发送分组
      • 可以根据分组头中的某些域,如IP地址、端口号等设置优先级
      • 相同优先级按先来先服务发送
    4. 非抢占式优先级排队:

      • 分组一旦开始传输,就不能被中断
      • 在这里插入图片描述
    5. 轮询调度:

      • 在几个队列之间轮流提供服务,每次选择一个队头分组发送
      • 在这里插入图片描述
    6. 加权公平排队:

      • 每个队列分配一个带宽权重(比例)
      • 按照每个队列的带宽权重,选择一定数量的分组发送
      • 在这里插入图片描述

    5. 因特网的网络层

    主机和路由器的网络层功能包括:

    在这里插入图片描述

    5.1 IP只提供最小的传输服务

    1. IP提供的服务:
      • 将数据报交付到目的地址和目的协议
    2. 尽管IP不提供任何服务承诺,但仍尽最大努力解决分组在网络中传输时可能遇到的一些问题:
      • 数据报过大无法通过某个中间网络(措施:对数据报进行分片)
      • 数据报可能因寻路错误在网络中循环(措施:设定数据报的最大转发次数)
      • 报头出错可能导致误投递(措施:对报头检错)

    5.2 IP数据报格式

    在这里插入图片描述

    5.3 IP分片与重组

    1. 链路层帧能承载的最大数据字节数称为MTU (Max. Transmission Unit)
      • 不同类型的链路可能具有不同的MTU
      • 以太网帧最多携带1500字节载荷,有些广域网帧只能携带576字节载荷
    2. 传输过程中,较大的IP数据报可以被分片:
      • 数据报载荷划分为若干较小的数据块,每个数据块封装成一个独立的数据报传输
      • 数据报在传输的过程中可以被多次分片,但仅在目的主机上重组

    在这里插入图片描述

    5.4分片的报头

    1. 分片的报头取自原始数据报
    2. 与分片有关的字段:
      • 标识:每个分片必须携带与原始数据报相同的标识
      • 偏移量:指示分片中的数据在原始数据报载荷中的位置
      • 标志位:
        • MF(more fragments):最后一个分片的MF=0,其余分片的MF=1
        • DF(don’t fragment):DF=1表示不允许对数据报分片
    3. 分片报头中的以下字段需要修改:
      • 总长度,偏移量,MF,TTL,头部检查和

    5.5 分片的数据长度

    1. 假设原始数据报的报头长度为H,分片的数据长度 N,应满足:H+N ≦ MTU

    2. 由于偏移量只有13比特,除最后一个分片外,其余分片的数据长度应为8字节的整倍数

    3. 考虑到分组传输效率,除最后一个分片外,分片的数据长度 N 应为满足以上两个条件的最大整数

    5.6 数据报分片的处理过程

    1. 根据报头长度H和输出线路的MTU,确定分片的最大数据长度N
    2. 将数据报的载荷划分成长度为N的若干数据块(最后一个数据块可能不足N字节)
    3. 将原始报头加到每一个数据块的前面,修改报头中的以下字段:
      • 总长度 = H + 数据块长度
      • 最后一个报头的MF位置0,其余报头的MF位置1
      • 偏移量 = 数据块在原始数据报载荷中的字节序号/8
      • TTL=TTL-1
      • 计算头部检查和

    5.7分片的例子

    • 例:要将一个总长度=4000字节的IP包发送到MTU=1500字节的链路上,IP报头长度H=20字节
    • 数据块最大长度 N = 1480字节
    • 原始数据报的载荷(3980字节)被分成三个数据块,长度分别为1480字节、1480字节和1020字节
      在这里插入图片描述

    5.8重组

    1. 将收到的分片重新组装成原始数据报的过程称为重组,重组在目的主机中进行:
      • 收集分片:目的主机使用 <源IP地址,标识> 确定属于同一个数据报的分片
      • 利用最后一个分片(MF=0)计算原始数据报长度
        • 原始数据报长度=偏移量×8 + 分片总长度
        • 原始数据报载荷=偏移量×8 +(分片总长度 – 报头长度)
      • 组装:将各分片中的数据块按照其在原始数据报载荷中的偏移量重组

    5.9 分片的问题

    1. 分片的开销:
      • 降低了路由器的吞吐量
      • 消耗了目的主机的资源:每个重组的数据报需要一个重组缓冲区和一个重组定时器
    2. 针对分片的DoS攻击:
      • 攻击者发送一系列奇怪的分片,消耗目的主机的资源
    3. IPv6取消了路由器分片的功能:
      • 源主机发送探测报文,确定路径上的最小MTU
      • 源主机构造的数据报大小不超过最小MTU
      • 路由器丢弃超大的数据报,并发送错误报告

    重要知识点

    1. 分片的方法:
      • 确定分片的大小
      • 修改报头域(尤其是偏移量)
      • 根据最后一个分片计算原始数据报的长度
    2. 数据报在传输过程中可以被多次分片,但仅在目的主机上组装,为什么?
    3. 注意报头中几个长度的单位:
      • head length:4个字节
      • Length:1个字节
      • fragment offset:8个字节

    6. IP编址

    1. 接口(interface):
      • 主机/路由器与物理链路的边界
      • 路由器有多个接口
      • 主机典型地有一个或两个接口(比如以太网接口、Wifi接口)
    2. IP address:
      • 每个网络接口对应一个IP地址
      • IP地址是一个32位的二进制数,通常用点分十进制数表示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    6.1 单播地址结构

    1. 单播地址除类别标识外,其余比特被划分成网络号和主机号两部分:
      • 网络号:在因特网范围内标识一个物理网络
      • 主机号:标识该物理网络上的一个网络接口
    2. 根据该编址方法可知,同一个物理网络上的网络接口,它们的IP地址具有相同的网络号

    6.2地址分配

    1. 因特网中的每个接口必须具有唯一的IP地址
    2. 为在因特网范围内保证IP地址的全局唯一性:
      • 网络号由ICANN统一分配
      • 主机号由网络管理员统一分配
    3. 建立私有网络的组织可以自己选择网络号,但同样必须保证每个网络号在私有网络内的唯一性

    6.3特殊的地址

    1. 全0或全1的网络号及主机号是特殊地址,从不分配给特定的网络接口:
      • 网络号有效、主机号全为0的地址:保留给网络本身。
      • 网络号有效、主机号全为1的地址:保留作为定向广播,即在网络号指定的网络中广播(仅用作目的地址)
      • 32位全1的地址:本地广播地址,表示仅在发送节点所在的网络中广播(仅用作目的地址)
      • 32位全0的地址:指示本机(仅用作源地址)
      • 网络号为0、主机号有效的地址:指代本网中的主机
      • 形如127.x.y.z的地址:保留作为回路测试,发送到这个地址的分组不输出到线路上,而是送回内部的接收端。

    6.4网络数量与地址数量

    A、B、C类地址对应不同规模的网络

    一个A类、B类及C类地址可提供的接口地址数:
    A类地址:224-2 = 16777214
    B类地址:216-2 = 65534
    C类地址:28-2 = 254

    A类、B类、C类地址的个数:
    A类地址:27-2 = 126
    B类地址:214-2 = 16382
    C类地址:221-2 = 2097152

    6.5 子网(subnet)

    管理员通常利用路由器,将一个较大的网络划分成若干较小的网络(子网),每个网络使用一部分地址空间

    在这里插入图片描述

    6.6子网编址

    1. 从概念上说,引入子网仅略微改变了IP地址的解释:
      • 主机号被进一步划分成子网号和主机号两部分
      • 子网号标识网络内的一个子网,主机号标识子网中的一个网络接口
    2. 管理员可以根据需要,如子网的数量和规模,选择合适的子网号长度
      在这里插入图片描述

    6.7子网掩码(subnet mask)

    1. 子网掩码用于指示IP地址中子网号与主机号的边界
      • 子网掩码是一个32比特的数,其中对应主机号的比特为0,其余比特为1
      • 子网掩码也采用点分十进制表示,如255.255.252.0
    2. 如何从IP地址中获取子网地址?
      • 将IP地址与子网掩码做“与”运算
      • 例如:128.10.1.1 AND 255.255.255.0 = 128.10.1.0
      • 注意:子网地址 ≠ 子网号,子网地址包括主机号之前的所有比特
        在这里插入图片描述

    6.8 子网:更确切的含义

    1. 子网掩码将IP地址划分为两部分:
      • 子网地址:对应子网掩码中“1”的部分
      • 主机地址:对应子网掩码中“0”的部分
    2. 子网是什么?
      • 具有相同子网地址、且不需要通过路由器就可以相互到达的网络接口构成一个子网
      • 在因特网文献中,子网也称为IP网络或直接称为网络
        在这里插入图片描述

    6.9 如何确定子网?

    1. 将网络接口与主机/路由器分开,形成一些分离的网络岛
    2. 每个网络岛就是一个子网
      在这里插入图片描述

    6.10 举例

    在这里插入图片描述

    6.11 要求理解的概念

    1. 子网:

      • 子网内部的接口具有相同的子网地址
      • 子网内部的通信不需要经过路由器
      • 子网之间通信一定要经过路由器
    2. 路由器:

      • 在子网之间转发分组的设备,负责将分组从一个子网转发至另一个子网

    6.12 IP数据报转发

    1. 网络层转发数据报的两种情形:
      • 直接交付(direct delivery):节点将数据包直接发送给目的主机(不需要其它路由器转发)
      • 间接交付(indirect delivery):节点将数据包转发给一个路由器去处理
        在这里插入图片描述

    6.13直接交付和间接交付

    1. 如何判断使用直接交付还是间接交付?
      • 直接交付:数据包的目的地址与本节点的某一端口在同一个子网中
      • 间接交付:数据包的目的地址不与本节点的任何一个端口在同一个子网中
    2. 直接交付的实现:
      • Chapter 6
    3. 间接交付的实现:
      • 节点查找转发表,将数据包发送给下一个路由器

    7. 转发表

    1. 转发表记录目的地址到输出端口的映射
    2. 取决于目的地址类型的不同,有三类转发表项:
      • 目的地址是一个子网地址:地址前缀表项
      • 目的地址是一个特定的网络接口地址:特定主机表项
      • 缺省项:不匹配所有其它表项的地址都被映射到一个默认的路由器端口
    3. IP采用逐跳选路:
      • 每个转发表项只记录去往目的地址的下一跳信息(下一个要到达的路由器端口),而不是一条完整的端到端路由
    4. 每个转发表项包括:
      目的地址/掩码、下一跳地址、输出端口等
      下一跳地址必须与输出端口在同一个子网中(不需要通过其它路由器就可以直接到达)

    7.1 转发表的例子

    在这里插入图片描述

    7.2IP数据报的转发过程(主机/路由器)

    在这里插入图片描述

    要求掌握的概念

    1. 直接交付:
      • 不经过路由器就能到达(在同一个子网内)
    2. 间接交付:
      • 需要路由器转发才能到达(不在同一个子网内)
    3. 逐跳转发:
      • 每次只转发到下一跳,下一跳必须是直接可达的(在同一个子网内)
    4. 如何依据转发表进行转发决策

    7.3 无类域间路由选择

    在这里插入图片描述

    1. 分类编址的缺点:
      • 只能按照三种固定的大小分配地址空间,地址浪费严重(尤其是A类、B类地址)
      • 转发表必须记录每个已分配的网络,转发表规模爆炸式增长(C类地址网络非常多)
    2. CIDR:
      • 按照实际需要的地址数量分配地址空间,提高地址使用效率
      • 允许将若干条转发表项进行聚合,减小转发表规模

    7.4按照实际需要分配地址

    1. 举例:
      • 若一个网络需要2000个地址,可为其分配一个具有2048个连续地址的地址块;这些地址的前21位必须相同,从而可将其看成是一个具有21位子网地址的网络
    2. CIDR地址分配的原则:
      • 地址块的长度 L 必须是 2 的幂次
      • 所有地址的前(32-log2L)位必须相同
    3. 网络地址的表示方法:
      • 用掩码指示网络地址的长度,如194.24.0.0 ,255.255.248.0
      • 用“/长度”指示子网地址的长度,如194.24.0.0/21

    7.5机构如何获得网络地址?

    1. 机构通常从ISP的地址空间中分配地址
    2. 假设:ISP有一块地址200.23.16.0/20(共4096个地址),8个机构向该ISP申请地址,每个申请512个地址
      在这里插入图片描述

    7.6 CIDR地址分配的另一个例子

    1. ISP有一块从194.24.0.0/16 开始的地址块
      • 剑桥大学申请2048个地址
      • 牛津大学申请4096个地址
      • 爱丁堡大学申请1024个地址
        在这里插入图片描述

    7.7 地址分配过程

    在这里插入图片描述

    7.8 更新转发表

    在这里插入图片描述

    8. 地址聚合

    1. 转发表中符合以下条件的若干个表项可以合并成一个表项:
      • 这些表项的目的地址可以聚合成一个前缀更短的地址
      • 这些表项使用相同的下一跳
    2. 地址聚合的过程可以递归进行
      在这里插入图片描述

    8.1 不能被聚合的转发表项

    1. 若个别表项不满足路由聚合的条件:
      • 仍然可以在转发表中给出一条聚合表项: 200.23.16.0/20
      • 同时给出不能被聚合的表项: 200.23.18.0/23
    2. 最长前缀匹配:
      • 在所有匹配的路由表项中,选择前缀最长的表项

    在这里插入图片描述

    8.2 查找转发表:使用分类地址

    1. 转发表分为A、B、C三张表,分别记录A、B、C三类地址的转发表项,用哈希表组织

    2. 路由器收到数据报后:

      • 根据目的地址的类型确定要查找的转发表
      • 根据目的地址的类型提取网络地址
      • 用网络地址在相应的转发表中进行哈希查找(精确匹配)

    8.3 采用CIDR后出现的问题

    1. 为与某个转发表项 Dest_addr/prefix_len进行匹配运算:
      • 路由器需要先从表项中读出地址掩码(或prefix-len值)
      • 计算包的目的地址前缀(用地址掩码和包的目的地址相与)
      • 与Dest_addr的地址前缀比较
    2. 引入的问题:
      • 地址前缀的长度prefix_len可以是任意值
      • Prefix_len无法从地址本身得到,只能从转发表项中得到
      • 必须从所有匹配的表项中选择前缀最长的表项
    3. 在大规模转发表中进行快速查找是一个难题(已经解决)

    8.4 IP编址的小结

    1. 基于类的编址存在两个问题:
      • 地址空间浪费
      • 转发表空间爆炸
    2. CIDR解决了这两个问题:
      • 按需分配解决了地址空间浪费的问题
      • 地址聚合解决了转发表空间爆炸的问题
    3. CIDR引入的问题:
      • 地址聚合要求采用最长前缀匹配的原则查找转发表
      • 最长前缀匹配给转发表的快速查找带来了困难

    8.5 主机/路由器如何获得IP地址?

    1. 路由器:
      • 管理员手工配置路由器各个接口的IP地址
    2. 主机:
      • 管理员手工配置主机IP地址,服务器通常采用这种方法
      • 使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)获取IP地址、子网掩码、缺省路由器、本地DNS服务器等配置信息,个人终端通常采用这种方法
    3. 使用DHCP的好处:
      • 免去手工配置的麻烦(即插即用
      • 可用少量的IP地址服务较多的客户(地址重用

    8.6 DHCP

    1. 目标: 允许主机加入网络时自动获取配置信息
    2. DHCP是一个客户-服务器模式的应用协议
      • 每个子网中须有一个DHCP服务器,或者一个DHCP代理
      • 新到达的主机上运行DHCP client
        在这里插入图片描述

    8.7 DHCP概述

    1. 主机广播 “DHCP discover” 报文
      • 寻找子网中的DHCP服务器
    2. DHCP服务器用 “DHCP offer” 报文进行响应
      • 给出推荐的IP地址及租期、其它配置信息
    3. 主机用 “DHCP request” 报文请求IP地址
      • 主机选择一个DHCP服务器,向其请求IP地址
    4. DHCP服务器用“DHCP ack” 报文发送IP地址
      • 服务器响应客户的请求,确认所要求的参数
    5. DHCP服务器使用UDP端口67,客户使用UDP端口68

    8.8 DHCP客户-服务器交互

    1. 在这里插入图片描述
    2. DHCP: more than IP addresses:
      • DHCP不只返回分配的IP地址,还包括:
        • 第一跳路由器的IP地址(缺省网关、边缘路由器)
        • 本地DNS服务器的IP地址
        • 地址掩码

    8.9 DHCP报文传输

    1. 入网的笔记本电脑需要本机地址、第一跳路由器地址、本地DNS服务器地址

    2. DHCP请求被封装到UDP/IP/以太帧中

    3. 以太帧在局域网中广播 (dest: FFFFFFFFFFFF), 被运行了DHCP服务器的路由器收到

    4. DHCP请求被提取出来,送给DHCP服务器

      在这里插入图片描述

    5. DHCP服务器构造DHCP响应,包含客户的IP地址、客户第一跳路由器的IP地址、本地DNS服务器的IP地址

    6. DHCP响应经过封装、传输、解封装,到达DHCP客户
      在这里插入图片描述

    9. 网络地址转换(NAT)

    1. 动机
      使用一个公用IP地址支持许多用户同时上网
      仅为公共可访问的节点分配公用IP地址(减少需要的公用IP地址数)
      网络内部节点对外是不可见的(安全考虑)
      在这里插入图片描述

    9.1 NAT举例

    在这里插入图片描述

    9.2 NAT实现

    1. 外出的数据报:
      • 将数据报中的(源IP地址,源端口号)替换为(NAT IP地址,NAT端口号)
    2. NAT 转换表:
      • 记录每个(源IP地址,源端口号)与(NAT IP地址,NAT端口号)的转换关系
    3. 进入的数据报:
      • 取出数据报中的(目的IP地址,目的端口号)查找NAT转换表,然后用转换表中对应的(IP地址,端口号)进行替换

    9.2.1NAT: Network Address Translation

    1. 16比特端口号:
      • 允许一个NAT IP地址同时支持65535个对外连接
    2. NAT的使用有争议:
      • 路由器应当只处理三层以下的包头(端口号在传输层)
      • 违反端到端原则(节点介入修改IP地址和端口号)
    3. NAT妨碍P2P应用:
      • NAT只允许内部主动发起的通信(位于NAT后面的主机对外是不可见的)
      • 但P2P应用要求任何对等方可以向任何其它(参与的)对等方发起通信

    9.2.2NAT 穿越问题

    1. Client希望连接服务器 10.0.0.1,但是
      • 地址 10.0.0.1 为内部地址,对于client 不可见
      • Client 只能看到NAT路由器的公共IP地址 138.76.29.7
        在这里插入图片描述

    9.2.3使用UPnP实现NAT穿越

    1. 假设主机10.0.0.1在端口3345上运行一个BT程序:
      • BT程序请求NAT产生一个“洞”,将 <10.0.0.1, 3345>映射到
        <138.76.29.7, 5001>上
      • BT程序向追踪器通告它在
        <138.76.29.7, 5001>上可用
      • 其它主机通过追踪器可以看到该主机,并能向
        <138.76.29.7, 5001>发起TCP连接
      • NAT将< 138.76.29.7, 5001>上收到的SYN包转发给主机10.0.0.1
        在这里插入图片描述

    9.2.4使用中继服务器实现NAT穿越

    1. 在 Skype 中使用:
      • NAT 后面的服务器与中继器建立连接
      • 外部客户与中继器建立连接
      • 中继器在两个连接之间转发分组
      • 在这里插入图片描述

    重要知识点

    1. 子网、路由器与数据报转发:
      • 子网内部通信不需要经过路由器,子网之间通信必须经过路由器
      • 子网内部可直接交付,跨子网需间接交付
      • 逐跳转发:下一跳必须直接可达
    2. CIDR:
      • 地址分配,地址聚合,最长前缀匹配
    3. NAT的工作原理
    4. CIDR、DHCP、NAT均可以部分解决IP地址不足的问题,但角度不同

    10. IPv6

    1. 最初的动机: IPv4
    2. 地址将很快耗尽
      • 进一步的动机是借机改进IPv4的不足之处:
      • 简化头部格式,加快数据报处理和转发
      • 支持服务质量
      • 支持多播
      • 支持移动性
      • 增强安全性
      • ……
    3. IPv6与IPv4不兼容,但与其它所有因特网协议都兼容

    10.1 IPv6地址

    1. 128位,使用冒号十六进制表示,每16位以十六进制的形式写成一组,组之间用冒号分隔,如8000:0:0:0:0123:4567:89AB:CDEF
    2. 地址表示的零压缩技术:可将连续的多组0压缩为一对冒号,如以上地址可表示为:8000::0123:4567:89AB:CDEF
    3. IPv6定义了三种地址类型:
      单播地址:一个特定的网络接口
      多播地址:一组网络接口
      任播地址(anycast):一组网络接口中的任意一个(通常是最近的一个)

    10.2 IPv6数据报格式

    1. IPv6数据报以一个40字节的基本头开始,后面跟零个或多个扩展头,然后是数据
      在这里插入图片描述

    10.3 PRI(或traffic class)

    1. 作用:
      • 发送方在该域定义数据报的优先级
      • 路由器发现网络拥塞时,按优先级从低到高的顺序丢弃包
    2. IPv6将网络流量划分为两大类:
      • 受拥塞控制的流:
        • 非实时流属于这一类,优先级0~7,按照重要性及用户体验设定
      • 不受拥塞控制的流:
        • 实时多媒体流属于这一类,优先级8~15,尚无标准,可以按照用户要求的服务质量等级定义

    10.4流标签(flow label)

    1. 流标签:用于标明属于同一个流(flow)的数据报,但流的概念并没有明确地定义
    2. 一般来说,流是具有相同传输特性(如源/目的、优先级、选项等)、并要求相同处理(如使用相同的路径和资源、具有相同的服务质量要求等)的一系列数据包
    3. 流标签由发送方分配,<源地址,流标签>唯一标识一个流:
      • 路由器维护一张流表(flow table),记录每一个流需要的处理;收到数据包后,根据源地址和流标签查找流表,进行相应的处理
    4. 流标签的引入使得IPv6具备了对数据包进行区分处理的能力:
      • 流标签的使用极大地降低了数据包分类的复杂度(多元包分类->二元包分类)

    10.5 扩展头部

    在这里插入图片描述

    10.6 IPv6包格式

    1. 与IPv4固定头相比,IPv6的基本头中去掉了以下字段:
      • IHL:IPv6的基本头总是40字节长
      • 与分片相关的字段:IPv6路由器不负责分片
      • 头校验:计算校验和太花时间,现在的网络非常可靠,且链路层和传输层上往往都有差错检测
    2. IPv6基本头中增加了以下字段:
      • 流标签:支持对数据包区分处理
    3. IPv6基本头改变了以下字段的作用:
      • Type of Service:代之以Traffic Class
      • 总长度:代之以载荷长度
      • Protocol:代之以Next header,允许任意扩展选项
    4. IPv6的基本头与IPv4的固定头
      • 在这里插入图片描述

    10.7 从IPv4过渡到IPv6

    在这里插入图片描述

    10.7.1 IPv6数据包如何穿越IPv4网络?

    在这里插入图片描述

    10.7.2 建立隧道的方法:封装数据包

    在这里插入图片描述

    10.7.3 隧道技术的要点

    在这里插入图片描述

    重要知识点

    1. IPv4与IPv6不兼容
    2. 隧道技术的要点和应用
    3. 如何解决IPv4与IPv6共存:
      • 双协议栈 + 隧道技术

    10.8 我国IPv6的发展现状

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    第七章知识点回顾

  • 相关阅读:
    【ISP】浅析AEC
    Vue3组件计算属性的缓存
    设计模式4、建造者模式 Builder
    洛谷千题详解 | P1014 [NOIP1999 普及组] Cantor 表【C++、Java语言】
    Servlet详解
    工作比读研简单多了
    警惕!Python 中少为人知的 10 个安全陷阱!
    java拼图游戏(待优化)
    golang中使用泛型
    JDK 11统一日志管理
  • 原文地址:https://blog.csdn.net/weixin_56462041/article/details/127997485