文章目录
- 1. 以太网
- 2. 以太网帧格式
- 3. 局域网通信原理2
-
- 碰撞问题
- 交换机的使用
- 4. ARP协议
-
- 为什么要使用ARP协议?
- 概念
- ARP数据报的格式
- ARP请求与应答
- ARP欺骗
1. 以太网
以太网是一种局域网的技术标准
![](http://img.e-com-net.com/image/info8/f1e97be98f3d41b1b0050ec785904f4b.jpg)
局域网通信的原理故事版本,在网络基础中讲过了,点击查看:局域网通信原理
所以每个人都要有它的地址
如 :在教室中,每一名同学要进行互相通信时,都需要有一个唯一的名字
每台主机都有一张网卡, 都配有一个 MAC地址,所以每台主机都有自己的名字
2. 以太网帧格式
![](http://img.e-com-net.com/image/info8/cdeb7b65f0904b4f9c054a0fff0195c0.jpg)
mac的报头为 目的地址、源地址、类型、CRC 相加
中间的数据为 mac的有效载荷
目的地址:表示这个数据帧是给谁的
源地址: 表示发送方的mac地址是谁
通过2字节的类型 来保证 将有效载荷向上交付给那一个协议
若类型填充 0800,则表示有效载荷为 IP数据报
若类型填充 0806,则表示有效载荷为 ARP请求或应答
3. 局域网通信原理2
假设有一台主机A,其mac地址 为 macA
主机A 想通过局域网 给 主机B 发送 mac帧
就需要封装mac地址
![](http://img.e-com-net.com/image/info8/3799893cc0cf4a2bb5a818f8015e6595.jpg)
主机A就在局域网中构建了一个mac帧,将其从主机A发送到网络中了
因为使用的是同一个局域网,所以主机B、主机C、路由器R 都收到了
此时的收到,只是数据链路层收到
![](http://img.e-com-net.com/image/info8/5837a04907f6457fb622c79850aff392.jpg)
以B为例,主机B就要进行报头和有效载荷的分离
识别到报头字段,发现数据帧是要去macD,而自己的mac地址为macB
所以主机B会直接将该报文丢弃掉,并不会向上层交付
同理,路由器R、主机C 也会以同样的方式将报文丢弃
![](http://img.e-com-net.com/image/info8/b11729df535543b09884aebc7879f989.jpg)
主机B进行报头和有效载荷的分离
识别到报头字段,发现数据帧是要去macD,而自己的mac地址为macD
所以主机D会向上层交付
![](http://img.e-com-net.com/image/info8/a3f8726686f243cf995f99715d464562.jpg)
主机D可以给主机A做出响应,并将其从主机D发送到网络中了
同样 主机A、 主机B、路由器R、主机C 都收到了对应的保文
在进行报文和有效载荷分离时,发现数据帧是要去macA,而只有主机A的mac地址为macA
主机A会向上层交付
碰撞问题
如:当 老师 向张三询问 作业是否做完时,整个教室乱轰轰的,有相当一部分人在大声聊天,导致张三并没有听见老师的询问
![](http://img.e-com-net.com/image/info8/992579ebc67d43dfb2161346bf516c4b.jpg)
局域网是一份公享的资源,当主机A给主机B发送消息时,可同时存在 主机C 给主机D发送消息
这两条消息就会发生互相干扰
在局域网中,只能有 一台主机 给另一台主机 发送数据帧,否则可能会发生数据碰撞的问题
把任何一个时刻,只允许一个执行流在进行访问的共享资源,叫做临界资源
所以局域网是一种临界资源
交换机的使用
![](http://img.e-com-net.com/image/info8/919ab61ac0234fed8cf3a303189b99f6.jpg)
在同一个局域网中,当 主机A发送消息时,主机B也在发送消息即两者发生碰撞
由于有 交换机的存在,并不会影响右侧主机C和主机D
交换机的作用为 : 划分碰撞域
4. ARP协议
为什么要使用ARP协议?
![](http://img.e-com-net.com/image/info8/428273b1f62a47f0997ea0fe24525ffc.jpg)
主机B想要到达路由器G
若从主机B到路由器F,再从路由器F到路由器G
从主机B到路由器F,源mac地址 是 主机B 目的mac地址是路由器F
从路由器F到路由器G,源mac地址 是 路由器F 目的mac地址是路由器G
在这个过程中,源mac地址和 目的mac地址 是不同的
IP地址不变的,只知道对方的IP地址,如何根据对方的IP地址 转化成对方的mac地址 就需要借助 ARP协议
概念
ARP协议在数据链路层
作用为 根据IP地址 转化为 对应的mac地址
![](http://img.e-com-net.com/image/info8/3cf19f606fa8471489c40b3966afd772.jpg)
如:老师在教室里要给学生上课, 要想提问,就必须要知道在座同学的姓名
但学校提供的是一份 学生的 学号列表
所以只好 先在教室中 询问学号是谁,此时在教室中的所有同学全都收到了
同学们都和自己的学号做对比,发现不是自己的,就直接丢弃
此时一名叫张三的同学 对老师进行了应答
从学号转成姓名,先在教室中询问,所有同学收到,只有一名同学处理,其他同学丢弃,
一名同学对比发现自己后,将学号转化为姓名,再将姓名告诉老师
这个过程 叫做 ARP的过程
学号相当于 IP地址 姓名 相当于 mac地址
ARP数据报的格式
![](http://img.e-com-net.com/image/info8/e665e520ecbd41eeb34dd506bfe9d874.jpg)
硬件类型 为 数据链路层类型 ,若为1,则是以太网
协议类型 为 要转换的地址类型 , 一般为0x000,表示IP地址
硬件地址长度 对于 以太网地址 为 6字节
协议地址长度 对于IP地址 为 4字节
OP 字段为1时 表示 ARP请求,OP字段为2时,表示 ARP应答
若当前为 ARP请求时,则不知道 目的mac地址,只知道目的IP地址
ARP请求与应答
假设 A为路由器,收到一个IP报文,该保文的 目的IP 为 IPF(想要将报文送到 主机F处)
通过路由器 构建 ARP请求
首先 获取F的mac地址,再根据对方的mac地址 封装 mac帧,发送数据
![](http://img.e-com-net.com/image/info8/4f3c7033bf4040bcb1532a08240096a1.jpg)
由于并不清楚 目的mac地址 ,所以使用 FFFFFF 替代
![](http://img.e-com-net.com/image/info8/0399a6f779a44740b84abb2125899904.jpg)
ARP在mac帧的上层,所以要向下交给mac帧
就需要添加 mac的报头
![](http://img.e-com-net.com/image/info8/da2d5f96290c4f5baf136e738a04f3fb.jpg)
由于不知道目的mac地址,所以设置为FFFFFF
主机A就在局域网中构建了一个mac帧,将其从主机A发送到网络中了
每一台主机都会收到 该数据帧
![](http://img.e-com-net.com/image/info8/6292bff1b3fa4dfd9adb4d83492466c4.jpg)
以主机D为例,主机D收到数据帧,将报头和有效载荷分离
![](http://img.e-com-net.com/image/info8/3b52d9f9f46640c5bd67b79d99ecdf6c.jpg)
发现报头中的目的mac地址为FFFFFF,所以主机C要去处理数据帧
因为帧类型为0806,属于ARP的请求或应答
所以将有效载荷交给自己的ARP层
先看OP ,发现为1,则为ARP的请求
主机D的目的IP地址为 IPD,不是有效载荷中的目的IP,所以就将ARP报文丢弃
![](http://img.e-com-net.com/image/info8/9c94e3647c9046a48a468cd6dc4336f0.jpg)
使用同样的方法,将数据帧送到主机F处
先看OP ,发现为1,则为ARP的请求
主机D的目的IP地址为 IPD,是有效载荷中的目的IP
所以主机F会构建 ARP应答
![](http://img.e-com-net.com/image/info8/75e2ff5584d94de68663425786c71f48.jpg)
将ARP应答的数据帧 发送到网络中,主机D依旧会接收到对应的数据帧
通过将报头和有效载荷分离
首先看OP,发现为2,所以是 ARP应答
再发现mac帧的目的mac地址为macA
所以就直接将数据帧丢弃
而主机A发现自己的mac地址 与 报头的目的mac地址相同,就由主机A接收到
ARP欺骗
![](http://img.e-com-net.com/image/info8/9414f2861fc64fc58f5b37b3c4d37a6c.jpg)
假设有一个不怀好意的主机M,接入局域网中,其IP为IPM,mac地址为 macM
首先 主机M 向 主机A 构建 假的ARP应答
告诉主机A,我是IPR,我的mac地址是macM
此时主机A 就会构建 IPR和 macM 的 映射关系
因为ARP 的目的mac地址 要保持更新,所以就刷新一下
主机A就认为 两者的对应关系 是 IPR 与 macM
通过目的mac地址 macM 找到了对应的主机M
![](http://img.e-com-net.com/image/info8/3e366a88a1c841fb88bac56a4d739228.jpg)
主机M 向 路由器R 构建 假的ARP应答
告诉路由器R,我是IPA,我的mac地址是macM
此时路由器R 就会构建 IPA和 macM 的 映射关系
同理,路由器R就认为 两者的对应关系 是 IPA 与 macM
通过目的mac地址 macM 找到了对应的主 机M
主机M就变成了局域网的中间人,整个过程称为 ARP欺骗