- 一、以太网
-
- 1.1 认识以太网
- 1.2 以太网帧格式
- 1.3 MAC地址
-
- 1.3.1 认识MAC地址
- 1.3.2 MAC地址的类型
- 1.3.3 MAC地址 VS IP地址
- 1.4 局域网如何通信
- 1.5 局域网数据碰撞
-
- 1.5.1 数据碰撞
- 1.5.2 划分碰撞域(交换机)
- 二、ARP协议
-
- 2.1 ARP协议的作用
- 2.2 ARP数据报的格式
- 2.3 ARP协议的工作流程
- 2.4 ARP协议的特性
- 2.5 如何成为中间人(连接热点)
- 结尾
注意:本篇文章中讲到数据通过网络协议栈的内容中,不涉及硬件层
一、以太网
1.1 认识以太网
- 以太网(Ethernet)是一套由IEEE 802.3标准定义的局域网技术体系,它并非特指某个具体网络,而是规范了从数据链路层到物理层的完整技术方案
- 该标准明确定义了MAC帧格式、CSMA/CD介质访问控制、网络拓扑结构、传输介质(双绞线、光纤等)以及速率等级(10M/100M/1G/10G/100G等),其中双绞线成为主导介质
- 作为当前应用最广泛的局域网技术,以太网凭借标准化、高兼容性和持续演进能力(如400G以太网)占据统治地位,而与它并列的令牌环网(IEEE 802.5)因效率不足被淘汰,无线LAN(Wi-Fi,IEEE 802.11)则在其基础上补充了无线场景需求,二者共同构成现代局域网的基石
1.2 以太网帧格式
- MAC地址也叫做网卡的硬件地址,长度是48位,是在网卡出厂时固化的
- 帧协议类型字段有三种选项,分别对应IP、ARP、RARP
- 帧末尾是CRC校验码
- 在以太网帧结构中,PAD(填充字段) 是一个可选的填充部分,主要用于确保以太网帧满足最小长度要求。有效载荷部分不足46字节时,需通过PAD填充至46字节,以满足最小帧长
以太网帧由以太网首部、有效载荷(数据)和以太网尾部构成,那么就有下面两个问题需要解决:
- 当类型为0800时,有效载荷交付给IP协议
- 当类型为0806时,有效载荷交付给ARP协议
- 当类型为0835时,有效载荷交付给RARP协议
1.3 MAC地址
1.3.1 认识MAC地址
- MAC地址是数据链路层中用于唯一标识网络设备的硬件地址,用来识别数据链路层中相连的节点
- MAC地址长度为48位,即6个字节,一般用16进制数字加上冒号的形式来表示(例如: 00:1A:2B:3C:4D:5E)
- MAC地址在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)
1.3.2 MAC地址的类型
单播地址 | 00:1A:2B:3C:4D:5E | 普通设备通信,目标为单一设备 |
组播地址 | 01:00:5E:00:00:01 | 一对多通信(如IPv4组播对应 224.0.0.1) |
广播地址 | FF:FF:FF:FF:FF:FF | 局域网内所有设备接收(如ARP请求、DHCP发现) |
- 单播MAC地址:
- 第1字节的第2个最低有效位(LSB)为 0
- 示例:00:1A:2B:3C:4D:5E –> 00 的二进制是 00000000(第2位为0,单播)
- 组播MAC地址:
- 第1字节的第2个最低有效位(LSB)为 1
- 示例:01:00:5E:00:00:01 –> 01 的二进制是 00000001(第2位为1,组播)
- 广播MAC地址:
- 特殊组播地址,固定为 FF:FF:FF:FF:FF:FF(全1)
1.3.3 MAC地址 VS IP地址
相信大家都看过西游记,唐僧一群人每到达一个国家都会跟国王说自己的终极目标,从东土大唐来去西天取经,然后说自己的当前目标,从哪里到当前国家的,最后问想要去西天,下一个国家应该去哪。
在这里我们就看出来了,最终目标一直都没变,而当前目标一直在变。这里的终极目标就代表着IP地址,当前目标就代表着MAC地址,在发送信息时,报文的IP地址是一直不变的(实际上私有网络访问公网网络时,IP是可能会变化的),而MAC地址需要一直改变。
1.4 局域网如何通信
下面是一个局域网的情况,由于这里已经明确是局域网通信,所以就没有画路由器。
首先,主机A想向主机D发送数据,主机A中会存在一个路由表,并且一个局域网中有一个网络号,主机A将主机D的IP地址与子网掩码进行按位与,确认主机A和主机D在同一个局域网。
然后主机A将数据通过网络协议栈封装后,将数据帧发送到局域网中。
一个主机在局域网中发送数据帧,在这个局域网中的所有主机都可以收到。
最后,局域网中的其他主机收到数据帧后,主机会通过读取数据帧中的目的MAC地址,会分为两种情况

1.5 局域网数据碰撞
1.5.1 数据碰撞
结合上面三条,从系统角度上来看,局域网非常像多台主机的临界资源。
1.5.2 划分碰撞域(交换机)
相信大家都经历过,当没多少人使用网络的时候,网速很快,当有很多人使用网络的时候,网络很慢,这就是同一时间有很多主机在局域网中发送数据,导致局域网碰撞导致的。
为了解决这个问题,这里就要引入交换机,用来划分局域网的碰撞域。
以下是数据传输流程:
- 主机A准备发送数据给主机B,封装数据帧,将数据帧发送出去
- 交换机在某个端口收到该帧(一个交换机有多个端口),先存储到缓冲区
- 交换机解析帧头中的目标MAC地址
- 查MAC地址表:
- 若目标MAC存在于表中 –> 帧仅转发到对应端口(单播)
- 若目标MAC为广播(FF:FF:FF:FF:FF:FF)或未知 –> 转发到所有端口(除接收端口外,单主机对应单端口的情况)
- 更新MAC地址表:记录源MAC与接收端口的映射
- 交换机将帧从特定端口发出,最终被目标主机B接收
常规情况下,一个主机对应一个交换机的一个端口,每个端口对应着一个独立通信信道。以下图为例,局域网中有四台主机和一个交换机,也就是说主机A、B、C、D各自对应交换机的一个端口,主机A向主机C发送数据的时候,交换机仅将数据转发给主机C,主机B和D不会收到该数据,做到了交换机的每个端口是一个独立的碰撞域
还有一种情况,通过二级交换机扩展,可以将多台主机逻辑连接到上级交换机的同一端口,但每台主机仍实际占用下级交换机的一个独立端口。当主机A向主机C发送数据时,下级交换机仅将数据转发给主机C,主机B和D不会收到该数据,从而在物理层面隔离了碰撞域。
二、ARP协议
ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网 络层之间的协议。
2.1 ARP协议的作用
在1.4中讲解局域网是如何通信的时候,不知道大家有没有注意到一个问题,就是主机A知道主机D的IP地址,但是主机A并不知道主机D的MAC地址,那么数据帧中的目的MAC地址就无法填写,也无法封装数据帧了。
为了解决这个问题,就要引入ARP协议了。
ARP协议是用于建立主机 IP地址 和 MAC地址 的映射关系.
- 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,但不知道目的主机的MAC地址
- 数据帧被主机收到后,如果数据帧的MAC地址与本机不符,就会被主机直接丢弃
- 因此在通讯前必须获得目的主机的MAC地址
2.2 ARP数据报的格式
- 硬件类型:链路层网络类型,1为以太网
- 协议类型:要转换的地址类型,0x0800为IP地址
- 硬件地址长度:对于以太网地址为6字节
- 协议地址长度:对于和IP地址为4字节
- op字段:为1表示ARP请求,为2表示ARP应答
2.3 ARP协议的工作流程
下面是一个局域网的情况,由于这里已经明确是局域网通信,所以就没有画路由器。
主机A想向主机D发送数据,主机A中会存在一个路由表,并且一个局域网中有一个网络号,主机A将主机D的IP地址与子网掩码进行按位与,确认主机A和主机D在同一个局域网。
主机A想向主机D发送数据,但是主机A只知道主机D的IP地址,并不知道主机D的MAC地址,所以主机A就会通过ARP协议来获取主机D的MAC地址。
主机A会先构建一个ARP请求报文,然后为报文封装以太网首部和尾部成为数据帧,最后再将数据帧发送到局域网中。
一个主机在局域网中发送数据帧,在这个局域网中的所有主机都可以收到。
最后,局域网中的其他主机收到数据帧后,主机通过读取数据帧中的目的MAC地址,发现是广播地址,然后会将数据帧解包,将有效载荷(ARP请求报文)向上交付,这里会分为两种情况
这里主机B和主机C收到数据帧后,会将ARP请求报文丢弃,而主机D会向主机A发送ARP响应报文。
主机D向主机A发送ARP响应报文,首先需要构建一个ARP响应报文,然后为报文封装以太网首部和尾部成为数据帧,最后再将数据帧发送到局域网中。
当主机D将数据帧发送到局域网中,在这个局域网中的所有主机都可以收到这个数据帧。
局域网中的其他主机收到数据帧后,主机会通过读取数据帧中的目的MAC地址,会分为两种情况
这里主机A会更新ARP缓存,主机B和主机C会将数据帧丢弃。
当主机A更新ARP缓存后,主机A就知道了主机D的MAC地址,主机A就可以正常的向主机D发送数据了。
2.4 ARP协议的特性
2.5 如何成为中间人(连接热点)
成为中间人的方式有很多种,这里我以用户连接热点,让开热点的主机(攻击者)成为中间人:
- 攻击者开启热点,用户主动连接
- 用户首次访问网络时,广播ARP请求解析网关MAC
- 无需修改请求:攻击者直接抢先回复伪造ARP应答
- 结果:用户ARP缓存中,网关IP映射到攻击者MAC
- 用户所有流量发往攻击者MAC –> 攻击者转发给真实网关
- 攻击者可在转发过程中:
- 窃听:抓包工具捕获明文数据
- 篡改:修改HTTP响应
- SSL剥离:将HTTPS降级为HTTP
结尾
如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。 希望大家以后也能和我一起进步!!🌹🌹 如果这篇文章对你有用的话,希望大家给一个三连支持一下!!🌹🌹
评论前必须登录!
注册