局域网通信原理 --- IP与MAC与ARP与交换机(更新)

在这部分能学到,今天学的比较多

  • 网络参考模型复习
    • OSI七层
    • TCP/IP模型
    • 每层负责什么
  • IP与MAC的角色区别
    • IP:网络层逻辑地址,负责定位主机
    • MAC:数据链路层物理地址,负责局域网传输
  • ARP协议
    • 为什么知道IP还需要MAC
    • ARP如何连接网络层和数据链路层
  • 二层交换机原理
    • 根据MAC地址表转发
    • 学习MAC地址
    • 不关心IP
  • 三层交换机引入
    • MAC转发 vs IP路由
    • 同网段通信 vs 跨网段通信
  • Ping实验分析
    • ICMP
    • ARP
    • Ethernet帧
    • 抓包分析

复习

首先,通过前面的 网络参考模型 知道

数据传输经过各种层

osi应用层,表示层,会话层,传输层,网络层,数据链路层,还有物理层

tcp/ip的传输层 网络层 网络层 网络接口层

引入

ip与mac与交换机

然后ip这块的话主要是用到

osi或者 tcp/ip 的网络层给数据包打上ip封装,然后传输

在实验中我发现还需要用到

osi 数据链路层 或者 tcp/的 网络接口层mac地址

实验这里用的是二层交换机工作在数据链路层,根据MAC地址转发数据的交换机,他并不关心ip是多少) 所以这里查询mac是很有必要的

拓展一下三层交换机是什么(后面不同网段的时候要用到)

三层交换机:

简单理解:

二层交换机 + 路由功能

也就是说:

它同时会:

看MAC:

二层:

MAC → 端口

也会:

看IP:

三层:

IP → 下一跳

例如:

普通二层交换机:

PC1 | SW | PC2

只能:

同网段通信。

例如:

192.168.1.10 ↓ 192.168.1.20

可以。

但是:

192.168.1.10 ↓ 192.168.2.20

不行。

因为需要路由。

三层交换机:

可以:

VLAN10 192.168.1.0 三层交换机 VLAN20 192.168.2.0

它内部有:

路由接口。

所以:

可以实现:

不同网络通信。

二层交换机和三层交换机区别

二层交换机

三层交换机

工作层

二层

二层+三层

依据

MAC

MAC+IP

主要功能

局域网交换

交换+路由

能否跨网段

不能

可以

是否有路由表

没有

典型用途

接入层

核心/汇聚层




实验开始

根据chatgpt给我的实验,来体验一下发送数据

1.拓扑(就是弄成图上这样)

使用的是s5700二层交换机

2.配置

pc1 为 192.168.1.10

pc2 为 192.168.1.20

掩码都是255.255.255.0

3. ping 然后查询mac地址

使用 ping 和arp -a 命令

现在成功找到 192.168.1.20这个目标了(网络层)

然后 也能查到他的mac地址(数据链路层、网络接口层)

由此看出 arp 是连接 网络层 和数据链路层的协议太牛逼了

交换机后台

system-view 系统视图

然后 display mac-address 来查询

可以看到 这个交换机这里

只有对应接口 的mac地址根本没有ip地址

ge0/0/1 对应 pc1 对应了 5489-98ea-4120

pc2同理

抓包看看

ping

你抓包看到:

Ethernet II 第二行 IPv4 第三行 ICMP 第四行

对应:

二层: Ethernet + MAC 三层: IP + ICMP

形成一个非常重要的网络工程思维(ai说的以后再说,嘻嘻)

以后看到问题:

二层问题:

看:

MAC ARP VLAN 交换机

例如:

  • MAC表有没有
  • VLAN是否正确
  • 端口是否UP

三层问题:

看:

IP 路由 网关

例如:

  • IP是否正确
  • 掩码是否正确
  • 路由表有没有

深入理解数据发送过程

1.pc1 进行 ping

192.168.1.20

他有两个问题: a.已经知道目标 ip 192.168.1.20

b. 不知道目标MAC 因为 二层通信必须要目标mac

2.查看是否是同网段(具体怎么判断见前一个帖子)

pc1判断 对方是否和自己是一个网段

是,同一个局域网,找mac地址

不是,需要设置网关

3. 查看arp缓存,寻找mac地址

PC1

pc1 查看自己的arp表(arp -a)

有则数据封装

没有(一次通信都没有)则开始 进入arp过程

PC1生成ARPRequest

内容:

谁是192.168.1.20? 请告诉192.168.1.10你的MAC地址

但是问题:

PC1不知道PC2 MAC。

所以二层目的MAC写:

FF-FF-FF-FF-FF-FF

也就是:

广播。

完整:

源MAC: AA-AA-AA 目的MAC: FF-FF-FF-FF-FF-FF 源IP: 192.168.1.10 目标IP: 192.168.1.20

交换机

交换机收到这个数据帧。

先学习:

看源MAC:

AA-AA-AA

来自:

GE0/0/1

于是记录:

MAC表

AA-AA-AA GE0/0/1

然后看目的MAC:

FF-FF-FF-FF-FF-FF

发现:

这是广播。

所以:

除了进入端口以外:

全部发送。

例如:

PC1 --- SW ----PC2 ----pc3 ----pc4

PC2

PC2收到ARP请求

PC2看到:

目标IP:

192.168.1.20

是自己。

于是回复。

生成:

ARPReply

内容:

192.168.1.20的MAC是BB-BB-BB

这个回复不是广播

因为:

PC2已经知道PC1 MAC

所以:

单播回去给pc1:

源MAC: BB-BB-BB 目标MAC: AA-AA-AA

回复

交换机转发ARP Reply

交换机收到:

源MAC:

BB-BB-BB

学习:

BB-BB-BB 对应GE0/0/2

目的:

AA-AA-AA

查MAC表:

发现:

AA-AA-AA GE0/0/1

于是:

直接发送。


PC1更新ARP表

PC1现在知道:

192.168.1.20 对应 BB-BB-BB

保存:

ARP缓存:

192.168.1.20 | | BB-BB-BB

现在终于可以发送ping。

4.真正的开始发送ping了

Ping使用:

ICMP协议

PC1生成:

ICMP Echo Request。

然后开始封装。


加IP头

增加:

源IP: 192.168.1.10 目的IP: 192.168.1.20

变成:

IP数据包

加MAC头

增加:

源MAC: AA-AA-AA 目的MAC: BB-BB-BB

形成:

Ethernet帧

最终:

+----------------+ | 目的MAC BB | | 源MAC AA | +----------------+ | 目的IP .20 | | 源IP .10 | +----------------+ | ICMP Echo | +----------------+

交换机转发Ping

交换机收到。

查看:

目的MAC:

BB-BB-BB

查询MAC表:

BB-BB-BB GE0/0/2

所以:

只发送给PC2。

注意:

这一次:

不是广播。

不是泛洪

是:

单播。


PC2收到Ping

PC2发现:

目的IP:

192.168.1.20

是自己。

交给操作系统。

ICMP模块处理。

发现:

有人ping我。

于是生成:

ICMP Echo Reply。


回复过程

反方向:

PC2:

IP: 192.168.1.20 MAC: BB-BB-BB

发送:

交换机

PC1

最后:

PC1收到:

Reply from 192.168.1.20

到此已经 ,理解完一次通信的过程了

中间提到了一个名词泛洪到底是什么?

其实就是 中间交换机把目标mac地址发送给全部端口的过程,前面提到过

泛洪又有两种情况:

第一:

pc 给的mac广播地址,(不是ip的广播地址)

目标MAC是:

FF-FF-FF-FF-FF-FF(这个地址算一个特殊的目标为全部人的地址)

叫:

广播泛洪。

例如:

ARP Request。


第二:

目标MAC 不是广播,但是:

MAC表没有。

叫:

未知单播泛洪。

例如:

pc1 这次不发 ffffff这个地址了,他知道并且直接让交换机找 bb-bb-bb-bb,但是交换机里没有pc2 的这个bb记录,所以继续泛洪

局域网通信流程图总结