当前位置: 首页 > article >正文

同一子网通信

添加交换机后的通信流程


1. 同一子网内(使用交换机)
  1. 判断是否在同一子网
    主机A通过子网掩码判断主机B的IP地址是否属于同一子网。若在同一子网,主机A需要通过ARP获取主机B的MAC地址。

  2. ARP请求(广播)

    • 主机A发送广播ARP请求,内容为:“谁的IP地址是主机B的IP地址?请告诉我你的MAC地址。”
    • 该广播帧的目的MAC地址为FF-FF-FF-FF-FF-FF,交换机收到后会将广播帧转发到所有端口(除源端口外)。
  3. ARP响应(单播)

    • 主机B收到ARP请求后,回复单播ARP响应,内容为:“我是主机B,我的MAC地址是XX:XX:XX:XX:XX:XX。”
    • 交换机根据主机B的MAC地址和端口映射关系,将ARP响应帧转发到主机A的端口。
  4. 数据传输(单播)

    • 主机A获取主机B的MAC地址后,构造数据帧:
      • 源MAC地址:主机A的MAC地址
      • 目的MAC地址:主机B的MAC地址
    • 交换机根据MAC地址表,将数据帧从主机A的端口转发到主机B的端口。

2. 跨子网内(使用交换机和路由器)
  1. 判断目标是否在同一子网
    • 主机A通过子网掩码计算主机B的IP地址网络号,发现主机B位于不同子网。
    • 公式

网络地址=IP地址 & 子网掩码

  1. 发送数据到默认网关

    • 主机A将数据包发送到默认网关(路由器或三层交换机)。
    • 链路层封装
      • 源MAC:主机A的MAC地址
      • 目的MAC:默认网关的MAC地址(通过ARP解析获取)。
    • IP层封装
      • 源IP:主机A的IP地址
      • 目的IP:主机B的IP地址
  2. 交换机转发数据帧

    • 交换机根据MAC地址表,将数据帧从主机A的端口转发到路由器的端口。
  3. 路由器处理数据包

    • 路由器接收数据帧后,剥离链路层头部,检查目标IP地址。
    • 根据路由表确定下一跳(可能需多级路由):
      • 若目标子网直连路由器,直接转发到对应接口。
      • 若需经过其他路由器,转发至下一跳地址。
  4. ARP解析下一跳MAC地址

    • 路由器通过ARP请求解析下一跳接口或目标主机的MAC地址。
    • 示例
      • 路由器接口IP:10.0.0.1 → 目的子网:192.168.2.0/24
      • 路由器发送ARP请求解析主机B的MAC地址(若直连)。
  5. 数据包转发至目标子网

    • 路由器重新封装链路层帧:
      • 源MAC:路由器出接口的MAC地址
      • 目的MAC:主机B的MAC地址(通过ARP解析)。
    • 通过目标子网的交换机将数据帧转发至主机B。
  6. 主机B响应数据

    • 主机B构造响应数据包:
      • 源IP:主机B的IP地址
      • 目的IP:主机A的IP地址
    • 响应数据通过反向路径返回,可能经过不同路由器。
关键点
  • 交换机的作用
    • 在同一子网内,交换机负责转发数据帧(基于MAC地址表)。
    • 在跨子网通信中,交换机将数据帧转发到路由器。
  • 路由器的角色
    • 负责跨子网的数据包转发和路由选择。
    • 逐跳更新链路层MAC地址,IP地址保持不变。

示例数据包变化
跳数源MAC目的MAC源IP目的IP
主机A → 交换机AA:AA:AA:AA:AA00:11:22:33:44:55192.168.1.1010.0.0.5
交换机 → 路由器AA:AA:AA:AA:AA00:11:22:33:44:55192.168.1.1010.0.0.5
路由器 → 主机B55:44:33:22:11BB:BB:BB:BB:BB:BB192.168.1.1010.0.0.5

请添加图片描述
同一子网内:交换机基于MAC地址表转发数据帧。
跨子网内:交换机将数据帧转发至路由器,路由器逐跳转发至目标子网。


http://www.kler.cn/a/588202.html

相关文章:

  • 关于stac和clac的进一步细节及EFLAGS
  • 平方矩阵问题
  • 热key探测技术架构设计与实践
  • 【C/C++】最长回文子串(leetcode T5)
  • docker引擎与docker-compose离线版本下载详细教程
  • 深入TA-Lib:量化技术指标详解
  • 用 Pinia 点燃 Vue 3 应用:状态管理革新之旅
  • Leetcode-132.Palindrome Partitioning II [C++][Java]
  • C++复试笔记(五)
  • Adobe Premiere Pro2023配置要求
  • 矩阵幂(矩阵k次幂)
  • nginx配置反向代理数据库等插件的原理和方式
  • Matlab 基于磁流变阻尼器的半主动车辆座椅悬架模糊控制研究
  • SUSHI交易所:安全生态赋能Meme热潮
  • 豆包大模型-语音实时通话-青青-服务器ECS踩坑过程
  • JavaScript内置对象
  • C++和标准库速成(四)——逻辑比较运算符、三向比较运算符、函数和属性
  • C++初阶——类和对象(二)
  • C语言之文件
  • Docker文件夹上传秘籍Windows下的高效传输之道