提前预知

我们可以将PC端视为一个路由
数据包在数据传输过程中改变的是源MAC、目的MAC而不是源IP和目的IP

ip的作用:

①ip结合路由表进行接口转发使用
②ip结合arp表查询目的MAC

MAC的作用:

用于交换机接口转发使用

1.初前认识

1.1交换机

交换机的工作原理:交换机是通过MAC地址通信的
依赖表:交换机有一张MAC表
表结构大致如下:

MAC地址 接口 vlan

1.2路由器

路由的工作原理:路由是通过ARP表和路由表进行通信的
依赖表:ARP表和路由表
ARP表结构:

IP MAC 类型

路由表结构:

目标IP网段 网络掩码 网关 接口 跃点数

路由表在树建立好后是自动生成,不可能为空

1.3主机

和路由基本差不多
这里还有一个比较容易混肴的地方,如果主机和主机之间的通信有路由器,
源主机的ARP记录的不是目的主机的IP和MAC,而是下一跳的IP(网关)和MAC(网关的MAC地址),具体会在下面介绍

1.4包结构

此处简构

序号 源IP 目的IP 源MAC 目的MAC

2.交换机

源主机-交换机-目的主机

(假如PC1,PC2,PC3各有两个网卡,图中的ip都是网卡1的ip)

案例:
PC1 ping PC2
步骤:
①PC1首先判断PC2是否和自己处于同网段,PC1的IP和子网掩码进行与运算,PC2的IP和PC1的子网掩码进行与运算
②如果同网段对照自己的ARP缓存表,查找IP:192.168.1.2的MAC,否则查找网关的MAC,这里是同网段的,所以我们此处不介绍非同网段,如果ARP表有对应的IP则把对应MAC地址填充到数据包目的MAC;否则进行ARP广播(询问各个终端或者路由器谁的IP是192.168.1.2)
此处会有疑问广播包是从网卡1出还是网卡2出?
答:这里就要用到PC1路由表了,此时PC1会先根据目的Ip的网段找到路由表该条记录的接口号f0/1,然后把数据从f0/1口发出。

ARP广播包

序号 源IP 目的IP 源MAC 目的MAC
192.168.1.1 192.168.1.2 1111.1111.1111.1111 ffff.ffff.ffff.ffff

③交换机拿到后进行拆包先把源MAC和接口缓存到MAC表

MAC地址 接口 vlan
1111.1111.1111.1111 f0/1 1

接着发现目的mac是ffff.ffff.ffff.ffff明白这是一个广播包,因此除了发送接口其余的所有接口都转发一遍这个ARP包
④PC3:192.168.1.3拿到数据包拆包,先检查源IP:192.168.1.1,源MAC:1111.1111.1111.111的这个数据包自己是否已经学习保存到ARP表,接着查看目的IP不是自己就不作应答,
⑤PC2:192.168.1.2拿到后做PC3同样的操作,发现目的IP是自己,做应答
此时PC2,PC3的ARP表

IP MAC 类型
192.168.1.1 1111.1111.1111.1111 动态

应答包

序号 源IP 目的IP 源MAC 目的MAC
192.168.1.2 192.168.1.1 2222.2222.2222.2222 1111.1111.1111.1111

此时PC2不做ARP广播,因为数据包该有的信息都具备,然后通过路由表找到出口f0/1,发出数据包
⑥交换机拿到数据包先进行MAC学习,

MAC地址 接口 vlan
1111.1111.1111.1111 f0/1 1

变成

MAC地址 接口 vlan
1111.1111.1111.1111 f0/1 1
2222.2222.2222.2222 f0/2 1

接着查看目的MAC是1111.1111.1111.1111,根据mac表找到接口是f0/1,因此把数据通过f0/1发出

⑦PC1拿到返回的数据包,先学习 将源IP和源MAC保存到ARP表

IP MAC 类型
192.168.1.2 2222.2222.2222.2222 动态

拆包发现目的ip是自己并且是回复包,就不在等待,把MAC地址填充到数据包的目的MAC,ping包填充完毕,接着发送ping包通过路由表找到接口是f0/1,同该口发出
⑧ 交换机拿到ping包数据根据目的mac查找mac表,结果是f0/2,所以把ping通过f0/2发出
⑨ PC2拿到后拆包目的IP是自己并且是请求包需要应答,PC2再封装一个包

序号 源IP 目的IP 源MAC 目的MAC
192.168.1.2 192.168.1.1 2222.2222.2222.2222 1111.1111.1111.1111

⑩ 交换机拿到PC2的回复包,拆包目的MAC是1111.1111.1111.1111根据MAC表找到是f0/1,把回复包通过f0/1发出
⑪ PC1拿到回复包发现是给自己的,打印ping成功

3.路由器

源主机-路由器-目的主机

(假如PC1,PC2,PC3各有两个网卡,图中的ip都是网卡1的ip)
PC1的MAC:1111.1111.1111.1111
PC2的MAC:2222.2222.2222.2222
网关 192.168.1.9的MAC: 3333.3333.3333.3333
网关 192.168.2.9的MAC: 4444.4444.4444.4444

案例:
192.168.1.1 ping 192.168.2.1
步骤:
①PC1首先判断PC2是否和自己处于同网段,PC1的IP和子网掩码进行与运算,PC2的IP和PC1的子网掩码进行与运算
②如果非同网段对照自己的ARP缓存表,查找IP:192.168.1.9的MAC(网关的MAC),这里是非同网段的,所以我们此处不介绍同网段,如果ARP表有对应的IP则把对应MAC地址填充到数据包目的MAC;否则进行ARP广播(询问各个终端或者路由器谁的IP是192.168.1.9)
ARP广播包

序号 源IP 目的IP 源MAC 目的MAC
192.168.1.1 192.168.1.9 1111.1111.1111.1111 ffff.ffff.ffff.ffff

③路由器收到ARP包,拆包进行ARP学习
ARP表会有该如下一条记录

IP MAC 类型
192.168.1.1 1111.1111.1111.1111 动态

发现目的IP是自己的做出应答
ARP应答包

序号 源IP 目的IP 源MAC 目的MAC
192.168.1.9 192.168.1.1 3333.3333.3333.3333 1111.1111.1111.1111

然后路由通过路由表返回给PC1
④PC1拿到应答包进行ARP学习
ARP表会有该如下一条记录

IP MAC 类型
192.168.1.9 3333.3333.3333.3333 动态

将应答包源MAC封装到数据包,通过路由表结构找到对应发送接口发出去
⑤路由拿到ping包,先ARP学习

IP MAC 类型
192.168.1.1 1111.1111.1111.1111 动态

遍历路由表记录,每条记录的子网掩码和目的ip进行与运算判断是否与该记录的网段相同,如果相同就将包丢给该记录对应的接口,如果遍历完路由表没有找到则ping失败(路由则发一个数据包通过ICMP协议返回给PC1)
⑥ PC2拿到数据包拆包先ARP学习

IP MAC 类型
192.168.2.9 4444.4444.4444.4444 动态

发现目的ip是自己则封装ping回复包

序号 源IP 目的IP 源MAC 目的MAC
192.168.2.1 192.168.1.1 2222.2222.2222.2222 4444.4444.4444.4444

⑦路由器拿到数据包,ARP学习

IP MAC 类型
192.168.1.1 1111.1111.1111.1111 动态
192.168.2.1 2222.2222.2222.2222 动态

遍历路由表找到对应的接口发出数据包,如果找不到路由则发一个数据包通过ICMP协议返回给PC2
⑧PC1拿到回复数据拆包发现是给自己的并且是ping回复包,打印ping成功

4.话外

案例一:

如果同一网段下的两台主机在路由的同一侧连接
PC1:
ip:10.100.1.2
gateway:10.100.1.1
mask:255.255.255.0
mac:1111.1111.1111.1111

PC2:
ip:10.100.1.9
gateway:10.100.1.1
mask:255.255.255.192
mac:2222.2222.2222.2222
大致图:
多台机器直连路由器LAN口(多LAN口路由器内嵌交换机)

等价于
路由器网卡连接交换机,
交换机多接口连接多台电脑

10.100.1.2 ping 10.100.1.9此时可以ping通

因为10.100.1.2和25.255.255.0与运算 10.100.1.0
10.100.1.9和10.100.1.2的子网掩码与运算也是10.100.1.0
此时10.100.1.2 主机得到是同网段结果先去查看ARP表如果找到10.100.1.29对应的物理地址装包丢给路由器,如果没找到则ARP广播
由于是同网段ARP包如下
ARP广播包

序号 源IP 目的IP 源MAC 目的MAC
10.100.1.2 10.100.1.9 1111.1111.1111.1111 ffff.ffff.ffff.ffff

路由1收到数据包拆包学习ARP

IP MAC 类型
10.100.1.2 1111.1111.1111.1111 动态

路由器发现目的地址不是自己则直接丢弃,PC2仍然可以通过交换机获得PC1的数据,PC2做出应答转发给交换机,交换机通过MAC地址学习记录再给PC1,PC1封装好ping包同样流程到PC2,PC2返回给PC1ping包回复,PC1打印ping通

案例二:
如果同一网段下的两台主机连接交换机
PC1:
ip:10.100.1.2
gateway:10.100.1.1
mask:255.255.255.0
mac:1111.1111.1111.1111

PC2:
ip:10.100.1.9
gateway:10.100.1.1
mask:255.255.255.192
mac:2222.2222.2222.2222
大致图:

10.100.1.2 ping 10.100.1.9此时可以ping通
因为10.100.1.2和25.255.255.0与运算 10.100.1.0
10.100.1.9和10.100.1.2的子网掩码与运算也是10.100.1.0
此时10.100.1.2 主机得到是同网段结果先去查看ARP表如果找到10.100.1.29对应的物理地址装包丢给交换机,如果没找到则ARP广播
由于是同网段ARP包如下
ARP广播包

序号 源IP 目的IP 源MAC 目的MAC
10.100.1.2 10.100.1.9 1111.1111.1111.1111 ffff.ffff.ffff.ffff

路由1收到数据包拆包学习ARP

IP MAC 类型
10.100.1.2 1111.1111.1111.1111 动态

交换机发现目的MAC是ffff.ffff.ffff.ffff广播给PC2,PC2做出应答转发给交换机,交换机通过MAC地址学习记录再给PC1,PC1封装好ping包同样流程到PC2,PC2返回给PC1ping包回复,PC1打印ping通
因此可以得出一个结论子网掩码写错,如果仍是一个网段使用交换机连接的可以相互ping通,使用路由器可以ping通。

案例三:
PC1:
ip:10.100.1.2
gateway:10.100.1.1
mask:255.255.255.0
mac:1111.1111.1111.1111

PC2:
ip:10.100.1.9
gateway:10.100.1.1
mask:255.255.255.192
mac:2222.2222.2222.2222

10.100.1.2 ping 10.100.1.9此时不可以ping通
因为10.100.1.2和25.255.255.0与运算 10.100.1.0
10.100.1.9和10.100.1.2的子网掩码与运算也是10.100.1.0
此时10.100.1.2 主机得到是同网段结果先去查看ARP表如果找到10.100.1.29对应的物理地址装包丢给交换机,如果没找到则ARP广播
由于是同网段ARP包如下
ARP广播包

序号 源IP 目的IP 源MAC 目的MAC
10.100.1.2 10.100.1.9 1111.1111.1111.1111 ffff.ffff.ffff.ffff

路由1收到数据包拆包学习ARP

IP MAC 类型
10.100.1.2 1111.1111.1111.1111 动态

交换机发现目的MAC是ffff.ffff.ffff.ffff广播给路由器,路由器发现目的ip不是自己直接丢弃根本到达不了PC2,因此不通

学而不思则罔,思而不学则殆

源主机经过交换机或者路由到目的主机的过程详解相关推荐

  1. Android中mesure过程详解 (结合Android 4.0.4 最新源码)

    如何遍历并绘制View树?之前的文章Android中invalidate() 函数详解(结合Android 4.0.4 最新源码)中提到invalidate()最后会发起一个View树遍历的请求,并通 ...

  2. Android中layout过程详解 (结合Android 4.0.4 最新源码)

    上一篇文章Android中mesure过程详解 (结合Android 4.0.4 最新源码)介绍了View树的measure过程,相对与measure过程,本文介绍的layout过程要简单多了,正如l ...

  3. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  4. U-Boot 之三 U-Boot 源码文件解析及移植过程详解

      在之前的博文 Linux 之八 完整嵌入式 Linux 环境介绍及搭建说明 中我们说了要一步步搭建整个嵌入式 Linux 运行环境.我所使用的硬件平台及整个要搭建的嵌入式 Linux 环境见博文 ...

  5. Spring源码分析之Bean的创建过程详解

    前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 本文内容: 在 ...

  6. H3C交换机光电复用口如何切换(图文详解)

    H3C交换机在出厂时,基本上默认为光口有效,然而在实际应用中如果需要用电口,就需要修改其端口相应的配置,将其切换为电口有效才能正常使用电口.为此,笔者就做个教程,操作方法有[命令行跟Web图形界面]两 ...

  7. 计网实验:单臂路由实现VLAN之间的通信详解(Cisco Packet Tracer)

    文章目录 一.实验原理 二.实验环境 二.实验步骤 1.建立拓扑结构 2.创建VLAN并配置交换机端口 3.配置路由器 三.注意事项 一.实验原理 在路由器的一个物理接口上通过配置子接口(即:逻辑接口 ...

  8. mysql的源码解读(1):mysql的目录结构详解

    一.mysql的简介 二.mysql的编译包安装目录结构详解 1)编译包解压之后的目录结构 mysql-5.6.39├── bin # 存放的是服务器和客户端的程序(命令)├── COPYING # ...

  9. POE供电交换机技术分析及工作过程详解

    PoE供电是指在以太网中透过双绞线来将电力传输到设备的技术,它无需改动现有的以太网布线基础架构,在为一些基于IP的终端传输数据信号的同时,还能为此类设备提供直流供电.透过这项技术,可以供电给网路电话. ...

最新文章

  1. SpringCloud(第 051 篇)EurekaServer集群高可用注册中心以及简单的安全认证
  2. 静态程序分析chapter3 - 数据流分析详述(Reaching Definitions、Live Variables、Available Expressions Analysis)
  3. python进阶(小白也能看懂)——装饰器浅谈(一)
  4. android view销毁回调,Android View 常用的回调方法
  5. 这周,我们作前端,实现统一的过滤搜索
  6. 前端学习(1652):前端系列实战课程之bom
  7. linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)
  8. 银行各类理财收益渐涨 各类宝钱景尚不明朗
  9. Java高级架构师需要掌握什么?
  10. IP应用加速技术详解:如何提升动静混合站点的访问速率?
  11. mysql的两种存储方法_mysql的两种存储引擎
  12. NetBeans 时事通讯(刊号 # 143 - Apr 19, 2011)
  13. python求解LeetCode习题Maximum Gap
  14. 傅里叶快速算法(FFT)的理解与实现
  15. 阿里云centos7.4安装并部署svn1.10.0版本(配置多仓库,加入开机自启动)
  16. VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群详细教程(亲测有效,※吐血推荐※)(内含快速启动容器脚本)
  17. iOS 打开本地或下载excel文件
  18. Java 百度地图 根据名称获取坐标(经纬度)
  19. free pascal
  20. 中国计算机发展史 博客,“博客”(Blog)在中国的发展历程

热门文章

  1. java javax 的区别_java与javax的区别分析
  2. 聊聊jvm的CompressedClassSpace
  3. 单片机c语言程序设计中可以不分大小写,单片机考试复习题及答案
  4. 双稳态继电器工作原理图_三分钟看懂双稳态电磁阀的工作原理
  5. Activiti的act_ru_identitylink那些你不知道的秘密
  6. SVN报错解决:Error : Previous operation has not finished; run ‘cleanup‘ if it was interrupted.
  7. 江苏省学生体质健康促进条例
  8. Android微信自动化工具---自动发送朋友圈(非root权限)
  9. 【回顾】对话巨杉数据库核心研发团队:分布式数据库自研之路
  10. 路漫漫其修远兮--汉化新人容易犯的几个毛病