type
status
slug
summary
tags
category
icon
password
new update day
Property
Oct 22, 2023 01:31 PM
created days
Last edited time
Oct 22, 2023 01:31 PM

route.hh

routing_table_

  • key:前缀长度
  • value:路由项列表

成员函数实现介绍

add_route

函数定义:给一个前缀,前缀长度,下一跳,接口数,然后生成一个对应的路由信息,插入到路由表中
函数逻辑:
  • 如果路由表中有相关前缀长度的路由表项
    • 将其插入到列表后面
  • 否则
    • 直接插入到对应前缀长度并初始化一个列表

route()

函数逻辑:
  • 遍历每个接口
    • 尝试接收数据
    • 如果有数据
      • 如果 ttl ≤ 1
        • ttl 过期
        • continue
      • ttl -1
      • 重新计算校验和
      • 取出目标地址
      • 最长前缀匹配的路由,初始化为默认路由
      • 遍历路由表项
        • 获取路由表项前缀长度
        • 如果是默认路由
          • continue
        • 获取目标地址掩码
        • 获得目标网络号
        • 获取该前缀长度的路由表项列表
        • 遍历路由表项列表
          • 获取路由表项网络前缀
          • 将路由表项前缀与掩码与获得路由表项目标网络地址
          • 如果路由表项网络与目标地址网络一致
            • 如果路由表项长度大于目前最长匹配项的长度
            • 将最长匹配路由表项更新为现在的路由表项
      • 如果最长匹配项存在
        • 如果下一跳不为空
          • 向最长匹配路径中端口发送目标地址为对应下一跳地址的数据报
        • 如果为空
          • 项最长匹配路径中的端口发送目标地址为目的地址的数据报
在树莓派官网系统 Raspberry Pi OS 上吃鹅全过程CS144-2023-Spring network_interface.cc 功能部分实现讲解