计算机网络|数据链路层详解:MAC 地址、交换机、ARP 协议、CRC 校验

  • 🏠 博客主页:小谢同学的小破站
  • ✍️ 本文由 小谢同学的小破站 原创,首发于 CSDN💻
  • ☕ Java学习专栏:java
  • 📗 MySQL专栏:MySQL
  • 🧩 数据结构与算法:Java 数据结构与算法
  • 🌐C语言专栏: C语言
  • 👍 欢迎点赞👍 收藏⭐ 留言📝,发现错误欢迎指正!
  • ✨ 脚踏实地,持续深耕,奔赴自己的目标✨
    -- -- -- -- -- 💫分割线💫----------

标题

  • [1. 认识数据链路层](#1. 认识数据链路层)
    • [1.1 数据链路层的核心任务](#1.1 数据链路层的核心任务)
      • [1.1.1 封装成帧](#1.1.1 封装成帧)
      • [1.1.2 CRC差错检测](#1.1.2 CRC差错检测)
      • [1.1.3 可靠传输机制](#1.1.3 可靠传输机制)
  • [2. 认识以太网](#2. 认识以太网)
    • [2.1 MAC地址](#2.1 MAC地址)
    • [2.2 二层交换机工作原理](#2.2 二层交换机工作原理)
    • [2.3 ARP协议](#2.3 ARP协议)
  • [3. 高频面试题总结](#3. 高频面试题总结)

前言:

   这里是小谢同学有关于数据链路层的学习记录,整理数据链路层相关知识。笔记用于自我复盘巩固,有错误欢迎大家指出,专栏还有 Java、网络、C 语言系列笔记欢迎翻阅.

1. 认识数据链路层

TCP/IP五层网络模型中,从上往下依次是:应用层 → 传输层 → 网络层 → 数据链路层 → 物理层。

  • 网络层 :负责跨网络传输,找目标主机(依靠IP地址)。
  • 数据链路层:负责同一个局域网内 ,把数据从一台主机送到另一台主机(主要是依靠MAC地址)。

例如:生活中的一个例子

  • IP地址代表的是,详细的一个小区地址(xxx小区3栋xxx号),可以使用于跨市导航
  • MAC地址代表的是,本小区里面住户的门牌号,只在当前小区内送货用。
1.1 数据链路层的核心任务

数据链路层主要的3大核心任务:封装成帧,CRC差错检测,可靠传输机制

以太网结构为例子:

封装成帧

给网络层传下来的IP数据包,加上帧头、帧尾,组成「帧」

帧的作用: 物理层只能传输一串0/1比特流;数据链路层必须要划定边界,告诉设备:哪一段是一完整帧

封装完成之后就变成了以太网数据帧,后续会交给物理层发送;

  • 帧头中关键信息:源MAC地址,目的MAC地址,这两者就相当于寄快递的寄件人与收件人

通俗的话就是:寄快递,给快递包装起来,外层是纸盒子(纸盒子相当于加上的帧头与帧尾)

CRC差错检测

以太网使用 CRC循环冗余校验

什么是CRC校验冗余校验?

原理:

 发送方:会根据原始的数据计算出校验码,放在帧尾一起一同发送过去。

 接收方:拿收到的数据 + CRC校验码会重新进行计算结果。

  • 结果为0 → 说明数据没有损坏
  • 结果不为0 → 说明数据出错,会直接丢弃帧

    注意:差错检测只能检是否存在问题,而不能纠正错误,传输过程中发现错误会直接丢包,不会自动重传,重传的工作会交给上层TCP协议来进行处理
可靠传输机制

可靠传输字面意思上我们就能理解为:保证接收方能够接收到发送方发送的数据;

3种经典的可靠传输机制:

  1. 停止等待协议: 每次发送一帧数据会等待对方返回ACK,收到之后再发送下一帧,缺点就是效率比较慢
  2. 后退N帧(GBN): 可以连续发送多帧,如果发送过程中出现丢包问题,就会从丢包地方重新开始传递数据
  3. 选择重传: 出错只会重新传递出错那一处,并不会重复发送数据

以太网本身是没有实现可靠传输 的,可靠传输交给TCP来进行实现


2. 认识以太网

 以太这个概念早期并不是计算机里面的一个术语,而是物理上设想的一种物质:

 1887年迈克尔逊和莫雷在美国克利夫兰做的迈克尔逊-莫雷实验否定了以太的存在,以太从此退出科学领域,只成为了一种哲学上的概念。

 后续在计算机层面上引用了以太这个名词,也就是现在的以太网

以太网结构:

解释:

1.目的地址与源地址 :都是MAC地址,对应关系属于收件人与寄件人的关系

  1. CRC: 校验数据是否出错,会计算出校验码
  • 结果为0 → 说明数据没有损坏
  • 结果不为0 → 说明数据出错,会直接丢弃帧

2.1 MAC地址

 MAC地址也叫物理地址,是固化在网卡硬件上,长度为48位,用12个十六进制数字表示 。一般情况下在出产时已经固定好了,绝大部分情况下MAC地址是固定的,不允许修改(MAC地址通常是唯一的) ,但是有些设备可以修改MAC地址 ;

注意:MAC地址只能在同一个局域网(广播域)内生效,不能跨局域网直接通信。

这里我们可以使用一个例子: 长途旅途类比数据包跨网段传输 桂林-\>柳州-\>北海-\>南宁

  • 此处的IP地址就相当于本次的起点与目的地
  • MAC地址只负责管理 相邻的一跳 ,数据包每次经过一台路由器,离开当前局域网之后,旧的MAC地址就会作废,路由器会重新封装一组全新的源MAC,目的MAC,直到最后一跳到达目标主机所在的局域网,目的的MAC地址才会更换成目标主机网卡的MAC地址。

简单口诀:IP不忘初心,MAC每跳换新


2.2 二层交换机工作原理

简单来理解:

 交换机属于二层设备,只认识MAC地址,看不懂IP地址 ,工作在局域网内部。

 可以把交换机类比成班级里面的"快递收发员(代购跑腿的)":

  1. 交换机内部会维护一张「MAC地址‑端口映射表」(代购表);
  2. 收到数据帧后,读取帧里面的目的MAC;
  3. 如果映射表里存在这条记录,就单播转发到对应的端口;(如果有人要跑腿买零食并且写了姓名,就会将零食交给对方)
  4. 如果没有查到记录,则执行泛洪广播,向除接收端口以外所有端口转发这条帧;(如果没有则大声询问这是谁的)
  5. 交换机收到任意一个进来的数据帧时,就会读取帧里的源 MAC,更新 MAC‑端口映射表。

 交换机可以隔离冲突域,但是不能隔离广播域


2.3 ARP协议

ARP协议建立了主机IP地址和MAC地址的映射关系 .

作用就是通过目标主机的IP地址,查询得到它对应的MAC地址

工作流程:

  1. 当主机想要发送数据时,已经知道目标IP,但是不知道目标MAC;
  2. 会在局域网发送ARP广播请求报文询问这个IP对应的MAC地址
  3. 局域网内所有的主机收到请求,当IP匹配成功的主机会单播返回ARP应答,如果不匹配则丢弃广播;
  4. 请求方收到应答之后,把「IP‑MAC」映射关系保存到本地ARP缓存表,后续一段时间内无需再次广播查询。

 ARP只适用于同一个局域网内部 ;跨网段通信时,ARP获取到的是网关路由器的MAC地址,而不是远端主机MAC地址。


3 高频面试总结

1:MAC地址能不能跨局域网通信?MAC和IP地址的区别?

MAC地址是二层链路层地址,只能在当前局域网内生效,无法跨网段通信IP是三层网络层地址,负责端到端的远程寻址,可以跨多个局域网传输。数据包每经过一台路由器,二层源MAC与目的MAC就会被重新改写,但是三层源IP、目的IP全程保持不变。

2:简述交换机的自学习转发流程

交换机维护一张MAC‑端口映射表。收到帧时会先读取源MAC,更新映射表;再查看目的MAC,如果表中存在记录就单播转发;不存在就泛洪广播。

3:CRC校验检测出帧出错后,链路层如何处理?

以太网链路层检测出错误帧后,会直接将帧丢弃,不会进行重传,重传的可靠性会交给上层TCP协议负责。

4:ARP协议的工作过程,跨网段时ARP拿到的是谁的MAC?
ARP通过广播请求、单播应答的方式 由IP查询MAC 。跨网段通信时ARP获取到的是网关路由器的MAC地址。
[🔙 返回目录](#🔙 返回目录)


相关推荐
SimonKing20 分钟前
手机投屏到电脑,不用装任何 App,这个开源工具免费搞定:QtScrcpy
java·后端·程序员
zyf10441626 分钟前
暑期实践日志 Day44:梳理剪辑实践成果,进行学习总结
学习·计算机网络·剪辑·暑期实践·课题任务
ouynagda27 分钟前
Linux Socket 网络编程学习笔记
linux·网络·学习
学长毕业设计28 分钟前
基于SpringBoot的奶茶店服务管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
牛马也想出海29 分钟前
海外社媒代理IP:TikTok、IG等6大社媒平台防封号IP选型指南
运维·服务器·网络·新媒体运营
蛋先生DX32 分钟前
明明都是源码到CPU,各语言中间原理咋不是一个套路?
java·javascript·go
昌原的儿子LEO35 分钟前
【Linux网络编程】TCP套接字核心函数详解|三次握手|send/recv/listen/accept接口梳理
linux·网络·tcp/ip
我爱cope36 分钟前
【计算机网络 | 网络层12:SDN:控制平面与数据平面分离意味着什么?】
网络·学习·计算机网络·平面
萧瑟余晖37 分钟前
Java深入解析篇十三之Java日志API(JUL)详解
java·开发语言