一、引言
数据链路,有时也指以太网、无线局域网等通信手段。数据链路层的协议定义了通过通信媒介互联的设备之间传输的规定。通信媒介包括双绞线电缆、同轴电缆、光纤、点播以及红外线等介质。此外,各个设备之间也会通过交换价、网桥、中继器等中转数据。
各个设备之间在数据传输时,数据链路层和物理层都是必不可少的。众所周知,计算机以二进制0、1来表示信息,然而实际的通信媒介之间处理的却是电压的高低、光的闪灭以及电波的强弱等信号。把这些信号与二进制的0、1进行转换正是物理层的责任。数据链路层处理的数据也不是单纯的0、1序列,该层把它们集合为一个叫做“帧”的块,然后再进行传输。
数据链路层主要解决的是相同子网如何进行通信。当需要跨子网通信时,数据包会被传递到网络层(如IP层),由网络层负责跨子网的转发和路由选择。
二、MAC地址
MAC地址用于识别数据链路中互连的节点。
每台主机都有至少一个Mac地址。每台主机的网络接口卡(NIC,Network Interface Card)都有一个唯一的硬件地址,称为媒体访问控制(MAC,Media Access Control)地址。
MAC地址是网络设备在网络层之下的数据链路层所使用的唯一标识符。即MAC地址是一个48位(即六字节)地址,通常用12位十六进制数表示(如:00:1A:2B:3C:4D:5E),用于唯一标识网络接口设备。
以下有关MAC地址意义和作用描述错误的是()
A.MAC地址与网络无关
B.在网卡出厂时就确定了, 不能修改. MAC地址通常是唯一的
C.MAC地址用来识别数据链路层中相连的节点
D.一台计算机只能有一个MAC地址
MAC地址是物理网卡硬件地址,在出厂时就会设定,不能修改,它的大小是6字节,用于识别相邻设备,在链路层完成相邻设备之间的数据传输。
D错误:一台计算机可以绑定多个网卡,进而可以拥有多个MAC地址。
下列IP地址和MAC地址说法错误的是()
A.IP地址的分配是基于网络拓朴,MAC地址的分配是基于制造商
B.IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层
C.数据链路层协议可以通过MAC地址使数据从一个节点传递到相同链路的另一个节点上
D.一个MAC地址只能对应唯一一个IP地址
三、以太网
以太网不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等。例如以太网中的网线必须使用双绞线。以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网和无线LAN等。
以太网帧本体的前端是以太网的首部,它总共占14个字节。分别是6个字节的目标MAC地址、6个字节的源MAC地址以及2个字节的上层协议类型。
紧随帧头后面的是数据。一个数据帧所能容纳的最大数据范围是46~1500个字节。帧尾是一个叫做FCS(Frame Check Sequence,帧检验序列)的4个字。
2字节的类型通常跟数据一起传送,它包含用以标识协议类型的编号,即表明以太网的再上一层网络协议的类型。在这个字段的后面,则是该类型所标识的协议首部及其数据。
帧尾最后出现的是FCS 。用它可以检查帧是否有所损坏。
数据链路层的MTU对传输层协议的影响
对于UDP而言,MTU:若UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报,任何一个IP数据报丢失,都会引起接收端网络重组失败,那么就意味着,如果 UDP 数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
对于TCP而言,MTU:TCP 的一个数据报也不能无限大, 还是受制于 MTU. TCP 的单个数据报的最大消息长度, 称为 MSS(Max Segment Size);TCP 在建立连接的过程中, 通信双方会进行 MSS 协商。最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU)。
双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值。然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS。MSS 的值就是在 TCP 首部的 40 字节变长选项中。
四、交换机
一个局域网中的主机不能太多。如果太多就会经常数据碰撞。交换机可以划分碰撞域。将一个局域网划分为两个不同的子网。
同一个集线器下的设备都是在同一个局域网,也就是说局域网是由集线器连接到一起的。集线器(Hub)是一种基础的网络设备,用于将多个网络设备连接在一起,形成一个局域网(Local Area Network,简称LAN)。
集线器是网络中的一种设备,它将接收到的数据广播到所有连接的端口,这意味着所有主机都共享同一个通信信道。这种广播机制容易导致数据碰撞,尤其是在主机数量较多时。碰撞发生时,所有受影响的设备都必须重新发送数据,这不仅增加了网络延迟,还会降低网络带宽的有效利用率。
集线器工作在OSI模型的第一层,即物理层,它不处理数据链路层的网络流量,比如MAC地址。这意味着集线器不会像交换机(Switch)那样智能地根据MAC地址转发数据包,而是简单地将所有接收到的数据广播到所有端口。
交换机(Switch)是一种比集线器更先进的网络设备。与集线器不同,交换机工作在数据链路层,能够识别每台设备的MAC地址,并且仅将数据帧转发给目标设备所在的端口。交换机的引入极大地减少了碰撞域(Collision Domain)。在使用交换机的网络中,每个端口都属于独立的碰撞域,因此即使网络中有大量设备,也不会像集线器那样频繁发生数据碰撞。
在使用交换机的网络中,每个交换机端口都只连接到一个设备(比如一台电脑、打印机或另一台网络设备)。当这个设备通过交换机与其他设备通信时,交换机会为这个端口和目标设备之间建立一条专用的通信路径。
**“独立的通信路径”**意味着:该设备发送或接收的数据帧,只会在这个端口与交换机之间传输,而不会影响交换机上的其他端口。这种通信是专有的,不会与其他设备的通信发生冲突,也不会导致数据碰撞。这样的设置确保了每个设备都拥有稳定的、独立的通信环境,不用担心其他设备的通信会干扰到自己。
交换机的端口:
- 物理端口:交换机的端口指的是交换机上用于连接网络设备的物理接口。每个端口可以通过以太网电缆连接到一台计算机、服务器、路由器、另一台交换机或其他网络设备。交换机通过这些端口来接收和转发数据帧。
- 功能:每个交换机端口可以划分为独立的碰撞域,这样可以避免在网络中发生数据帧的碰撞,提高网络的效率和性能。交换机端口的主要作用是处理设备之间的网络流量,并确保数据帧能够快速、安全地传输到正确的目的地。
我们可以发现,交换机的核心作用是划分碰撞域。
独立碰撞域:每个交换机端口和与之相连的设备形成了一个独立的碰撞域。因此,当一个设备通过交换机发送数据时,只有连接到目标设备的端口会参与通信。其他端口和设备不会受到影响,不会发生碰撞。
交换的工作机制
- MAC地址表:交换机通过构建一个MAC地址表来跟踪每个端口连接的设备。当交换机接收到一个数据帧时,它会检查该帧的目的MAC地址,并查找MAC地址表,找到该MAC地址对应的端口,然后只将数据帧发送到那个端口。这样,其它端口上的设备不会受到干扰。
- 减少碰撞域:每个交换机端口属于一个独立的碰撞域,形成了多个小的、独立的碰撞域。这与集线器的共享碰撞域形成了鲜明的对比,极大地减少了数据碰撞的机会,从而提高了网络的效率和吞吐量。
五、ARP与RARP
无论网络层使用什么协议,在实际网络的链路上传输数据时,最终必须使用硬件地址。所以需要一种方法来完成IP地址到MAC地址的映射。这就是ARP协议。注意:ARP工作在网络层。
1、ARP
只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。
ARP协议(Address Resolution Protocol)是用于在局域网内根据IP地址获取设备的MAC地址的协议。它在网络中通过IP地址找到对应MAC地址。如果目标主机不在同一个链路上,可以通过ARP查找下一跳路由器的MAC地址。
假定主机A向同一链路上的主机B发送IP包,主机A的IP地址为172.20.1.1,主机B的IP地址为172.20.1.2,它们互不知道对方的MAC地址。
主机A为了获得主机B的MAC地址,起初要通过广播发生一个ARP请求包。这个包中包括了想要知道其MAC地址的主机IP地址。也就是说,这个ARP请求包包括了主机B的IP地址。由于广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同一个链路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A。
总之,从一个IP地址发送ARP请求包以了解其MAC地址。目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的通信。
一般来说,发送过一次IP数据报的主机,继续发送多次IP数据报的可能性会比较高。如果每次发送IP报文都需要进行一次ARP请求来确定目标MAC地址,会带来不必要的网络流量。因此,通常把获取到的MAC地址缓存一段时间。即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执行一次ARP,其对应的缓存内容都会被清除。不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络上被大量广播的可能性。
ARP 报文通常包含 28 字节的固定长度结构(不包括以太网帧头),其结构如下:
字段 | 长度(字节) | 描述 |
---|---|---|
硬件类型 | 2 | 指定数据链路层协议类型,通常为 1(表示以太网)。 |
协议类型 | 2 | 指定要解析的协议地址类型,通常为 0x0800(表示 IPv4)。 |
硬件地址长度 | 1 | 硬件地址长度,通常为 6(表示 MAC 地址长度)。 |
协议地址长度 | 1 | 协议地址长度,通常为 4(表示 IPv4 地址长度)。 |
标记 | 2 | 表示 ARP 操作类型:1 为请求,2 为响应。 |
发送方 MAC 地址 | 6 | 发起请求的设备的 MAC 地址。 |
发送方 IP 地址 | 4 | 发起请求的设备的 IP 地址。 |
目标 MAC 地址 | 6 | 目标设备的 MAC 地址(请求时为空)。 |
目标 IP 地址 | 4 | 目标设备的 IP 地址(要解析的 IP 地址)。 |
标记字段:表示 ARP 消息的类型。常见值为:
1
:ARP 请求,要求获取某个 IP 地址对应的 MAC 地址。2
:ARP 响应,返回某个 IP 地址对应的 MAC 地址。
Linux和Windows 都可以使用arp -a
命令查看当前机器的ARP缓存。
只要知道了IP地址,即使不做ARP,只要在数据链路上做一个广播不就能发给主机B了吗?为什么既需要IP地址又需要MAC地址呢?
假如,主机A想要发送数据报给主机B时,必须经过路由器C。即使知道了主机B 的MAC地址,由于路由器C会隔断网络,还是无法直接把数据报从主机A发送给主机B。此时,主机A必须得将数据报发送给路由器C的MAC地址C1。
同时,假定MAC地址就用广播地址,那么路由器D也会收到该广播消息。于是路由器D又将该信息转发给路由器C,导致数据被重复发送两次。
IP 地址与 MAC 地址承当着不同的作用,IP 地址是目标的地址,而 MAC 地址承担着 “下一目标” 的地址,数据报要经过多次中转才能到达最终的目标上。
在以太网上发送IP包时,“下次要经由哪个路由器发送数据报”这一信息非常重要。而这里的“下一个路由器”就是相应的MAC地址。
让我们举例分析ARP的过程:
1. 情景背景
假设在一个局域网中,主机A需要向主机B发送数据。主机A知道主机B的IP地址,但不知道主机B的MAC地址。在这种情况下,主机A需要使用ARP协议来获取主机B的MAC地址。
2. ARP缓存表检查
- ARP缓存表:每台设备(如主机、路由器等)维护一个ARP缓存表,该表中存储了IP地址与MAC地址的对应关系。
- 检查缓存:主机A首先会检查自己的ARP缓存表,看是否已经有了主机B的IP地址对应的MAC地址。
- 如果缓存中存在:主机A直接使用该MAC地址进行数据传输。
- 如果缓存中不存在:主机A将需要通过ARP协议获取主机B的MAC地址。
3. 发送ARP请求
- ARP请求报文:如果主机A的ARP缓存中没有主机B的MAC地址,主机A会在局域网内广播一个ARP请求报文。
- 请求内容:ARP请求报文包含以下信息:
- 发送方的MAC地址和IP地址(即主机A的MAC和IP地址)。
- 目标设备的IP地址(即主机B的IP地址)。
- 目标MAC地址字段为空(因为这是主机A想要获取的信息)。
- 广播:ARP请求是通过广播发送的,这意味着局域网内所有设备都能收到这个请求。
4. 处理ARP请求
- 接收ARP请求:局域网内的所有设备都会收到这个ARP请求,但只有IP地址与目标IP地址匹配的设备会做出响应。
- 主机B响应:主机B收到ARP请求后,检查发现请求中的目标IP地址与自己的IP地址相同,于是主机B会发送一个ARP回复报文。
5. 发送ARP回复
- ARP回复报文:主机B生成一个ARP回复报文,包含以下信息:
- 发送方的MAC地址和IP地址(即主机B的MAC和IP地址)。
- 目标设备的MAC地址和IP地址(即主机A的MAC和IP地址)。
- 单播回复:ARP回复是一个单播报文,即直接发送给主机A,而不是广播给整个网络。
6. 更新ARP缓存
- 主机A更新缓存:主机A在收到ARP回复后,会将主机B的IP地址和对应的MAC地址记录在自己的ARP缓存表中,以备将来使用。
- 数据传输:现在,主机A知道了主机B的MAC地址,可以使用这个MAC地址将数据帧发送给主机B。
7. ARP缓存表的老化
- 老化机制:ARP缓存表中的记录并不是永久保存的。通常,每条记录会有一个有效期,当这个时间到期后,ARP缓存表中的对应条目会被删除。
- 定期更新:如果一段时间后主机A再次需要与主机B通信,且ARP缓存中的记录已经老化失效,则主机A将重新发起ARP请求。
先广播,后单发。
ARP协议在局域网内根据IP地址查找设备的MAC地址,利用广播发送ARP请求,并通过单播接收ARP回复,最终完成IP地址到MAC地址的映射。这个过程使得设备在以太网等网络中可以有效地进行通信,即使最初只知道目标设备的IP地址。
- ARP请求:广播到整个局域网,所有主机都会收到ARP请求,但只有目标IP地址与主机IP地址匹配的主机会回应。
- ARP应答:单播返回给ARP请求的发起主机,提供目标IP地址的MAC地址。
通过ping www.baidu.com
命令,可以看到对应IP的mac地址。
通过ping
命令可以检查目标设备是否在网络上可达。例如,ping 192.168.1.10
会向IP地址为192.168.1.10的设备发送ICMP回显请求,以检查其是否响应。ping
命令可以帮助确保目标设备在线,这样就可以在ARP缓存中查找对应的MAC地址。ARP缓存存储了IP地址与MAC地址的映射关系。
注意:ARP 用于解决同一个局域网上的主机或路由器的 IP地址和MAC地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做,尽管 ARP 请求分组是广播发送的,但 ARP 响应分组是普通的单播,即从一个源地址发送到一个目的地址。
ARP的四种典型情况:
1️⃣发送方是主机时,要把 IP 数据报发送到本网络上的另一台主机。这时用 ARP 找到目的主机的硬件地址。
2️⃣发送方是主机时,要把 IP 数据报发送到另一个网络上的一台主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。
3️⃣发送方是路由器时,要把 IP 数据报转发到本网络上的一台主机。这时用 ARP找到目的主机的硬件地址。
4️⃣发送方是路由器时,要把 IP 数据报转发到另一个网络上的一台主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由找到的这个路由器完成。
从 IP 地址到 MAC 地址的解析是自动进行的,主机的用户并不知道这种地址解析过程。只要主机或路由器和本网络上的另一个已知地址的主机或路由器进行通信,ARP就会自动地将这个 IP 地址解析为数据链路层所需要的硬件地址。
2、RARP
MAC地址是ARP和RARP操作的基础。它们的功能是基于MAC地址实现的,因此在概念上,MAC地址是它们的“下层”或依赖对象。
RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。
平常我们可以通过个人电脑设置IP地址,也可以通过DHCP自动分配获取IP地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过DHCP动态获取IP地址的情况,例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到RARP。
为此,需要架设一台RARP服务器,从而在这个服务器上注册设备的MAC地址及其IP地址。然后再将这个设备接入到网络,接着:
- 该设备会发送一条 “我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么” 的请求信息。
- RARP 服务器接到这个消息后返回 “MAC地址为 XXXX 的设备,IP地址为 XXX” 的信息给这个设备。
最后,设备就根据从 RARP 服务器所收到的应答信息设置自己的 IP 地址。
中间人攻击:ARP欺骗
ARP 欺骗(ARP Spoofing)或称 ARP 中间人攻击(ARP Man-in-the-Middle Attack)是一种网络攻击技术,它利用了 ARP 协议的缺陷,允许攻击者在局域网中插入虚假的 ARP 响应,从而欺骗其他设备,将网络流量重定向到攻击者的设备上。
-
ARP 欺骗的原理:ARP 欺骗攻击利用了 ARP 协议的无认证特性。ARP 协议用于将 IP 地址解析为 MAC 地址,设备在发送 ARP 请求时,网络中的所有设备都会收到这些请求,并且任何设备都可以响应 ARP 请求。攻击者利用这一点,通过发送虚假的 ARP 响应来篡改 ARP 缓存中的数据,从而达到以下目的:
-
流量重定向:攻击者可以使网络流量通过其设备,从而窃听、篡改或干扰通信。
-
拒绝服务攻击:通过篡改 ARP 表,使目标设备无法与其他设备通信,导致网络服务中断。
-
-
ARP 欺骗攻击的步骤:
- 扫描网络:攻击者首先需要了解网络中的 IP 地址和 MAC 地址映射。这可以通过扫描网络获得。
- 发送虚假 ARP 响应:攻击者向网络中的设备发送伪造的 ARP 响应,声明自己的 MAC 地址对应于一个或多个 IP 地址。例如,攻击者可以发送 ARP 响应,将设备 A 的 IP 地址映射到攻击者的 MAC 地址上。
- 更新 ARP 缓存:接收到虚假 ARP 响应的设备会将其 ARP 缓存中的 IP-MAC 映射更新为攻击者提供的伪造地址。这会使得这些设备向攻击者的设备发送本应发往其他设备的流量。
- 流量监控或篡改:攻击者可以截获、监控或修改通过其设备的网络流量,进行窃听或其他恶意操作。