Network Layer

image-20231228155154731
  • 为什么不用硬件地址进行通信

    • 设备数量问题 : 因为设备比较多, 供应商也比较多
    • 规格问题 : 不同供应商的解决方案不同, 所有使用硬件地址进行通信的通用性比较低
    • 寻址问题 : 全球设备太大, 如果使用硬件设备, 那么进行定位比较复杂

网络层概述

image-20231102151832346

第三层职责

  • 通过网络移动数据 : 不同网段之间的通信, 不同的广播域, 两个广播域之间的进行了划分, 互不干扰, 不是广播的通信以及对另一个网段的广播需要能传达给对方

  • 使用分层寻址方案 (与MAC寻址相反, 后者平坦)

  • 细分网络并控制流量(flow) : 一步步进行细化, 越近了解的越多; IP地址一致的, 可以忽略物理层的不同

  • 减少网络拥堵, 基于IP做分段和传达, 用来减少拥堵

  • 与其他网络交谈

  • 对于不同数据链路层的帧, 第三层基于IP地址来实现跨介质的逻辑理解和连通

  • 第三层负责进行连通和传达, 数据可靠性由终端设备(第四层及以上)进行保证

第三层设备

  • 路由器

    • 互连网段或网络 (不同网段的分割)
    • 根据IP地址做出合理的决定
    • 确定最佳路径
    • 将数据包从入站端口切换到出站端口

IP数据报格式

首部部分

  • 上面蓝框部分的整体是首部部分

  • 固定部分20字节

  • 可变部分40字节

版本

  • 占4bit, 即IP协议的版本, 目前的IP协议版本号为4 (即IPv4)

  • 通信双方使用的IP协议版本号必须一致

首部长度

  • 占4bit, 表示IP数据报首部的长度, 每个单位4个字节

  • 最小十进制取值为5, 表示IP数据报首部只有20字节固定部分

  • 最大十进制取值为15, 表示IP数据报首部包含20字节固定部分和最大40字节可变部分

  • 由于固定部分为20个字节, 假如当首部长度为6时, 即24个字节时, 则在可选字段部分(即可变部分)增加4个字节长度

服务类型

  • 占8bit, 用来获得更好的服务

  • 早期 : 延时, 可靠性, 代价等标志位

  • 现在 : 区分服务, 前6个bit表示区分服务码, 后2个bit作为保留

  • 一般情况不使用

总长度

  • 占16bit, 指首部和数据之和的长度, 单位为字节, 由于放到帧里, 所以大多数小于1500字节

标识

  • 占16bit, 是一个计数器, 用来产生数据报的标识

  • 属于同一个数据报的各分片数据报应该具有相同的标识

  • 只是为了做报文分片的问题, 因为路由器可能连接的是不同网络, 比如有线帧和无线帧

  • 接收方依据标识号进行合并 (相同标识号的报文是一个大报文, 可以合并)

标志

  • 占3bit, 最高位为0

  • 让发送方对报文进行控制, 让中间路由器对其进行控制

  • DF(Don’t fragement) : 是否允许做分片, 0允许做分片, 1不允许做分片

  • MF : MF为0表示最后一个分片, 1表示后面还有分片

  • 保留位: 必须为0

片偏移

  • 占13bit, 较长的分组在分片后某片在原分组中的相对位置, 以8字节为偏移单位

  • 相同标识号, 然后根据片偏移进行重排(先发未必先到), 偏移比较小的更靠前

  • 例子

    image-20231107213839650
    • 注意: 片偏移量必须为整数, 当 分片数据长度 / 8 结果为小数时, 将结果除以8后向下取整再乘8, 得到新的分片长度

    标识, 标志, 片偏移3个字段用于IP数据报分片

    当IPv4数据报长度超过MTU(最大传输单元)时, 无法封装, 需要进行切片

生存时间

  • 占8bit, 记为TTL(Time To Live), 数据报在网络中可通过的路由器数的最大值, 以跳数为单位

  • 通过计数的方式来进行统计

  • 最大值是255

  • 路由器每转发一次, 就会对生存时间-1

  • 减小为0后, 就会丢弃, 并且通知给发送方我已经丢掉了这个报文

  • 防止在环上进行传输, 避免由于回路问题, 造成过大的网络资源浪费

协议

  • 占8bit, 指出此数据报携带的数据使用何种协议以使目的主机的IP层将数据部分上交给哪个处理过程

  • 有的协议是上层的

  • 有的协议是第三层协议

首部检验和

  • 占16bit, 只检验数据报的首部, 不包括数据部分, 这里不采用CRC检验码而采用简单的计算方法

  • IP数据报每经过一个路由器, 路由器都要重新计算首部检验和

IP地址和子网划分

网络层地址

  • IP地址为32位长

  • 以点分十进制格式表示为4个八位字节 : 133.14.17.0

  • IP地址包含两个组成部分

    • 网络ID

    • 主机ID

网络地址 : 用来标识网段

  • 标识设备所连接的网络

  • 可以由前三个八位位组中的一个, 两个或三个来标识

主机ID : IP地址后面占据1-3个字节

  • 由网络管理员分配

  • 识别该网络上的特定设备

  • 可以由最后三个八位位组中的一个, 两个或三个来标识

分类编址的IP4v地址

  • 不同的类地址为地址的网络部分和主机部分保留不同数量的位

  • N是Net ID, H是Host ID

分类

  • IP地址主要通过第一个字节进行划分

  • 0-127 A类地址

  • 128-191 B类地址

  • 192-223 C类地址

  • 224-239 D类地址 (多播)

  • 240-255 E类地址 (研究)

主机的数量

  • 每个类别的最大主机数量各不相同 (不包括网络号)

    • A类拥有16,777,214个可用主机 (224 - 2)
    • B类拥有65,534个可用主机 (216 - 2)
    • C类拥有254个可用主机 (28 - 2)
  • 为什么每一类地址中都要减去2

    • 每个网络中的第一个地址都保留用于该网络地址
    • 最后一个地址是为广播地址保留的

保留地址

image-20231102153509759

image-20231102153826834

  • 网络地址 : 在地址的主机部分中以二进制0结尾的IP地址

    • A类网络地址示例 : 113.0.0.0
    • 网络上的主机只有具有相同网络ID的其他主机才能直接通信 (用来确定是不是在一个网段里面)
  • 广播地址 : 用于将数据发送到网络上的所有设备 (一般是一个网段之间的)

    • 广播IP地址在地址的主机部分中以二进制1结尾
    • B类地址的广播地址示例 : 176.10.255.255
  • 示例

    • Class A
      1. 99.0.0.0: a reserved network number
      2. 99.255.255.255: a broadcast number
    • Class B
      1. 156.1.0.0: a reserved network number
      2. 156.1.255.255: a broadcast number
    • Class C
      1. 203.1.17.0: a reserved network number
      2. 203.1.17.255:a broadcast number

专用地址空间

  1. 10.0.0.0 - 10.255.255.255

  2. 172.16.0.0 - 172.31.255.255

  3. 192.168.0.0 - 192.168.255.255

  • 有些IP地址范围保留用于专用IP寻址方案, 上述地址都是用作局域网的内部网段

  • IP地址耗尽及其解决方案

    • NAT
    • CIDR
    • IPv6 (最终解决方案)
  • 发展过程 : 网络位数小于24, 使得其可以组成超网

  • 多个网段进行划分, 保留足够的个人子网网段划分

子网划分 (FLSM)

  • 定长的子网掩码FLSM (Fixed Length Subset Mask)

  • 网络管理员有时需要将网络划分为较小的网络, 称为子网, 以提供额外的灵活性

  • 从主机字段借来的位被指定为子网字段 (Subnet Fields)

  • 从Host中借位进行子网划分

  • 子网掩码 : 是由发送方提供

  • 大的子网划分为小的子网来提高灵活性和利用率

基本概念

  • 子网是网络的较小部分

    • 提供寻址灵活性 (小的局域网可以完成隔离)
    • 子网划分只需要本网段网络管理员进行处理即可, 每一个子网也是一个网络
  • 子网地址通常由网络管理员在本地分配 : 每一个子网也是一个Net, 实际上是和Net是一个标准的

  • 子网减少了广播域 : 使得广播域变小, 提高网络利用率, 避免接受到大量的无用的广播, 广播只能在对应子网中进行广播

我们可以借多少位?

  • 可以借用的最少位数是2

  • 借用的最小位数是2, 为什么?

    • 如果只借用1位以创建一个子网, 那么将只有一个网络号-0网络, 和广播号-1网络, 没有可用的专用网络
    • 如果借用两位, 01和10给Host, 00给网络ID, 11为广播地址
    • 全0可能导致误判
  • 可以借用的最大位数可以是保留至少2位主机号的任何数字 (给Host至少保留2位, 因为1位的话, 要么一个是Net, 要么一个是广播地址, 无法使用)

地址浪费

  • 我们必须在所需的子网数, 每个子网可接受的主机以及地址的浪费之间取得平衡

    • HostID里面的全0和全1不能使用
    • Subnet不可以使用全0和全1
    • 借用4位是最高效率的, 提升了划分灵活性, 影响效率

子网划分(FLSM)为什么全0全1子网号不能使用?

image-20231228143313504

子网掩码

  • 别名 : 扩展网络前缀

  • 定义我们用来构建网络的位数, 以及描述主机地址的位数

  • 默认子网掩码 (在未划分子网的情况下使用)

    • Class A 255.0.0.0
    • Class B 255.255.0.0
    • Class C 255.255.255.0

计算子网

  • 我们有一个C类网络 : 223.14.17.0

  • 我们需要完成如下划分

    • 划分成13个子网
    • 每个子网有10个主机

第一步

  • 确认默认的子网掩码

    • C类网络的默认子网掩码是 : 255.255.255.0

第二步

  • 通过从主机ID借用位来计算子网和主机的实际数量

    • 我们对每一个子网需要借用4位来满足一个子网有10台可用的主机

第三步

  • 为每个子网获得16个可能的子网和16个可能的主机, 因为

    • 对于借用的4位, 每个位可以是1或0, 从而有16中可能的组合
    • 4位剩余主机位也是如此
  • 重要 : 每个子网上只有14个可用子网和主机 (一般情况下, 可用的是15个子网, 因为0号子网可用)

    • 因为不能使用第一个和最后一个子网
    • 因为不能使用每个子网中的第一个和最后一个地址
    • 对于每个, 一个是广播地址, 一个是网络地址

第四步

  • 确定子网掩码

  • 其中X表示用于子网划分的借用位

  • 将X的位值相加, 得到子网掩码的最后一个八位位组十进制值 : 128 + 64 + 32 + 16 = 240

  • 子网掩码是 : 255.255.255.240

  • 子网掩码用于显示IP地址中的子网和主机地址字段

第五步

  • 确定主机地址的范围

  • 16个子网, 14个可用子网

  • 每个子网16个主机, 14个可用主机

计算子网网络地址

  • 第一步 : 将IP主机地址转换为二进制

  • 第二步 : 将子网掩码转换为二进制

  • 第三步 : 使用布尔运算符AND将两者进行运算

  • 第四步 : 将网络二进制地址转换为点分二进制

  • 这是子网的网络地址

  • 它可以帮助确定路径 : 用来确定是否是一个网段, 是否可以通过网关进行转发

  • 为了找到子网的网络ID, 路由器必须采用IP地址和子网掩码, 并且在逻辑上将它们取和

  • 路由器根据运算的结果进行计算

  • 上图中的子网掩码255.255.255.0是255.255.0.0借用了8位产生的 (不要理解成C类地址的子网掩码)

实践 : IP寻址问题

给定195.137.92.0并且需要8个可用子网, 请找到子网号, 主机号范围和子网广播号

  1. IP地址是C类, 默认子网掩码是255.255.255.0

  2. 借用4位获得14个可用子网, 其中需要8个可用地址

  3. 因此网络号为195.137.92.XXXXHHHH, 其中X代表网络扩展位, H代表主机号

  4. 则子网掩码为255.255.255.240

第三层设备

  • 第三层的路由器

  • 路由器的两个功能

    • 路径选择
    • 路由转发 : 将报文转发取出

IP数据报的发送和转发过程

image-20231106145917179

  • 直接交付: 同一网络中发送

  • 间接交付: 不同网络中发送

  • 如何判断目的主机与自己是否在同一个网络中?

    • 将自己的IP地址与子网掩码相与, 再将目的主机的IP地址与自己的子网掩码相与, 将两者比较
  • 间接交付时, 在本网络指定路由器帮忙转发, 所指定的路由器称为默认网关

    • 在本例中, 路由器接口0的IP地址192.168.0.126为该接口直连网络中各个主机的默认网关, 接口1同理
  • 路由器收到IP数据报后如何转发?

    • 检查IP数据报首部是否出错
      • 若出错, 则直接丢弃该IP数据报并通告源主机
      • 若没有出错, 则进行转发
    • 根据IP数据报的目的地址在路由表中查找匹配的条目
      • 若找到匹配的条目, 则转发给条目中指示的下一跳
      • 若找不到, 则丢弃该IP数据报并通告源主机
  • 转发示例

    image-20231106151323609

    • 将目的地址与路由表中的地址掩码相与, 结果与目的网络比较, 若相同则进入下一跳, 否则继续与路由表下一条进行上述操作

  • 当发送广播时, 路由器会进行广播隔离

    image-20231106151920805

路径选择

  • 路由器用于根据链路带宽, 跳数, 延迟 … 选择数据包到达目的地的路径中的下一跳

  • Internet核心层的冗余链路是很必要的 (相对于路径选项消耗, 其可靠性和稳定性更加重要)

  • 路由器根据路由规范, 选择它当时认为最为合适的路径

IP地址

  • IP地址是用软件实现的, 是指设备所在的网络

  • 路由器连接网络, 每个网络必须具有唯一的网络号才能成功进行寻找路径

  • 唯一的网络号包含在分配给该网络上每个设备的IP地址中

  • IP地址是逻辑的, 是我们配置的 (不同于MAC地址)

  • IP地址是有层次, 做转发的依据是网段而不是具体的IP

路由器端口

​ ​

  • 路由器端口记录了网段的IP地址 (和连接的地方是相同的)

路由器发送的过程

  • A5主机发送报文给B5主机, 这个报文的IP地址是B5所在的IP地址, 形成帧, 然后放到总线上

  • 路由器收到帧, 然后进行理解, 看到报文, 知道目的地是B5 (解封装)

  • 检查自己的路由表, 找到目的地对应的端口

  • 在B1端口进行转发, 形成新的帧

  • 形成一个全新的帧, 这个帧的MAC地址是B1的MAC地址

路由器端口示例

  • 接口是路由器连接到网络的附件, 在IP路由中也可以称为端口

  • 这个IP地址往往被称为这个网络的网关

  • 每个接口必须具有一个单独的唯一网络地址

    • 比如上图中的S1和S2不能是相同的IP地址
    • 路由器的连接的网段一定要是不同的

IP地址分配

  • 静态地址分配

    • 为每个单独的设备配置一个IP地址
    • 应该保留非常细致的记录, 因为如果使用重复的IP地址, 可能会出现问题
  • 动态地址分配

    • 有几种不同的方法可用于动态分配IP地址
      • RARP (Reverse Address Resolution Protocol) : 反向地址解析协议, 发起请求
      • BOOTP (BOOTstrap Protocol) : BOOTstrap协议, 用于工作栈
      • DHCP (Dynamic Host Configuration Protocol) : 动态主机配置协议 (比较多用)
  • IP地址和掩码处理后得到网络地址, 保证每个网段中的主机的网段地址应该是一致的, 不然会出现错误

ARP协议

Address Resolution Protocol (地址解析协议)

  • 为了使设备进行通信, 发送设备需要目标设备的IP地址MAC地址

  • ARP使计算机能够查找与IP地址关联的计算机的MAC地址

  • 目的方IP地址 -> 目的方MAC地址

  • 需要知道对方的MAC地址来形成数据地址

    image-20231122180336980 image-20231122180433233 image-20231122180526814 image-20231122180551373
  • ARP是在一个网络内或一条链路上进行的, 不能跨网络

    image-20231122180735463

ARP示例

  • source主机访问destination

  • 不知道目的主机在哪里

ARP表的缓存

  • 可以通过lookup命令进行

  • 在RAM里面, 如果ARP没有本条目的对应MAC地址

  • MAC地址在ARP中是有时效性的, 到时间不更新不激活就会删除

ARP的操作

  • 使用ARP机制

  • 上图是一个示意图, 此时ARP table中没有缓存

  • 图问题 : 目的MAC地址应该在前面, 源MAC地址在后面

ARP request

  • 向目的放请求MAC地址

  • 命令如图 : 寻找主机, 获取MAC地址

  • 将MAC地址设置为全1, 作为广播发送

ARP checking

  • 10.0.2.5发现不是自己的主机, 那么解析到这里丢掉就行, 同样会记录对应的发送方的MAC地址 (ARP攻击)

  • 10.2.9发现是自己的主机, 然后形成ARP应答

  • 同时10.0.2.9会记录下A主机的MAC地址, 更新到自己ARP地址中 (会记录对方的)

ARP reply

  • 向A主机进行MAC地址应答

ARP caching

  • A的主机就会把对应的条目写到ARP table中

  • 然后再次形成一个数据帧发送出去即可

ARP目的地址为本地

  • ARP请求是本网段形成的, 是一个广播就可以

  • 如果目的主机不在本网段中, 那么不能跨网段进行广播

网络交流

  • 如何与不在同一物理网段上的设备通信?

    • Default gateway 默认网关
    • Proxy ARP 代理ARP

默认网关

  • 为了使设备与另一网络上的另一设备通信, 必须为其提供默认网关

  • 默认网关使路由器上连接到源主机所在网段的接口的IP地址

  • 为了使设备将数据发送到另一个网段上的设备的地址, 源设备将数据发送到默认网关

  • 192.168.0.0和192.168.0.1接入到路由器, 如果网关错误是无法进行转发的, 自己搭建拓扑需要手动配置

    • 由网关对对应报文进行转发, 默认网关就是
    • THPCP Server进行动态生成
  • 帧被发送到另一个不通过网段的链路无意义

  • 发送报文到另一个网段, 需要路由器把对应端口的网关的MAC告诉你, 然后通过网关进行转发

Proxy ARP (代理ARP)

  • 代理ARP是ARP的一种变体

  • 如果源主机未配置默认网关

  • 发送ARP请求, 然后路由器给你一个ARP的reply, 告诉你MAC地址 (一般为本端口的IP地址)

ARP目的方不是本地

  • 路由器会把Router MAC的地址给你 (连接到本网段的MAC地址)

ARP流程图

  • ARP攻击 : 有一个机器恶意发送无用帧, 然后会将cache写满 (解决就是一段时间不处理, 然后等待ARP记录中的记录失效)

  • ARP学习是收到不同的帧, 对帧进行保存

  • 每一个ARP是有声明期的

网络层提供的两种服务

image-20231102151633416

面向连接的网络服务

  • 面向连接的网络服务

    • 就是任何发送数据的行为之前, 先要建立好连接, 协商好参数才会开始传输, 所有数据进行有序传输
    • 网络情况导致数据出现问题, 需要接受方进行一定处理来保证数据正确
  • 传输过程中要保持连接距离, 只有完成传输后才能断开连接

  • 传输比较可靠, 代价高

无连接的网络服务

  • 他们分别对待每个数据包

  • IP是无连接系统

  • 不要求发送方和接收方在发送前先建立一个连接 (不打招呼)

  • 系统不需要进行大量的数据保留, 不需要很多的缓存

  • 局域网使用的比较多, 可靠性比较低, 不处理报文丢失

  • 可靠网中, 少量报文使用无连接是可以提高效率的 (常用于比较小型的, 并且可靠性相对比较高的网络)

电路交换

  • 面向连接与电路交换

    • 并不相同
    • 要先建立一个虚电路关系, 之后报文走对应的虚电路
  • 面向连接 : 首先与接收者建立连接, 然后开始数据传输

  • 所有数据包依次在同一通道上传播, 或更常见的是在同一虚拟电路上传播

  • 问题 : 电路的利用效率低, 一个人用了别人就不能用了 (虚电路可能是分段建立, 可能局部可以复用, 但是整体不可以复用)

  • 虚电路要强于面向连接的, 传输更加可靠, 保证传输先后关系

报文交换

  • 无连接网络与数据包交换 : 并不相同

  • 当数据包从源传递到目标时, 它们可以

    • 切换到其他路径 (每一报文有各自的发送方和接收方, 可以根据当前的网络情况, 进行路由选择)
    • 乱序到达
  • 设备根据各种标准为每个数据包确定路径, 某些标准可能因分组而异

  • 将原始数据分为很多的子报文(单位), 每个子报文(单位)自己选择路径进行发送

  • 大部分的无连接网络都是基于报文交换进行实现, 实现网络拥塞

  • 出现问题时, 我们只需要重传对应部分的报文就可以 (不用重传全部数据)

路由选择协议

image-20231228212522804

概述

静态路由选择 动态路由选择
人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由 路由器通过路由选择协议自动获取路由信息
这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化 比较复杂、开销比较大。能较好地适应网络状态的变化
一般只在小规模网络中采用 适用于大规模网络
  • 因特网所采用的路由选择协议的主要特点

    • 自适应: 动态路由选择,能较好地适应网络状态的变化

    • 分布式: 路由器之间交换路由信息

    • 分层次: 将整个因特网划分为许多较小的自治系统AS

      image-20231106221827774
      • 域间路由选择:使用外部网关协议 EGP / 外部路由协议 ERP

      • 域内路由选择:使用内部网关协议 IGP / 内部路由协议 IRP

      • 注意: EGP和IGP只是路由选择协议的分类名称,而不是具体的协议

  • 常见的路由选择协议

    image-20231106222404122

  • 路由器基本结构

    image-20231106222659465

    • 路由表一般仅包含从目的网络到下一跳的映射

    • 路由表需要对网络拓扑变化的计算最优化

    • 转发表是从路由表得出的

    • 转发表的结构应当使查找过程最优化

路由信息协议 RIP [DVP]

  • 路由信息协议 RIP:Routing Information Protocol

  • RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为 “距离向量D-V(Distance-Vector)”

  • RIP使用 跳数(Hop Count) 作为度量(Metric)来衡量到达目的网络的距离

    • 路由器到直连网络的距离定义为1
    • 路由器到非直连网络的距离定义为所经过的路由器加1
    • 允许一条路径最多只能包含15个路由器, "距离"等于16时相当于不可达, 因此, RIP只适用于小型互联网

    image-20231106224334860

  • RIP认为好的路由就是"距离短"的路由, 也就是所通过路由器数量最少的路由

  • 当到达同一目的网络有多条"距离相等"的路由时, 可以进行等价负载均衡, 即将通信量均衡地分布到多条等价的路由上

  • RIP包含一下三个要点

    • 和谁交换信息: 仅和相邻路由器交换信息
    • 交换什么信息: 自己的路由表
    • 何时交换信息: 周期性交换

RIP的基本工作过程

  • 路由器刚开始工作时, 只知道自己到直连网络的距离为1

image-20231106225047136
  • 每个路由器仅和相邻路由器周期性地交换并更新路由信息

image-20231106225221974
  • 若干次交换和更新后, 每个路由器都知道到达本AS内各网络的最短距离和下一跳地址, 称为收敛

image-20231106225431134

RIP的路由条目更新规则

  • C将自己的路由表转发给相邻的路由器D

image-20231106230256191
  • 更新D的路由表

image-20231106230354948

RIP存在"坏消息传播得慢"的问题

  • "坏消息传得慢"又称为路由环路距离无穷计数问题, 这是距离向量算法的一个固有问题, 只能减少出现问题的概率, 不能解决

  • N1不可达信息传给了R2, R2迟一步更新, 在发送完自己的路由表信息后才收到N1不可达, 这时收到了R1从R2那更新的新路由, 再一次更新路由, 循环往复形成回路

image-20231106231527131

开放最短路径优先 OSPF [LSP]

  • OSPF(Open Shortest Path First)是基于链路状态

    • 链路状态指本路由器都和哪些路由器相邻, 以及相应链路的"代价"
      • "代价"用来表示费用, 距离, 时延, 带宽等等, 这些都是由网络管理人员来决定
  • OSPF在算法上保证了不会产生路由环路

  • OSPF不限制网络规模, 更新效率高, 收敛速度块

  • 思科路由器中OSPF计算代价的方法: 100Mbps / 链路带宽, 计算结果小于1的值仍记为1; 大于1且有小数的, 舍去小数

image-20231107195913358
  • OSPF相邻路由器之间通过交互问候(Hello)分组, 建立和维护邻居关系

    • Hello分组封装在IP数据报中, 发往组播地址224.0.0.5

      image-20231107200845323
    • 发送周期为10秒

    • 40秒未收到来自邻居路由器的Hello分组, 则认为该邻居路由器不可达

      image-20231107200958257
  • 使用OSPF的每个路由器都会产生链路状态通过LSA(Link State Advertisement), LSA中包含以下内容

    • 直连网络的链路状态信息
    • 邻居路由器的链路状态信息
  • LSA被封装在链路状态更新分组LSU中, 采用洪泛法发送

    image-20231107201531121

  • 使用OSPF的每个路由器都有一个链路状态数据库LSDB, 用于存储LSA

  • 通过各路由器洪泛发送封装有自己LSA的LSU分组, 各路由器的LSDB最终将达到一致

    image-20231107201839800

  • 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算, 构建出各自到达其他各路由器的最短路径, 即构建各自的路由表

    image-20231107202232137

  • OSPF的五种分组类型

    • 问候(Hello) 分组

      • 用来发现和维护邻居路由器的可达性
    • 数据库描述(Database Description) 分组

      • 向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
    • 链路状态请求(Link State Request) 分组

      • 向邻居路由器请求发送某些链路状态项目的详细信息
    • 链路状态更新(Link State Update) 分组

      • 路由器使用这种分组将其链路状态进行洪泛发送, 即用洪泛法对全网更新链路状态
    • 链路状态确认(Link State Acknowledgment) 分组

      • 对链路状态更新分组的确认分组

OSPF的基本工作过程

image-20231107203211193
  • OSPF在多点接入网络中路由器邻居关系的建立

    image-20231107203710811 image-20231107203724356

    • 选举指定路由器DR(designated router)备用的指定路由器BDR(backup designated router)

    • 所有的非DR/BDR只与DR/BDR建立邻居关系

    • 非DR/BDR之间通过DR/BDR交换信息

      image-20231107203808578
  • 为了使OSPF能够用于规模很大的网络, OSPF把一个自治系统再划分为若干个更小的范围, 叫做区域

    image-20231107204451846

    • 区域内路由器IR(Internal Router): R1, R2 R8, R9

    • 区域边界路由器ABR(Area Border Router): R3, R4, R7

    • 主干路由器BBR(Backbone Router): R3, R4, R5, R6, R7

    • 自治系统边界路由器ASBR(AS Border Router): R6

VLSM

  • 变长的子网掩码VLSM (Variable Length Subset Mask)

  • 尽可能减少对IP地址的浪费

无分类编址的IPv4地址

路由聚合

image-20231106142720831

VLSM应用示例

image-20231106144101487

ICMP

  • 为了更有效地转发IP数据报和提高交付成功的机会, 在网际层使用了因特网控制报文协议ICMP(Internet Control Message Protocol)

  • 主机或路由器使用ICMP来发送差错报告报文询问报文

  • ICMP报文被封装在IP数据报中发送

ICMP报文格式

五种ICMP差错报告报文

  • 一般会把原始的IP数据报文的数据报首部 + 8字节(数据部分的, 可能包含端口信息)作为ICMP的数据部分

  • ICMP的前8个字节是确定的

  • 然后添加一个首部作为IP数据报进行发送

终点不可达

  • 当路由器或主机不能交付数据报时, 就向源点发送终点不可达报文

  • 具体可再根据ICMP的代码字段细分为目的网络不可达, 目的主机不可达, 目的协议不可达, 目的端口不可达, 目的网络未知, 目的主机未知等13中错误

    image-20231107221537751

源点抑制

  • 当路由器或主机由于拥塞而丢弃数据报时, 就向源点发送源点抑制报文, 使源点知道应当把数据报的发送速率放慢

    image-20231107221802097

时间超过

  • 当路由器收到一个目的IP不是自己的IP数据报, 会将其生存时间TTL字段的值减1. 若结果不为0, 则将该IP数据报转发出去; 若结果为0, 除丢弃该IP数据报外, 还要向源点发送时间超过报文

    image-20231107222150552
  • 另外, 当终端再预先规定的时间内不能收到一个数据报的全部数据报片时, 就把已收到的数据报片都丢弃, 也会向源点发送时间超过报文

参数问题

  • 当路由器或目的主机收到IP数据报后, 根据其首部中的检验和字段发现首部在传输过程中出现了误码, 就丢弃该数据报, 并向源点发送参数问题报文

    image-20231107222359533

改变路由(重定向)

  • 路由器把改变路由报文发送给主机, 让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)

    image-20231107222546181

不发送ICMP差错报告报文的情况

  • 对ICMP差错报告报文不再发送ICMP差错报告报文

  • 对第一分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文

  • 对具有多播地址的数据报都不发送ICMP差错报告报文

  • 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文

两种ICMP询问报文

回送请求和回答

  • ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问

  • 收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文

  • 这种询问报文用来测试目的站是否可达及了解其有关状态

时间戳请求和回答

  • ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间

  • 在ICMP时间戳回答报文中有一个32位的字段, 其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒

  • 这种询问报文用来进行时钟同步和测量时间

ICMP应用举例

分组网间探测PING (Packet Internet Groper)

  • 用来测试主机或路由器间的连通性

  • 应用层直接使用网际层的ICMP (没有通过运输层的TCP或UDP)

  • 使用ICMP回送请求和回答报文

跟踪路由traceroute

  • 用来测试IP数据报从源主机到目的主机要经过哪些路由器

  • Windows版本

    • tracert命令
    • 应用层直接使用网际层ICMP
    • 使用了ICMP回送请求和回答报文以及差错报告报文
  • Unix版本

    • traceroute命令
    • 在运输层使用UDP协议
    • 仅使用ICMP差错报告报文