数据包端到端的流程-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

流程

A给F发送一个数据包的流程在这里插入图片描述

  1. 首先 A192.168.0.1通过子网掩码255.255.255.0计算出自己与 F192.168.2.2并不在同一个子网内于是决定发送给默认网关192.168.0.254

  2. 发送之前A 需要通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址为ABAB

  3. A 将源 MAC 地址AAAA与 默认网关 MAC 地址ABAB封装在数据链路层头部又将源 IP 地址192.168.0.1和目的 IP 地址192.168.2.2 注意目的 IP 地址千万不要以为填写的是默认网关的 IP 地址从始至终这个数据包的两个 IP 地址都是不变的只有 MAC 地址在不断变化封装在网络层头部然后发包

在这里插入图片描述

  1. 交换机 1 收到数据包后发现目标 MAC 地址是 ABAB查找MAC地址映射表通过某个端口转发给路由器1

  2. 路由器 1 发现其目标 IP 地址是 192.168.2.2查看其路由表发现了下一跳的地址是 192.168.100.5

  3. 所以此时路由器 1 需要做两件事第一件是再次匹配路由表发现匹配到了端口为 2于是将其封装到数据链路层最后把包从 2 号口发出去。
    在这里插入图片描述

  4. 此时路由器 2 收到了数据包看到其目的地址是 192.168.2.2查询其路由表匹配到端口号为 1准备从 1 号口把数据包送出去。

  5. 但此时路由器 2 需要知道 192.168.2.2 的 MAC 地址了于是查看其 arp 缓存找到其 MAC 地址为 FFFF将其封装在数据链路层头部并从 1 号端口把包发出去。
    在这里插入图片描述

  6. 交换机 3 收到了数据包发现目的 MAC 地址为 FFFF查询其 MAC 地址表发现应该从其 6 号端口出去于是从 6 号端口把数据包发出去。

  7. F 最终收到了数据包并且发现目的 MAC 地址就是自己于是收下了这个包

总结

电脑视角

  • 首先我要知道我的 IP 以及对方的 IP
  • 通过子网掩码判断我们是否在同一个子网
  • 在同一个子网就通过 arp 获取对方 mac 地址通过交换机直接扔出去
  • 不在同一个子网就通过 arp 获取默认网关的 mac 地址直接扔出去

交换机视角

  • 我收到的数据包必须有目标 MAC 地址
  • 通过 MAC 地址表查映射关系
  • 查到了就按照映射关系从我的指定端口发出去
  • 查不到就所有端口都发出去(广播)
  • 交换机只管转不会改变数据包里的东西

路由器视角

  • 我收到的数据包必须有目标 IP 地址当然也会有MAC地址
  • 通过路由表查映射关系
  • 查到了就按照映射关系从我的指定端口发出去
  • 查不到则返回一个路由不可达的数据包
  • 经过路由器时数据链路层MAC地址会发生改变

如果你嗅觉足够敏锐你应该可以感受到下面这句话

  • 网络层IP协议本身没有传输包的功能包的实际传输是委托给数据链路层以太网中的交换机来实现的。可以看到上面的数据包网络层的IP地址一直不会变变得是数据链路层的MAC地址

涉及到的三张表分别是

  • 交换机中有 MAC 地址表用于映射 MAC 地址和它的端口

  • 路由器中有路由表用于映射 IP 地址(段)和它的端口

  • 电脑和路由器中都有 arp 缓存表用于缓存 IP 和 MAC 地址的映射关系

这三张表是怎么来的

  • MAC 地址表是通过以太网内各节点之间不断通过交换机通信不断完善起来的(广播)
  • 路由表是各种路由选择算法 + 人工配置逐步完善起来的。
  • arp 缓存表是不断通过 arp 协议的请求逐步完善起来的(广播发送一个ARP请求包)

参考

有了 IP 地址为什么还要用 MAC 地址 - 无聊的闪客的回答 - 知乎

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6