Linux 网络协议栈数据流跟踪-静态路由demo

内容

实现一个demo,来学习静态路由规则,使用静态路由,来使得通过WAN口互联的两个路由器,他们lan侧分别下挂两个路由器的pc1和pc2,能够互ping通

为什么这么做?

  • 这是一个非常经典且实用的网络实验,可以用来深理解路由的原理

实践设备需求:

  • 两台基于linux 路由器
  • 两台windows PC

框架拓扑图

配置如上图

流程分析

当PC1 (192.168.10.2) 想要Ping PC2 (192.168.20.2) 时,会发生什么?
  1. PC1检查目标IP 192.168.20.2,发现不在自己的 192.168.10.0/24 网段,于是将数据包发给自己的网关192.168.10.1
  2. AR1 收到数据包,查看自己的路由表,只知道:
    直连网络 192.168.10.0/24 (LAN口)
    直连网络 192.168.100.0/30 (WAN口)
    却不知道 192.168.20.0/24 在哪里。
  3. 这里数据包传输就会出现两种选择:
    1)传给默认网关
    2)传给静态路由

如果都没有,AR1会直接将数据包丢弃,并回复一个Unreachable的ICMP错误

数据包流向分析

  1. 当PC1 Ping PC2时,数据包的流程:
    PC1 -> AR1:
    源IP: 192.168.10.2
    目标IP: 192.168.20.2
    PC1发现目标不在本地网络,将包发给网关 192.168.10.1
  2. AR1 处理:
    AR1收到包,查看目标IP 192.168.20.2
    查询路由表匹配 到我们添加的静态路由 192.168.20.0/24 via 192.168.100.2
    它将数据包从WAN口 (192.168.100.1) 转发 出去,目标是下一跳 192.168.100.2 (AR2)
  3. AR2 处理:
    AR2从WAN口收到这个包,查看目标IP 192.168.20.2
    它发现这个IP在自己的直连网络 192.168.20.0/24 (LAN口) 上
    它将数据包从LAN口转发给PC2 192.168.20.2
  4. PC2 回复 PC1:
    PC2收到Ping请求,准备回复。回复包的源IP是 192.168.20.2,目标IP是 192.168.10.2
    PC2发现目标不在本地网络,将回复 包发给自己的网关 192.168.20.1 (AR2)
    AR2查询路由表,匹配静态路由 192.168.10.0/24 via 192.168.100.1
    它将回复包从WAN口转发 给 192.168.100.1 (AR1)
    AR1收到包,发现目标 192.168.10.100 在自己的直连网络,于是通过LAN口将包最终送达PC1
所以,我们在这做这个让静态路由的实践时,我们应该让默认网关不生效!

选择静态路由方案

添加静态路由规则:我们需要在双方的路由器上手动带领它们如何去往对方所在的局域网。

  1. 使得默认网关不生效:
    AR1配置成192.168.100.3这个无效网关

    AR2配置成192.168.100.4这个无效网关
  2. 连通性检测:

    不通,正常,因为没有正确的路径选择
  3. 在 AR1 上添加一条静态路由:
    目的网络: 192.168.20.0 (这是PC2所在的网段)
    子网掩码: 255.255.255.0
    下一跳地址: 192.168.100.2 (你要去192.168.20.0/24,请把数据包交给对面的AR2的WAN口)
    解释: 所有发往 192.168.20.0/24 的流量,请转发给 192.168.100.2。
  4. 在 AR2 上添加一条静态路由:
    目的网络: 192.168.10.0 (这是PC1所在的网段)
    子网掩码: 255.255.255.0
    下一跳地址: 192.168.100.1 (你要去192.168.10.0/24,请把数据包交给对面的Router A的WAN口)
    解释: 所有发往 192.168.10.0/24 的流量,请转发给 192.168.100.1。
  5. 规则命令查询
    AR1:

    AR2:
  6. 连通性检测:
    注意,因为是实体设备,WAN口是无法进行ping包进入的,所以我们需要清空一下防火墙:

    结果:

疑问?

  1. 默认网关可以解决80%的网络到达问题,为什么还要使用静态路由呢?
    我们的Demo正是为了理解这背后的原理,当您将来遇到那些复杂网络拓扑、多路径网络 等20%的特殊场景时,就知道如何应对了。
相关推荐
JiMoKuangXiangQu4 小时前
ARM64 进程虚拟地址空间布局
linux·arm64 虚拟地址布局
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
春日见5 小时前
如何避免代码冲突,拉取分支
linux·人工智能·算法·机器学习·自动驾驶
无垠的广袤6 小时前
【VisionFive 2 Lite 单板计算机】边缘AI视觉应用部署:缺陷检测
linux·人工智能·python·opencv·开发板
阿波罗尼亚6 小时前
Kubectl 命令记录
linux·运维·服务器
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.6 小时前
Keepalived单播模式配置与实战指南
linux·服务器·负载均衡
IDC02_FEIYA6 小时前
Linux文件搜索命令有哪些?Linux常用命令之文件搜索命令find详解
linux·运维·服务器
江畔何人初6 小时前
kubectl apply与kubectl create的区别
linux·运维·云原生
M158227690557 小时前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器
誰能久伴不乏7 小时前
【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环
linux·c++·qt