一、认识数据链路层
数据链路层 位于物理层和网络层之间,其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层,主要通过物理介质(如以太网,Wi-Fi等)将数据分割成帧,并在相邻节点之间进行传输。
- 主机:配有IP地址,但不进行路由控制的设备
- 路由器:既配有IP地址,又能进行路由控制、
- 节点:主机和路由器的统称
- 链路(Link):一个节点到另一个相邻节点的一段物理线路,中间没有任何其他节点。
- 链路由传输介质和物理设备组成,传输介质主要有双绞线,光纤,微波。在两个节点进行通信的时候,链路只是一条完整通信路径的一部分
- 数据链路(Data Link):把实际控制数据传输协议的硬件和软件加到链路上就构成了数据链路
补充:报文在传输层叫数据段(Segment),在网络层叫数据报(Packet),在数据链路层叫做数据帧(Frame)
数据链路层的功能如下:
- 封装成帧:将网络层交付下来的数据报封装成帧,每个帧包含了控制信息(如起始标志,目的MAC地址,源MAC地址等)和数据部分
- 物理地址寻址:通过物理地址(MAC地址)来唯一标识网络中的设备,在数据链路层中使用MAC地址进行寻址和转发
- 媒体访问控制:在共享介质的网络中,数据链路层使用媒体访问控制协议(如CSMA/CD,CSMA/CA等)来协调多个节点之间的传输,避免冲突和碰撞
- 差错检查与重传:数据链路层负责检测和纠正传输过程中可能发生的位错误,通过差错检验码(如循环冗余校验码CRC)来实现
- 流量控制:数据链路层通过流量控制机制,确保发送方和接收方之间的数据传输速率匹配,避免数据丢失或溢出
- 链路管理:数据链路层负责建立,维护和释放链路链接,包括链路的建立,终止,确认以及链路状态的管理
数据链路层的协议有很多种,常见的有以太网(Ethernet),无线局域网(Wi-Fi)和点对点协议(PPP)等。不同协议适用于不同的网络环境和需求
二、关于 以太网
1. 基本概念
“以太网”不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等
- 例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
- 以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等
2. 以太网帧格式
| |
---|
| |
| |
| 有效载荷的类型,0800表示IP数据报,0806表示ARP请求应答,0835表示RARP请求应答 |
| 以太网帧数据不能少于46不能大于1500字节,否则就要添加PAD就是随机值 |
| |
两个结论:
① 报头和有效载荷如何分离?
MAC帧的报头是固定长度,即前14字节为报头,后续为有效载荷
② 有效载荷如何向上交付?
根据报头的类型字段,0800
代表IP协议;0806
代表ARP请求/应答;0835
代表RARP请求/应答。以此交付对应的上层
3. MAC vs IP
之前在这篇文章 🛹 认识 Mac 地址 中,我就已经提过了 MAC 、碰撞域的相关内容,这里只是做个补充和温习的
MAC地址和IP地址的区别
1、范围、层次及使用
- MAC地址是在局域网(子网,内网)范围内唯一标识设备的地址,一般只能在同一局域网内进行通信(寻址 和 转发),例如:以太网的数据链路层使用MAC地址进行设备之间的通信
- IP地址可以在广域网(公网,外网)范围内唯一标识设备的地址,可以在不同的网络中进行通信(跨网络通信 和 路由选择),例如:在因特网中的网络层使用IP地址进行主机之间的通信
在路由转发的过程中,IP地址描述的是路途总体的起点和终点,MAC地址描述的是路途上的每一个区间的起点和终点
2、分配方式
- MAC地址由网卡厂商分配,通常是固定的,与设备绑定,一般情况下不会改变
- IP地址由网络管理员分配,可以是静态分配或动态分配(如DHCP),可以根据需要进行更改
证明如下:
上面如果主机A想访问服务器B
- 服务器B具有公网IP,所以主机A可以直接使用公网IP进行访问;IP数据报中源IP地址是私有IP——192.168.1.201/24,目的IP地址是公网IP——122.77.241.3/24
- 但子网的数据要想发到公网,需要路由器根据路由表进行转发。所以要先将数据发给路由器,但IP报文内的目的IP又不能更改为路由器的IP地址,不然后续无法发送到服务器B。所以需要MAC地址,用于局域网(子网)内的数据发送
- 主机A在MAC帧中,源MAC地址为自己的MAC地址,目的MAC地址为路由器的MAC地址,发送数据
- 路由器收到主机A的数据帧,解包查看IP地址,发现不是给自己的,再根据路由表进行路由转发,途中可能还需要经过很多个路由器,使用的也是MAC地址,路由转发其实就是在多个局域网间跳转。
结论:MAC地址用于局域网内通信,IP地址用于广域网通信,即起点和终点
三、局域网通信
假设有如下子网,有若干设备,此时如果主机A想和主机D通信,那么MAC帧的报头字段的源地址为macA,目的地址为macD。如果有效载荷为ip数据包,那么类型为0800
数据帧发送到网络中,所有该局域网的主机都会收到该数据帧,但其数据链路层解包发现目的地址不是自己的时候,会直接在数据链路层丢弃该报文。如此就只有主机D会解包,提取有效载荷,向上交付 ip
数据包
补充:网卡可以设置混杂模式,不论是不是发给自己的数据帧,都向上交付,这就做到了抓包
如此,同一时刻,局域网中只允许有一个数据帧传输。如果多个数据帧同时传输,则会产生数据碰撞,导致数据重叠错误。为此需要进行碰撞避免—— 媒体访问控制
1. 媒体访问控制 & 交换机
在共享介质的网络中,多个设备可以同时发送数据,但如果两个设备在同一时间发送数据,会导致碰撞,造成数据丢失和网络拥塞。
为了避免碰撞,数据链路层采用了一些技术和协议。最常见的就是 CSMA/CD 和 CSMA/CA
CSMA/CD(载波监听多点接入/碰撞检测)
CSMA/CD
协议用于以太网等优先局域网中。在发送数据之前,设备会先监听信道,确保没有其他设备同时发送数据。- 如果两个设备在同一时间发送数据,会发生碰撞。此时,检测到碰撞的设备会发送一个特殊的信号来通知其他设备,并且会采用一种退避算法来随机延迟一段时间后重新尝试发送数据,以减少再次发生碰撞的可能性。
CSMA/CD
适用于有线网络,因为在这种情况下可以快速检测到碰撞并采取相应的措施。然而,在现代的以太网中,随着全双工通信和交换式以太网的普及,CAMA/CD
已经不再被广泛使用
CSMA/CA(载波监听多点接入/碰撞避免)
CSMA/CA
协议主要用于 802.11 无线局域网中。由于无线信道的特性,碰撞检测不如有线网络那样可靠,因此 CMSA/CA
采取碰撞避免的策略- 在
CSMA/CA
中,设备在发送数据之前同样会监听信道,确保信道空闲。然而,在发送数据之前,设备还会使用一种称为“网络分配矢量”(NAV)的机制来预测信道的使用情况。并且采用随机退避算法来避免与其他设备的数据碰撞。 CSMA/CA
适用于无线网络,因为它能够在一定程度上避免无线信道上的碰撞,提高了无线网络的效率和可靠性
交换机
交换机目前是在以太网中使用最广泛的互连设备,其工作在数据链路层(也包括物理层)
- 交换机对数据帧的转发是根据其MAC地址进行转发的
- 使用交换机做为互连设备的以太网,称为交换式以太网,交换机可以根据MAC地址过滤数据帧,即 隔离碰撞域
- 交换机的每一个接口都是一个独立的碰撞域
- 交换机隔离碰撞域,但不隔离广播域(VLAN除外)
交换机左侧的主机也可以和右侧的通信,交换机负责数据转发,如果左侧出现数据碰撞,交换机可以防止数据碰撞影响右侧的网络
2. MTU
以太网最初对报文长度没有限制,网络层最大可以接收65535个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU
我们在 ip 报文分片 和 重组 那里也已经提到过 关于 MTU 的知识
特点:
- MTU是MAC帧的大小上限,以太网帧中的数据长度规定 最小 46 字节,最大1500字节。ARP数据包的长度不够46字节,要在后面补填充
PAD
- 不同的数据链路层标准的MTU是不同的,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片。
MTU 的影响
① MTU对IP协议的影响
由于数据链路层MTU的限制,对于较大的IP数据包要进行分片
- 将较大的IP数据包分成多个分片,并给每个分片打上标签
- 每个分片的IP协议报头的16位标识(id)都是相同的
- 每个分片的IP协议头的3位标志字段中,第2位为1,表示允许分片,为0表示禁止分片;第三位来表示"更多分片",是结束标记(当前是否是最后)。如果为0表示是最后一个分片,为1则不是最后一个分片
- 到达对端时再将这些分片,按顺序重组,拼装到一起返回给传输层
- 一旦这些分片中的任意一个分片丢失,接收端的重组都会失败,但 IP层不负责重传,所以直接由TCP层进行超时重传
② MTU对UDP协议的影响
- 一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会在网络层分成多个 IP 数据报.
- 这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就
- 意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.
③ MTU对TCP协议的影响
- TCP 的一个数据报也不能无限大, 还是受制于 MTU. TCP 的单个数据报的最大消息长度, 称为 MSS(Max Segment Size)(下面会详细介绍 MSS 的)
- TCP 在建立连接的过程中, 通信双方会进行 MSS 协商.
- 最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU).
- 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值. • 然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS.
- MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2)
查看硬件地址和MTU大小
Linux下使用 ifconfig
命令
3. MSS
MSS(Maximum Segment Size,最大报文段长度)是TCP协议中的关键参数,用于定义通信双方在一次传输中能够接受的最大数据块长度。其核心目标是避免IP分片以提升网络效率,同时通过三次握手协商实现动态调整。以下从技术原理、工作机制及应用场景展开解析:
3.1 MSS的定义与计算
- 基本概念
MSS表示TCP报文段中有效载荷(Payload)的最大长度,不包括TCP和IP头部。
例如,以太网接口的MTU为1500字节,MSS则为1500 - 20(IP头) - 20(TCP头)= 1460字节
- 与MTU的关系
- MTU(最大传输单元):数据链路层限制的单次传输数据包大小,如以太网MTU为1500字节
- MSS由MTU派生:MSS = MTU - IP头 - TCP头,确保TCP报文封装后不超过物理链路承载能力
3.2 MSS的协商机制
MSS的确定通过TCP三次握手完成,具体流程如下:
- SYN阶段
- 客户端在SYN报文的选项字段中携带本地MSS值(如1460),通知服务端其接收能力
- SYN-ACK阶段
- 服务端回复SYN-ACK报文,携带自身的MSS值(如1400)
- 最终取值规则
- 通信双方选择 较小的MSS值作为连接的实际MSS。例如,客户端MSS=1460,服务端MSS=1400,则最终MSS为1400
中间路由器的干预:
若数据经过路由器,路由器可能修改SYN报文中的 MSS
值(例如将1460改为1200),确保路径中所有节点的MTU均支持,避免后续分片
3.3 MSS的核心作用
- 避免IP分片
TCP通过MSS限制数据段大小,使IP层无需分片即可传输报文,减少路由器处理开销(分片重组消耗大量CPU资源)
- 提升传输效率
- 减少协议头开销:MSS越大,有效载荷占比越高,网络利用率提升。例如,1460字节的MSS中,协议头仅占40字节(2.7%),而若MSS为500,协议头占比达8%
- 降低丢包影响:大报文分片后,任一碎片丢失均需重传整个报文,MSS通过控制分段大小降低重传概率
3.4 MSS的局限性及应对
- 路径MTU不一致问题
MSS仅确保第一跳不分片,若传输路径中存在更小MTU的链路(如VPN隧道),仍可能触发分片。此时需依赖
PMTUD(路径MTU发现):
- 路由器对DF(Don’t Fragment)标记的IP包,若尺寸超MTU则丢弃,并返回ICMP错误(Type=3, Code=4),通知源端调整MSS
- 中间设备不支持MSS调整
若路由器不修改SYN中的MSS值,可能导致分片。企业网常通过
TCP Adjust-MSS
功能强制修改MSS(如将1460改为1380),适配隧道封装后的MTU
3.5 典型场景与配置
- 企业双栈网络
在IPv4/IPv6混合环境中,MSS需根据MTU动态计算。例如,IPv6默认MTU为1280,MSS为1220(1280 - 40 IPv6头 - 20 TCP头)
- VPN与隧道封装
GRE或IPsec隧道会增加额外头部(如24字节GRE头),出口路由器需将MSS从1460降至1436(1500 - 20 IP - 24 GRE - 20 TCP)
| |
---|
| TCP三次握手,双方SYN/SYN-ACK携带MSS值,取较小值生效 |
| |
| 以太网环境MSS=1460,IPv6环境MSS=1220 |
| PMTUD(路径MTU发现)或路由器手动干预(如Adjust-MSS) |
既然 IP 层会分片,为什么 TCP 层还需要 MSS 呢?
- 当 IP 层有⼀个超过 MTU大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,保证每⼀个分片都小于 MTU。
- 把⼀份 IP 数据报进行分片以后,由目标主机的 IP 层来进行重新组装后再交给上⼀层 TCP传输层。那么当如果⼀个 IP 分片丢失,整个 IP 报文的所有分片都得重传。
- 这是因为IP层本身没有重传机制,他只是高效的发送数据而已,没有协议来保证完整性。当接收方TCP报文不完整后不会响应ACK的,那么TCP发送方就会触发超时重传,重发整个TCP报文段。这样做就非常没有效率可言。
所以为了提高效率,在建立连接的时候会剔除 IPHeader
和 TCPHeader
,剩下的就是协商的 MSS
值,当TCP发现超过 MSS
后就会分片,这样形成的IP包长度也就不会大于 MTU
了,也就不用IP分片了。
4. 局域网通信的传输细节
这里我们先来 简单 模拟一下局域网通信的过程:
在局域网中有若干主机 ABCD…,主机 A 此时向 G 发送信息。主机A 就先把 MAC 帧先填好目的地址与源地址:
- 主机A 将这个 MAC 帧放到网络中,其他主机的的数据链路层会先获取到 MAC 帧,因为报头是定长,可以快速取到报头,判断是否是发送给自己的报文, 如果发现不是自己的报文, 那么在数据链路层这个报文就被丢弃了。
- 许多的 MAC 帧之间会发生碰撞,越长的数据越容易产生碰撞,所以数据链路层才有 MTU 限制 一次发送的大小!
- 同样的也有最小数据帧限制
MSS
,对于不够的数据,会填充垃圾数据,那么会影响报文长度,这也就是为什么IP协议要带总长度字段! - 随着主机数的增加,每台主机处理的 MAC 帧就会越来越多,出现大面积的碰撞通信成功的概率就越来越小(这也是人数密集的地方网络差的原因)。
- 这里会涉及到交换机:交换机会把不同的主机划分成不同的区域!交换机对于所有主机的数据都可以收到,其转发的数据对象就是数据帧,所以也是工作在数据链路层!
- 交换机会对数据帧进行分析,将数据帧发放到对应的区域,这样可以很好的优化碰撞发生的概率!有效管理数据帧的扩散范围。
细节一:互斥访问局域网资源
💥 为了避免局域网中数据碰撞的问题,要保证任何时刻只有一台主机在使用局域网资源。
原因:
当两台以上的主机同时发送数据时,数据包会在传输介质(如以太网电缆)上相互干扰,导致数据碰撞。碰撞的结果是数据包损坏,接收方无法正确解析数据,从而导致传输失败。
解决方案:
🐇 为了防止数据碰撞:
- 主机在发送数据之前,会先监听传输介质,检查是否有其他主机正在发送数据。
如果传输介质空闲,主机可以开始发送数据。
- 在发送数据的过程中,主机还会持续监听传输介质。如果检测到冲突(即有其他主机同时发送数据),则立即停止发送,并发出一个“冲突信号”,通知其他主机发生了冲突。
- 通过这种方式,确保了在同一时刻,只有一个主机能够成功发送数据,从而避免了数据碰撞。
细节二:碰撞检测与碰撞避免
如果发生了碰撞,涉及碰撞的主机会采取以下措施:
- 停止发送:一旦检测到碰撞,主机立即停止发送数据,以避免进一步的数据损坏。
- 随机延迟后重发:主机进入“退避”状态,等待一个随机的时间间隔后再尝试重新发送数据。这个随机延迟时间是根据二进制指数退避算法计算的,目的是减少再次碰撞的可能性。
- 让出网络资源:在退避期间,主机不会占用网络资源,从而为其他主机提供发送数据的机会。
重要性:
🧀 这种机制不仅避免了数据碰撞,还通过随机延迟和重试机制,提高了网络资源的利用率,确保了网络的高效运行。
细节三:局域网的临界资源特性
🔗 局域网可以被视为一个 临界资源,因为在同一时刻,只能有一台主机向局域网发送数据。这与操作系统中的 互斥(Mutex) 概念非常相似。互斥机制确保了在多线程或多进程环境中,只有一个线程或进程能够访问共享资源,从而避免了资源竞争和数据损坏。
细节四:碰撞域中的主机数量
在一个碰撞域中,主机的数量对网络性能有显著影响。一般来说,主机数量越少越好:
- 减少碰撞概率:主机数量越少,同时发送数据的概率就越低,从而减少了碰撞的可能性。
- 提高传输效率:较少的主机意味着更少的冲突检测和退避操作,数据传输效率更高。
- 降低延迟:较少的主机竞争网络资源,减少了数据传输的延迟。
结论:
🐣 在一个碰撞域中,主机数量越少越好。为了提高网络性能,可以通过划分多个碰撞域(如使用交换机)来减少每个域中的主机数量。
细节五:数据帧长度的选择
在单台主机中,发送数据帧时,数据帧的长度对网络性能也有重要影响。
① 数据帧长度越长越好?
- 优点:较长的数据帧可以减少单位数据的传输开销(如帧头和帧尾的开销),提高传输效率。
- 缺点:如果数据帧过长,一旦发生碰撞,整个数据帧都会丢失,需要重新发送,这会增加传输延迟和网络负载。
② 数据帧长度越短越好?
- 优点:较短的数据帧在发生碰撞时,丢失的数据量较少,重新发送的开销较小。
- 缺点:如果数据帧过短,单位数据的传输开销会增加,降低了传输效率。
因此此时就出现了最优选择:MTU(最大传输单元)
为了平衡传输效率和可靠性,网络协议定义了 最大传输单元(MTU) 的概念。MTU 是指在不进行分片的情况下,网络层协议能够传输的最大数据帧长度。
- 以太网的MTU:在以太网中,MTU 通常为1500字节。这个长度是在传输效率和可靠性之间经过优化的平衡点。
- 其他网络技术:不同的网络技术可能有不同的 MTU 值 ,例如,一些高速网络技术(如Jumbo Frames)支持更大的 MTU 值,以提高传输效率。
结论:数据帧长度并不是越长越好,也不是越短越好。选择合适的MTU值可以在传输效率和可靠性之间取得最佳平衡。
四、ARP 协议
1. 基本概念
ARP协议并不是数据链路层的协议,而是介于数据链路层和网络层之间的协议
ARP协议建立了 主机 IP地址 和 MAC地址 的映射关系
- 在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,但不知道目的主机的MAC地址
- 数据帧首先是被网卡接收的,如果接收的数据帧的MAC地址与本主机不符,则直接丢弃。
- 因此在通信前必须获得目的主机的MAC地址
- 源主机发出ARP请求,询问“IP地址为192.168.0.1的主机的MAC地址是多少”,并将这个请求广播到本地网络(以太网帧首部的MAC地址填FF:FF:FF:FF:FF:FF代表广播)。网卡收到广播的ARP请求,需要向上交付,不过是交付给ARP协议,而不是数据链路层
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本主机相符,则发送一个ARP应答数据帧给源主机,将自己的MAC地址填写在应答数据帧中
- 一般主机会缓存子网内其他主机IP和MAC地址(ARP 缓存表)。由于IP是动态分配的,缓存的生命周期一般不长。可以使用arp -a查看:
缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的MAC地址
2. ARP 数据报格式
加粗部分是ARP协议报文格式,将ARP协议报文部分替换成有效载荷就是MAC帧协议报文格式。
- 注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次, 对于链路层为以太网的情况是多余的
- 但如果链路层是其它类型的网络则有可能是必要的。
| |
---|
| |
| |
| |
| |
| |
| 请求方或者响应方填写自身的MAC地址和IP地址,接收方提取以待后用 |
| 请求方填写接收方的IP地址,接收方MAC地址全F表示未知 |
3. ARP 通信流程
如果路由器知道IP对应的MAC地址,那就可以直接发送,如果不知道,就要使用ARP协议获取目的MAC。
- 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。目的MAC地址为全F(FF:FF:FF:FF:FF:FF)
- 局域网内的所有主机都会收到这个ARP请求,网卡识别目的MAC地址为全F,广播数据,需要向上交付,再根据帧类型识别是ARP请求/响应。所以向上交付给ARP协议。
- ARP协议 先看op字段,如果为ARP请求,再看目的IP地址,除目的主机外,其他主机发现不是给自己的,就在ARP层丢弃报文。
- 如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。
操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。
举个例子:
假设设备 A(IP: 192.168.1.2
,MAC: AA:AA:AA:AA:AA:AA
)想发送一个 IP 数据包给设备 B(IP: 192.168.1.3
,MAC 未知):
第一步:ARP 请求(EtherType=0x0806)
- A 发送一个 ARP 请求广播帧,询问:“谁有 IP 地址
192.168.1.3
?请告诉我你的 MAC 地址!” - 以太网帧结构:
- 目标MAC:
FF:FF:FF:FF:FF:FF
(广播地址) - 源MAC:
AA:AA:AA:AA:AA:AA
- EtherType:
0x0806
(标识 ARP 协议) - 数据部分:包含 ARP 请求的详细信息(如目标 IP
192.168.1.3
)。
第二步:ARP 响应(EtherType=0x0806)
- B 收到 ARP 请求后,回复 ARP 响应单播帧:
- 目标MAC:
AA:AA:AA:AA:AA:AA
- 源MAC:B 的 MAC 地址(如
BB:BB:BB:BB:BB:BB
) - EtherType:
0x0806
- 数据部分:包含 B 的 IP-MAC 映射(
192.168.1.3
→ BB:BB:BB:BB:BB:BB
)。
第三步:IP 数据传输(EtherType=0x0800)
- A 收到 ARP 响应后,缓存 B 的 MAC 地址,开始发送 IP 数据包:
- 目标MAC:
BB:BB:BB:BB:BB:BB
- 源MAC:
AA:AA:AA:AA:AA:AA
- EtherType:
0x0800
(标识 IPv4) - 数据部分:封装实际的应用层数据(如 HTTP 请求)。
结论:
- ARP(0x0806)是 IP(0x0800)的基础
- 没有 ARP 协议解析 MAC 地址,IP 报文无法正确寻址到目标设备。
- ARP 报文仅用于本地局域网内的地址解析,不跨网络传输。
- 分层设计的意义
- 链路层(MAC):负责本地设备的物理寻址(通过 ARP)。
- 网络层(IP):负责跨网络的逻辑寻址和数据路由。
- 通过 EtherType 字段,接收方可以明确区分数据是给 ARP 还是 IP 处理的
4. 常见问题
Q1:为什么需要同时用 IP 和 MAC?直接用 IP 通信不行吗?
- 答:IP 是逻辑地址,用于跨网络路由;MAC 是物理地址,用于本地设备寻址。两者分工不同(详情下面会讲)。
Q2:ARP 报文会被路由器转发吗?
- 答:不会!ARP 是链路层协议,仅在局域网内广播,路由器会隔离 ARP 广播域。
Q3:如何抓包观察 0x0800 和 0x0806?
- 答:使用 Wireshark 抓包工具,过滤
eth.type == 0x0800
或 eth.type == 0x0806
,即可看到 IP 和 ARP 报文。
五、ARP 欺骗 & DDos 攻击
1. ARP 欺骗(ARP Spoofing)
关于什么是 ARP,上面我们已经详细阐述过了
- ARP(地址解析协议):用于将 IP 地址转换为对应的 MAC 地址(比如
192.168.1.100
→ AA:BB:CC:DD:EE:FF
)。 - 类比:就像你通过姓名(IP地址)查电话号码(MAC地址),才能联系到对方。
1.1. ARP 欺骗的原理
- 攻击方式:攻击者伪造虚假的 ARP 响应包,告诉局域网内的其他设备:“我是路由器(或某台电脑)!”
- 结果:其他设备误将攻击者的 MAC 地址和合法 IP 绑定,后续数据会发到攻击者的电脑。
- 举个栗子🌰:
假设公司局域网中:
- 正常情况:A 电脑(IP: 192.168.1.2)访问路由器(IP: 192.168.1.1)。
- ARP 欺骗后:攻击者 B 广播虚假 ARP 响应:“IP 192.168.1.1 的 MAC 地址是 B 的 MAC!”
- 此时,A 电脑的数据会错误地发送给 B,B 可以窃听或篡改数据,再转发给真正的路由器(中间人攻击)。
1.2 ARP 欺骗的危害
- 流量监听:攻击者能窃取密码、聊天记录等敏感信息。
- 网络瘫痪:若攻击者不转发数据,A 电脑将无法上网(类似“断网攻击”)。
- 劫持会话:例如,劫持你的网页登录状态,冒充你操作账号。
1.14. 防御方法
- 静态 ARP 绑定:手动设置 IP-MAC 对应关系(比如在路由器绑定设备)。
- ARP 防火墙:工具如
ARPWatch
监控异常 ARP 包。 - 网络分段:划分 VLAN,限制攻击范围。
2. DDoS 攻击(分布式拒绝服务攻击)
2.1 什么是 DDoS
- DDoS(Distributed Denial of Service):通过海量请求淹没目标服务器/网络,使其无法正常服务。
- 关键特点:攻击流量来自大量被控制的设备(僵尸网络),分布在全球各地,难以直接阻断。
2.2 DDoS 攻击的原理
- 攻击步骤:
- 攻击者控制“僵尸设备”(如被木马感染的摄像头、电脑)。
- 所有僵尸设备同时向目标发送大量请求(例如 HTTP 请求、UDP 数据包)。
- 目标服务器资源(带宽、CPU、内存)被耗尽,正常用户无法访问。
- 举个栗子🌰:
假设某电商网站每秒能处理 1 万次请求,攻击者操控 10 万台僵尸设备,每台每秒发送 100 次请求,总流量高达 1000 万次/秒 → 网站直接瘫痪。
2.3 DDoS 的类型
- 流量型攻击:用巨量数据包堵塞带宽(如 UDP Flood)。
- 协议型攻击:利用协议漏洞耗尽资源(如 SYN Flood、Ping of Death)。
- 应用层攻击:模拟合法请求耗尽服务器性能(如 HTTP Flood)。
2.4 DDoS 的危害
- 业务中断:网站、游戏服务器宕机,直接导致收入损失。
- 声誉受损:用户因无法访问而流失。
- 勒索工具:攻击者可能勒索企业支付赎金才停止攻击。
2.5 防御方法
- 流量清洗:通过高防服务器过滤恶意流量,仅转发正常请求。
- CDN 分发:将流量分散到多个节点,减轻单点压力。
- 云防护服务:如阿里云、Cloudflare 的 DDoS 防护。
- 限制连接速率:在防火墙或路由器上设置阈值,拦截异常流量。
3. ARP 欺骗与 DDoS 的关联
- 组合攻击:攻击者可能先用 ARP 欺骗控制局域网内的设备,再将其变为“僵尸网络”参与 DDoS 攻击。
- 示例:
某公司内网中,攻击者通过 ARP 欺骗劫持多台电脑,植入木马程序,之后操控这些电脑同时攻击某个网站。
总结
- ARP 欺骗:局域网内的“身份伪造”,用于监听或破坏通信。
- DDoS:互联网上的“人海战术”,用垃圾流量压垮目标。
防护核心:
- 对 ARP 欺骗:加强内网监控,绑定 IP-MAC。
- 对 DDoS:依赖专业的流量清洗和分布式架构。
六、思考
为什么感觉转发的时候,好像只有ip也能通信不用mac,然后通信的时候问这个 IP 是谁的,知道那个人 的名字是你的就把数据拿走,那么历史为啥会选择 ip + MAC 的方式进行通信,进行了 ARP
- 这个问题其实非常核心!网络通信中同时使用 IP 地址和 MAC 地址看似冗余,实则是为了解决不同层面的问题。这种设计的根源在于 网络分层思想 和 物理与逻辑地址的分离。下面我将通过通俗的类比和技术逻辑逐步解释。
1. 为什么需要 MAC 地址 + IP 地址?
1.1 网络分层的本质
网络通信基于 OSI 模型 或 TCP/IP 模型,不同层负责不同任务:
- 网络层(IP):负责全局寻址,像快递单上的「目的地城市+收件人姓名」。
- 作用:跨网络路由时,IP 地址告诉路由器“数据最终要去哪里”(比如
8.8.8.8
)。
- 数据链路层(MAC):负责本地寻址,像快递员在小区内按「门牌号」投递。
- 作用:在同一个局域网(如你家 Wi-Fi)内,MAC 地址告诉交换机“数据下一步发给哪个设备”。
1.2 举个栗子🌰:网购快递
假设你从北京寄包裹到上海的朋友:
- IP 地址的作用:快递公司根据「上海」这个目标城市(类似 IP 地址的网络部分),将包裹路由到上海的分拣中心。
- MAC 地址的作用:上海的快递员根据「门牌号」(类似 MAC 地址)将包裹送到朋友家。
- 关键点:快递公司不关心门牌号,只关心城市;快递员不关心城市,只关心门牌号。两者分工明确!
1.3 只用 IP 地址会怎样?
- 无法直接定位设备:IP 地址是逻辑地址,可能动态变化(比如 DHCP 分配)。若只用 IP,设备无法在物理网络中直接找到目标。
- 跨网络失效:IP 地址用于路由到目标网络,但进入目标网络后,仍需 MAC 地址在本地精准投递(如 Wi-Fi 内的手机和电脑通信)。
1.4 只用 MAC 地址会怎样?
- 无法跨网络通信:MAC 地址只在局域网内有效,路由器不会根据 MAC 地址跨网络转发数据。
- 管理混乱:全球设备 MAC 地址无层次结构,难以像 IP 地址一样规划子网和路由。
二、ARP 的作用:关联 IP 和 MAC
2.1 ARP 的核心任务
- 问题:已知目标 IP 地址,如何找到对应的 MAC 地址?
- 解决方案:通过 ARP 协议(Address Resolution Protocol)广播询问:“谁有 IP 地址
192.168.1.100
?请告诉我你的 MAC 地址!” - 目标设备回应后,本地会缓存 IP-MAC 映射表,后续通信直接使用。
2. 为什么需要 ARP?
- 动态网络环境:设备可能随时加入或离开网络,IP 和 MAC 的绑定关系可能变化(如 DHCP 分配新 IP)。
- 避免硬编码:如果强制静态绑定所有 IP-MAC,网络将失去灵活性(想象一个大型公司每台电脑的 IP 都要手动配置)。
3. ARP 的局限性
- 安全问题:ARP 协议本身无认证机制,导致 ARP 欺骗(攻击者伪造 IP-MAC 映射)。
- 解决方案:使用静态 ARP 绑定、ARP 防火墙或更安全的协议(如 IPv6 的 NDP 协议)。
3. 历史选择:为何设计为 IP + MAC?
3.1 分层设计的优势
- 解耦逻辑与物理:IP 地址负责网络层路由,MAC 地址负责数据链路层传输。修改上层协议(如 IPv4 → IPv6)不影响底层硬件。
- 扩展性:IP 地址可分层规划(如
192.168.1.0/24
),方便路由聚合;MAC 地址扁平化,适合本地广播。
3.2 跨网络通信的必然性
- 早期网络局限:1970 年代以太网诞生时,网络规模小,MAC 地址足以定位设备。但随着互联网发展,必须引入逻辑地址(IP)实现跨网络路由。
- 类比电话系统:
- IP 地址 ≈ 国家码 + 区号 + 电话号码(逻辑分层,可路由)。
- MAC 地址 ≈ 手机 SIM 卡 ID(物理标识,仅本地有效)。
3.3 如果历史重来?
- IPv6 的改进:IPv6 保留了 IP + MAC 的分层思想,但通过 NDP 协议(替代 ARP)和 SLAAC 简化地址分配,安全性更高。
- 完全去中心化方案? 区块链或去中心化网络尝试用唯一 ID 取代 IP+MAC,但尚未成熟。
4. 总结:IP 和 MAC 缺一不可
- ARP 的意义:动态绑定 IP 和 MAC,弥补逻辑层与物理层的鸿沟。
- 历史必然性:分层设计是网络扩展性、灵活性的基石,IP + MAC 的组合至今仍是互联网的核心架构