局域网通信原理 --- 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记录,所以继续泛洪
