网络世界的“搬运工”:深入理解数据链路层

个人主页:chian-ocean

文章专栏-NET

前言

数据链路层常常被隐藏在物理线路和高层协议之间,默默承担着确保数据稳定、可靠传输的重任。它是网络世界中的"搬运工",将上层的数据拆分成一个个帧,在局域网中通过硬件地址(MAC地址)精确地送达目标节点。

MAC地址

定义:MAC 地址,又称物理地址或硬件地址,是在数据链路层用于唯一标识网络接口的 48 位(二进制)标识符。

在下面标红的就是MAC地址,这里面显示的是16进制。

cmd 复制代码
10-F6-0A-27-78-0B  (Windows)
cmd 复制代码
fa:16:3e:9b:00:be (linux)

共享介质网络和非共享介质网络

从通信介质(通信,介质)的使用方法上看,网络可分为共享介质型和非共享介质型。

共享介质网络

定义:

共享介质网络指的是多个设备共同使用同一通信介质进行数据传输的网络。在任何时刻,只有一个设备可以发送数据,否则就会发生冲突,基本上采用半双工通信方式。

网络控制

共享介质型网络中有两种介质访问控制方式:一种是争用方式,另一种是令牌传递方式。

争用方式(Carrier Sense Multiple Access)

争用方式 (Contention)是指争夺获取数据传输的权力,也叫 CSMA(载波监听多路访问)。这种方法通常令网络中的各个==站(在数据链路经常将节点叫做站)==采用先到先得的方式占用信道发送数据,如果多个站同时发送帧,则会产生冲突现象。也因此会导致网络拥堵与性能下降。

在一部分以太网当中,采用了改良 CSMA 的另一种方式 ------CSMA/CD 方式。CSMA/CD 要求每个站提前检查冲突,一旦发生冲突,则尽早释放信道。其具体工作原理如下:

  • 如果载波信道上没有数据流动,则任何站都可以发送数据。
  • 检查是否会发生冲突。一旦发生冲突时,放弃发送数据,同时立即释放载波信道。
  • 放弃发送以后,随机延时一段时间,再重新争用介质,重新发送帧。

流程:

令牌传递(Token Passing)

网络中存在一个特殊数据包"令牌",只有持有令牌的设备可以发送数据。令牌在网络中按顺序传递。这样就不会在网络中发生冲突。但是这样在网络不太拥堵的情况下数据链路的利用率也就达不到 100%。对此就产生了其他的策略,例如:早期令牌释放、令牌追加等方式以及多个令牌同时循环等方式。为了提纲网络性能。

如图,只有持有令牌的才可以进行网络传输。

非共享介质网络

定义

指的是网络中每个站点独立连接到交换机,并且各设备之间不共享通信介质(即每个通信端口和传输信道都不共享)。这种方式在网络中避免了数据冲突,因此,很多情况使用全双工通信方式进行数据传输。

网络控制

在非共享介质网络中,网络中的每个站直连交换机,由交换机负责转发数据帧。此方式下,发送端与接收端并不共享通信介质,因此很多情况下采用全双工通信方式,它也成为了以太网的主流方式。

  • 通过以太网交换机构建网络,从而使计算机与交换机端口之间形成一对一的连接,即可实现全双工通信。
  • 该方式还可以根据交换机的高级特性构建虚拟局域网(VLAN,Virtual LAN)、进行流量控制等。

根据MAC地址进行转发

交换机根据MAC地址转发数据的过程可以简单总结为以下几个步骤:

  1. 学习源MAC地址 :
    • 交换机接收到数据包后,首先查看数据包中的源MAC地址。
    • 交换机将源MAC地址与接收端口进行关联,并记录到转发表中。
  2. 查找目标MAC地址 :
    • 交换机查看数据包中的目标MAC地址,并查找转发表,确定目标MAC地址对应的端口。
  3. 转发数据包 :
    • 如果找到了目标MAC地址的端口,交换机将数据包转发到该端口。
    • 如果没有找到目标MAC地址,交换机会通过广播将数据包发送到所有端口,直到目标设备响应。
  4. 更新转发表 :
    • 交换机根据接收到的源MAC地址动态更新转发表,以便将来能够准确转发数据。

全双工通信和半双工通信

半双工 是指,只发送或只接收的通信方式。它类似于无线电收发器,若两端同时说话,是听不见对方说的话的。而全双工不同,它允许在同一时间既可以发送数据也可以接收数据。类似于电话,接打双方可以同时说话。

  • 全双工通信:适合需要实时、高效双向数据交换的应用,能够同时进行数据发送和接收,提升通信效率。

  • 半双工通信:适合简单的通信应用,尤其是设备成本敏感且对实时性要求不高的场景,虽然传输效率较低,但硬件要求相对较低。

半双工例子如图:

全双工例子如图:

ARP工作

ARP 是一种解决地址问题的协议。以目标 IP 地址为线索,用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址。如果目标主机不在同一个链路上时,可以通过 ARP 查找下一跳路由器的 MAC 地址。不过 ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 发送邻居探索消息。

ARP工作机制(ARP:IP 地址 → MAC 地址)

  • ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。
  • 如图 5.6 所示,假定主机 A 向同一链路上的主机 B 发送 IP 包,主机 A 的 IP 地址为 172.20.1.1,主机 B 的 IP 地址为 172.20.1.2,它们互不知道对方的 MAC 地址。
  • 主机A要获取主机B的MAC地址,会先广播ARP请求包,包含B的IP地址。同一链路中,如果某主机IP匹配,就回复自己的MAC地址,实现IP到MAC的解析。
  • 为避免频繁ARP造成网络拥堵,系统会将解析到的IP-MAC映射存入ARP缓存,后续通信可直接使用缓存MAC地址,无需再次ARP,提升效率并减少广播。
  • 发送和接收方主机都可通过通信过程自动记录对方的IP和MAC,缓存这些信息,提高后续通信速度。
  • ARP缓存有有效期,过期后会清除,确保IP与MAC的关系若有变化时,仍能正确发送数据包。
bash 复制代码
ip neigh  [[查看ARP缓存页]]

ARP(地址解析协议)数据包格式

这是 ARP 报文格式 示意图,用于在网络中实现 IP 地址与 MAC 地址的映射解析,关键字段含义如下:

  • 硬件类型:标识网络硬件(如以太网为 1),说明底层用啥物理网络
  • 上层协议类型:表示要解析的上层协议地址类型(IP 协议对应 0x0800)
  • HLEN:MAC 地址长度(固定 6 字节,因此太网 MAC 是 6 字节)
  • PLEN:IP 地址长度(IPv4 是 4 字节)
  • 操作码:区分 ARP 操作,1 为请求(查 MAC)、2 为响应(回传 MAC)
  • 地址字段:含发送 / 接收端的 MAC、IP 地址,请求包中 "接收端 MAC" 填 0(待查询),响应包则填实际 MAC,完成地址映射传传递,让网络设备能通过 IP 找到对应 MAC 通信。

RARP(MAC 地址 → IP 地址)

RARP 工作过程

  1. 主机启动,只知道自己的 MAC 地址,但不知道自己的 IP。
  2. 向局域网广播一个 RARP 请求包,包含自己的 MAC 地址,请求"谁能告诉我我的 IP 地址?"
  3. 网络中配置有 RARP 服务器(或支持 RARP 的路由器/网关)。
  4. RARP 服务器查表(MAC-IP映射表),如果有该 MAC 地址对应的 IP,则发送一个 RARP 响应包,告知主机其 IP。
  5. 主机接收后,配置该 IP,继续完成网络初始化。

基本上就是将ARP的工作流程逆置过来了,首部格式都是一样的。

NAT技术

NAT (Network Address Translator,网络地址转换)用于本地网络用私有地址,连互联网时转用全局 IP 地址,除转换 IP ,还有可转TCP、UDP端口号的 NAPT(Network Address Ports Translator,网络地址端口转换)技术,能实现一个全局 IP 与多个主机通信,

NAT的工作机制

以 10.0.0.10 主机与 163.221.120.9 主机通信为例,借助 NAT :

  • 发送数据时,NAT 路由器把源地址 10.0.0.10 转换为全局 IP(202.244.174.37 )后发送 。
  • 接收数据时,来自 163.221.120.9 的包,目标地址 202.244.174.37 先转成私有 IP 10.0.0.10 ,再转发 。

NAT(NAPT)地址转换表与多机通信方案

  • 地址转换表生成:NAT(NAPT)路由器内部有自动生成的地址转换表 。当 10.0.0.10 向 163.221.120.9 发第一个包时生成该表,后续按表中映射关系处理数据 。
  • 多机通信问题与解决:私有网络多台机器同时外通信,仅转换 IP 地址,全局 IP 可能不够用 。采用含端口号一起转换的 NAPT 方式,可解决此问题 。
  • 通信连接判定:在 TCP 或 UDP 通信里,当目标地址、源地址、目标端口、源端口、协议类型(TCP/UDP )五项都一致,才视为同一通信连接,此场景用 NAPT 。
  • 多客户端通信转换示例 :如上图,主机 163.221.120.9 端口 80 ,LAN 内 10.0.0.10 和 10.0.0.11 (本地端口均 1025 )同时通信。仅转IP为 202.244.174.37 会致信息一致,将 10.0.0.11 端口转1026可解决。生成 NAPT 路由器转换表,能正确转换地址与端口组合,保障客户端 A、B 同时和服务器通信。
  • 转换表生成与删除:转换表在 NAT 路由器自动生成,如 TCP 场景,发建立连接首次握手的 SYN 包时生成;收到关闭连接 FIN 包的确认应答后,从表中删除 。
相关推荐
道尔柯南1 分钟前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀9 分钟前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
tachibana217 分钟前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
深圳市快瞳科技有限公司38 分钟前
宠物门禁端侧AI落地解析:画质检测、活体甄别与离线推理
网络
临床数据科学和人工智能兴趣组1 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go1 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
geats人山人海1 小时前
java 4继承
java·开发语言
aqiu1111112 小时前
【C++算法打怪专栏】C++ `unordered_set` 常用初始化与插入方法总结
开发语言·c++·算法
众链网络2 小时前
Agent 的成本大头不在“写“,在“判断“:拆解专用决策模型的三层架构
java·开发语言·人工智能·微服务
周小董2 小时前
[1371]jdk管理工具
java·开发语言