【计算机网络】数据链路层-MAC和ARP协议

文章目录

  • 1. 认识以太网
  • 2. MAC协议
    • MAC帧的格式
    • MAC地址和IP地址的区别
    • MTU
  • 3. 局域网通信原理
    • 碰撞检测和避免
  • 4. ARP协议
    • ARP数据报的格式
    • ARP缓存


1. 认识以太网

网络层解决的是跨网络点到点传输的问题,数据链路层解决的是同一网络中的通信。

数据链路层负责在同一局域网(同一链路)中两台设备的通信。 局域网的种类有很多,如:以太网、令牌环网。以太网是最常见的局域网技术,广泛用于家庭、企业和数据中心网络。

“以太网” 不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等。

2. MAC协议

数据链路层的MAC协议规定,同一链路中数据,以MAC帧的格式传输。 不同局域网类型的MAC协议不同,这里介绍的是以太网MAC协议。

MAC帧的格式

在这里插入图片描述

目的MAC地址和源MAC地址: 标识该数据帧的目的主机和源主机;

类型: 指的是封装上层数据的协议类型,有三种类型:IP, ARP, RARP,分别对应数字:0800, 0806, 8035。

CRC校验码: 判断该数据帧的正确性。

MAC地址和IP地址的区别

  • MAC地址用于标识同一链路相互连接的不同主机,在通信过程中描述路途上每一个区间的起点和终点。 MAC地址的长度为6字节48位,一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。MAC地址通常是唯一的,在网卡出厂时就设定了,不能修改。
  • IP地址用于标识网络中的不同主机,在通信中描述全过程的起点和终点。

MTU

MTU(Maximum Transmisson Unit)最大传输单元,指数据链路层中一个数据帧有效载荷的最大长度。

不同数据链路对于数据帧的长度限制不同,以太网MAC帧数据部分的长度规定最小是46字节,最大是1500字节。如果数据长度小于46字节,要求在数据部分后面填充额外的空白字节,以满足最小长度要求。最大是1500字节,这就是MTU。

为什么要设置MTU?

  • 提高网络传输的效率;
  • 降低碰撞概率,减少碰撞后重传的成本。大数据帧传输时间长,增加碰撞的风险,碰撞避免的成本很高。(关于数据碰撞,后面详谈)

数据帧长度过小也不合理,小数据帧传输速度快,时间短,碰撞检测可能在碰撞发生前触发,会导致碰撞检测失败。因此,为了在网络效率和碰撞检测之间取得平衡,通常设置帧数据部分长度范围在46~1500字节比较合理。

MTU对上层的影响:

MTU的限制,决定了上层不应该传递过大数据给数据链路层:

对于IP协议,采用分片与组织的策略,在我的另外一篇文章已详细介绍,详见:

对于TCP协议,不想让IP发生过多分片,因此引入了MSS,规定了TCP数据部分的最大长度。TCP在三次握手发送SYN的时候,会进行MSS协商(在首部变长的选项字段中携带MSS长度),取双方MSS最小值作为传输所用的MSS。

对于UDP协议,如果UDP单个报文的数据长度大于1472(MTU - IP报头长度 - UDP报头长度),就会被IP分成多个分片,提高丢包率(一片丢就相当于整个丢了)。因为UDP没有可靠性机制,丢包报文不会重传。

MSS与MTU的关系:

在这里插入图片描述

通常情况下:

MSS = MTU(1500byte) - IP报头长度(20byte) - TCP报头长度(20byte) = 1460byte


3. 局域网通信原理

  1. 局域网采用“广播”的策略进行数据通信,即在同一链路中,主机A向主机B发送数据,并不是直接向B转发,而是群发到同一链路的所有主机中,由接收主机辨认数据包是否是发给自己的。

  2. 在同一链路上,每台主机有一个MAC地址,用于标识了该主机在链路中的唯一性。 每个发出的数据帧都携带源MAC地址和目标MAC地址。当主机A向主机B发送消息时,同链路所有主机都收到这个消息,并在数据链路层查看消息的目标MAC地址是否为本主机MAC地址,不是则在MAC层将消息丢弃,是则向上交付。

在这里插入图片描述

碰撞检测和避免

如果多个主机同时向链路中发送数据,可能会发生数据碰撞。 在同一物理媒介如电缆、无线信道中发生光电信号的交叉碰撞,会导致数据的损坏。因此,数据链路层引入了碰撞检测与碰撞避免机制。

  • 碰撞检测

    数据链路层的碰撞检测机制,通俗理解:因为主机以广播的形式向同一链路的目标发送数据,所以发送方自己也能收到自己发出去的数据。碰撞检测就是在链路中收取自己发送的数据帧,通过CRC校验等方式,检测数据是否损坏。

  • 碰撞避免

    碰撞避免就是当检测到发生数据碰撞,发送方的数据链路层会随机等待一段时间,再尝试重传数据帧。这个等待时间是为了避免多个设备在同一时间重新发送数据,从而减少再次发生碰撞的可能性。因此,不仅TCP有重传机制,数据链路层也有,只不过机制比较简单。

另外的,同一链路中设备越多,数据碰撞的概率越高。因此数据链路层引入了 交换机(Switch) 以解决这个问题。

交换机是工作在数据链路层的设备,其主要作用是划分碰撞域,如下:

在这里插入图片描述

主机A-F处于同一个局域网,只不过这个局域网被交换机分成了左右两个区间。左右两边完全可以正常通信,只需要由交换机转发即可。交换机的主要作用是:

  1. 当主机A和主机B同时向链路中发送数据时,发生碰撞,此时交换机识别到数据碰撞,不会将碰撞产生的垃圾数据转发到右边,这样一来,右边的通信就不会受到左边碰撞的影响,大大降低了碰撞率。

  2. 当左边的主机A和主机B正常通信时,交换机检测到通信的数据与右边无关,也不会转发到右边,从而减少右边链路的载荷,降低碰撞率。


4. ARP协议

💭通信前,发送方通常只知道目标主机的IP地址和端口号,不知道同一局域网下目标设备的MAC地址,而在同一链路中通信必须清楚对端的MAC地址。因此,在查路由表得到下一跳的IP地址后,要先进行一个IP地址转MAC地址的过程,再向同一局域网中的下一跳主机发送消息。

ARP协议(Address Resolution Protocol)就是用于IP地址转换MAC地址。 ARP通俗来讲就是一个“询问”的过程,知道目标IP,在局域网中群发询问目标IP对应的MAC地址,与IP对应的目标主机会返回它的MAC地址。

这就像老师知道张三同学的学号,但不知道他的名字,要通过学号得知这位同学的名字,就在班级群里问“哪位同学的学号是XXX,你的名字是什么?”,其它同学对比自己的学号不匹配就不回答,张三同学比对后学号匹配,就会回答“老师,我是张三”。

ARP协议也是数据链路层协议,但在MAC协议之上。

ARP数据报的格式

ARP是MAC帧的一种类型(MAC帧报头的类型字段填为0806),只不过规定了MAC数据部分的字段格式。

在这里插入图片描述

各个字段解释:

  1. 硬件类型:指链路层网络类型,1表示以太网;
  2. 协议类型:指要转换的地址类型,0x0800表示IP地址;
  3. 硬件地址长度:物理地址长度,以太网MAC地址是6字节;
  4. 协议地址类型:要转换的地址长度,IP地址是4字节;
  5. op:op字段为1表示ARP请求,op字段为2表示ARP应答。

一次ARP的过程(主机A想要得知主机C的MAC地址):

在这里插入图片描述

  1. 主机A向主机C发送ARP请求(格式如下图),此时主机A并不知道主机C的MAC地址,只知道其IP地址,因此将目的MAC地址设为全1,目的IP设为ipC。(帧类型ARP的0806, op是1表示ARP请求)

在这里插入图片描述

  1. 主机A的ARP请求广播到局域网中,所有主机都会收到。

    • 对于其它非目标的主机,收到这个MAC数据帧后,发现MAC报头的类型字段为0806,得知该数据帧是ARP数据帧,便由MAC协议交付给上层的ARP协议。ARP协议解开报头,查看op字段,确定为ARP请求(这是固定过程,每个主机都可能会收到ARP请求或应答,必须先判断是请求还是应答,再作进一步处理)。然后判断目标IP是否为本机的IP地址,检测到不是,在APR层丢弃数据包。
    • 对于主机C,收到数据帧,判断是ARP请求,在ARP层判断目标IP为本机IP,则表示这个ARP请求想要获取本机的MAC地址。紧接着进行应答的构建
  2. 主机C构建ARP应答(格式如下图),然后广播到链路中
    在这里插入图片描述

  3. 主机A收到ARP数据帧,其它主机丢弃应答(这里MAC报头中的目标地址已经确定,主机通过判断MAC报头中的目标地址,决定是否在MAC层丢弃,而不用交付给ARP层)。主机A收到了一个发送给自己的ARP应答,提取源MAC地址macC和源IP地址ipC,得到了一组IP地址和MAC地址的映射关系。主机A终于得到了主机C的MAC地址,可以正常通信了!

细节:

  1. ARP层收到一个ARP数据帧,解开报头后,第一步必然是查看op字段。

    • op为1表示该帧为ARP请求,执行动作:判断目标IP是否为本机IP,是则表示该ARP请求想要获取本机的MAC地址,紧接着构建并发送应答;否则在APR层丢弃该请求。
    • op为2表示该帧为ARP应答,不用考虑是否丢弃,因为已经再MAC层完成,执行动作:提取源MAC地址和源IP地址,得到一组IP和MAC地址映射关系
  2. ARP请求的丢弃发生在ARP层,ARP应答的丢弃发生在MAC层。

ARP缓存

如果每次发送数据时,都要进行ARP映射MAC地址,不仅效率低,还会导致链路中存在大量的ARP数据帧,增加链路的负担,因此就有了ARP缓存。

每个主机都会维护一张ARP缓存表,用于存储历史建立的IP与MAC地址的映射关系。 数据链路层收到IP数据包后,根据目标IP地址,查看ARP缓存表,若表中存在与目标IP地址对应的映射关系,则直接打包MAC帧发往目标主机,否则进行ARP过程。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。

Linux下通过arp指令查看ARP缓存表。

在这里插入图片描述


ENDING…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Antd Procomponent 之 proForm - 高级表单

本文作者系360奇舞团前端开发工程师 ProForm 在原来的 Form 基础上增加一些语法糖和更多的布局设置,帮助我们快速的开发一个表单。同时添加一些默认行为,让我们的表单默认好用。分步表单,Modal 表单,Drawer 表单,查询表…

吴恩达《机器学习》4-6->4-7:正规方程

一、正规方程基本思想 正规方程是一种通过数学推导来求解线性回归参数的方法,它通过最小化代价函数来找到最优参数。 代价函数 J(θ) 用于度量模型预测值与实际值之间的误差,通常采用均方误差。 二、步骤 准备数据集,包括特征矩阵 X 和目标…

设计模式之访问者模式

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概5000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

利用QT画图像的直方图

1.什么是直方图 直方图是一种图形化展示数据频率分布的方式。它将样本数据分成一系列相邻的区间,统计每个区间内数据所占比例或数量,并用矩形条形图表现出来。直方图可以反映样本数据的分布情况,例如它们的集中趋势、对称性和离散程度等。 …

Java2 - 数据结构

5 数据类型 5.1 整数类型 在Java中,数据类型用于定义变量或表达式可以存储的数据的类型。Java的数据类型可分为两大类:基本数据类型和引用数据类型。 byte,字节 【1字节】表示范围:-128 ~ 127 即:-2^7 ~ 2^7 -1 sho…

基于Kinect 动捕XR直播解决方案 - 硬件篇

Kinect-V2 硬件设备 一、Kinect介绍 1、Kinect for Windows 的开发配置 Kinect V2 操作系统:Windows 10(必须) Windows Surface Windows Surface 2 开发环境:Visual Studio 2017 .NET Framework 4.5 (.NET Framework 4.5) 硬…

VEX —— Quaternion|Euler Angle

目录 一,四元数相关概念 四元数 欧拉角 常用四元数相关函数 相互转换 二,案例 案例:沿面中心翻转 案例:路径导弹 案例:RBD刚体还原过渡 一,四元数相关概念 四元数 在vex内四元数为(&am…

BigDecimal 类型的累加操作

BigDecimal 累加操作 .add操作

C语言:深入浅出qsort方法,编写自己的qsort完成冒泡排序

目录 什么是qsort? 函数原型 比较函数 compar 排序整型数组 排序结构体数组 根据成员字符排序 strcmp函数 根据成员整型排序 自定义qsort实现冒泡排序 qsort的实现原理 具体步骤 快速排序示例代码: 什么是qsort? qsort是 C …

geoserver发布同一字段的多值渲染

Geoserver之同一字段的多值渲染 有时候我们需要对一个shp的某一字段值中的不同值进行区分展示,但是一般的渲染都是按照统一图层展示的,因此为了更好的效果,我们选择使用uDig等工具处理。 文章目录 Geoserver之同一字段的多值渲染前言一共是分…

休眠和睡眠有哪些区别?如何让电脑一键休眠?

电脑中有休眠和睡眠,那么它们有什么区别呢?下面我们就通过本文来了解一下。 休眠和睡眠的区别 电脑在睡眠状态时,会切断内存之外的设备电源,电脑会进入睡眠状态,当再次唤醒电脑后,不会影响睡眠前保存好的工…

机器学习练习1

线性回归 数据集模型,第一列代表人口,第二列代表利润 此处的线性回归 与 常规的 y wx b 不同的是 将b换成了w的一部分 故需要在数据集x前面加个1, 求出b . 可以简化计算,只需要一个乘法就可以

网络安全入门必学内容

网络安全入门 必/学/内/容/ 随着时代的发展,经济、社会、生产、生活越来越依赖网络。而随着万物互联的物联网技术的兴起,线上线下已经打通,虚拟世界和现实世界的边界正变得模糊。这使得来自网络空间的攻击能够穿透虚拟世界的边界&#xff0…

vscode中 vue3+ts 项目的提示失效,volar插件失效问题解决方案

文章目录 前情提要bug回顾解决方案最后 前情提要 说起来很耻辱,从mac环境换到window环境,vscode的配置都是云端更新过来的,应该是一切正常才对,奇怪的是我的项目环境出现问题了,关于组件的ts和追踪都没有效果&#xff…

vscode设置pycharm中的项目路径和debug方法

真大佬在这 真大佬在这 必须给大佬star 命令行运行: export PYTHONPATH:pwd:/home/bennie/bennie/bennie_project/AI_Lab python main.py 当关闭此命令行时,临时路径会清除,可以将上述export的整条语句,加入~/.bashrc中 该命令中…

重磅发布 OpenAI 推出用户自定义版 ChatGPT

文章目录 重磅发布 OpenAI 推出用户自定义版 ChatGPT个人简介 重磅发布 OpenAI 推出用户自定义版 ChatGPT OpenAI 首届开发者大会 (OpenAI DevDay) 于北京时间 11 月 7 日凌晨 02:00 开始,大会上宣布了一系列平台更新。其中一个重要更新是用户可以创建他们自己的自定…

从零开始的C++(十四)

继承: 作用:减少重复代码,简化程序。 用法: class b:public a {//...b中成员 } 在如上代码中,b类以public的方式继承了a类。规定a类是父类、基类,b类是子类、派生类。 关于继承方式&#xf…

Qt::WindowFlags

Qt::WindowFlags 文章目录 Qt::WindowFlags摘要窗口&部件Qt::WindowFlags&WindowType窗口类型窗口提示 关键字: Qt、 Qt::WindowFlags、 Qt::WindowType、 关键字4、 关键字5 摘要 今天在公司解决自己的Bugs的时候,发现一个以前可以用的功…

在Kotlin中设置User-Agent以模拟搜索引擎爬虫

前言 随着双十一电商活动的临近,电商平台成为了狂欢的中心。对于商家和消费者来说,了解市场趋势和竞争对手的信息至关重要。在这个数字时代,爬虫技术成为了获取电商数据的有力工具之一。本文将以亚马逊为例,介绍如何使用Kotlin编…

软件测试面试题【2023最新合集】

收集了各大公司的面试经验,现整理出来,希望能给正在找工作的志同道合的小伙伴一些指引,本文会持续更新的哦。 1、 CPU 和 GPU的区别 一个是通用计算,一个是专用计算。 CPU主要负责操作系统和应用程序,GPU主要负责跟…