数据链路层相关知识

正文:

1.概述

数据链路层是计算机网络体系结构中的第二层,负责实现数据在物理层上的传输。在数据链路层中,数据被组织成帧(frame),并且通过MAC地址来进行寻址,以确保数据包能够被正确地发送到目标主机。

数据链路层的主要功能包括帧的封装和解封装、数据传输的错误检测和校正、流量控制和访问控制等。通过数据链路层的工作,可以实现高效可靠的数据传输,保证网络通信的稳定性和顺畅性。

2.以太网帧格式

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理
层的内容。以太网帧格式是数据链路层中用于在网络上发送数据的一种标准格式。它定义了数据包的结构,包括了目标地址、源地址、数据段以及一些控制信息。

  1. 帧起始标记(Preamble):以太网帧的开始是一个7字节的前导码,用来同步接收方的时钟,并提供足够的时间让接收方准备好接收数据。

  2. 目的地址(Destination MAC Address):占6个字节,指明数据包要传送到的目标设备的MAC地址。

  3. 源地址(Source MAC Address):也占6个字节,指明数据包的发送者的MAC地址。

  4. 类型/长度(Type/Length):占2个字节,标识了数据部分的协议类型或者数据长度。当数值大于等于0x600时,表示该字段是类型字段,指示上层协议的类型。当数值小于等于0x5DC时,表示该字段是长度字段,指示数据字段的长度。

  5. 数据(Data):占46-1500个字节,包含了实际传输的数据。如果数据少于46个字节,则需要填充数据字段,使其达到46个字节的最小长度。

  6. 帧校验序列(Frame Check Sequence, FCS):占4个字节,用CRC校验算法计算的数据包的帧检验序列。接收方会用这个校验序列来验证数据包的完整性是否受到破坏。

  7. 帧结束标记(Inter-Frame Gap, IFS):占12个字节,用于表示帧的结束,同时提供足够的时间让网络设备准备好接收下一个帧。

3.MAC地址

MAC地址(Media Access Control Address)是在以太网网络中用来唯一标识网络设备的硬件地址,也被称为物理地址。它是一个48位的二进制地址,通常以十六进制表示,由6个字节组成,每个字节用冒号或连字符分隔。

MAC地址是在硬件层面上固定的,无法被修改。每个网络设备都有一个唯一的MAC地址,类似于每个设备的身份证号码,用来在以太网网络中进行唯一标识和通信。 

MAC与IP的区别:

  1. 层次结构:MAC地址是数据链路层(第二层)中使用的地址。它是在硬件层面上唯一标识网络设备的地址。IP地址是网络层(第三层)中使用的地址。它是逻辑地址,用于在全球互联网络上唯一标识设备以便进行通信。
  2. 标识范围:MAC地址是每个网络设备的全局唯一硬件地址,由设备的制造商固化在硬件中,无法在网络中被修改。IP地址是逻辑地址,标识网络中的主机或路由器。IP地址可以在网络中分配和修改,允许灵活管理设备之间的通信。
  3. 格式:MAC地址是48位的二进制地址,通常以十六进制表示,用它来在局域网中唯一标识网络设备。IPv4地址是32位地址,通常以点分十进制表示(如192.168.1.1),IPv6地址是128位地址,以冒号分隔(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。
  4. 作用:MAC地址用于数据链路层的信令和物理层的数据传输,帮助网络设备在局域网中进行直接通信。IP地址用于在网络层确定数据包的路由路径,帮助数据包在广域网中进行跨网络的传输。

MAC地址是硬件层面上固定的、局域网络中唯一标识设备的地址,用于局域网的数据链路层通信;而IP地址是逻辑的、在全球网络范围内唯一标识设备的地址,用于实现跨网络的数据包传输。

4.MTU

MTU(Maximum Transmission Unit)它指的是网络中能够一次传输的数据包的最大大小。MTU的大小限制了在网络中传输的数据包的大小,超过MTU大小的数据包需要被分片(在发送端分为多个较小的数据包)才能在网络中传输。

MTU大小: MTU大小通常是根据网络设备的传输介质和协议确定的。在以太网中,常见的MTU大小是1500字节,这是大多数以太网网络的默认MTU值。在其他网络类型中,MTU大小可能有所不同。

MTU的作用:

  1. 避免分片:通过设置合适的MTU值,可以减少或避免数据包在传输过程中的分片现象。分片是指当一个数据包大于网络的最大传输能力时,该数据包被拆分成更小的片段以便传输。

  2. 提高效率:如果MTU设置得过大,可能会导致频繁的分片和重组,从而降低网络传输效率。相反,如果MTU设置得过小,则会限制数据的有效载荷,导致更多的数据包传输,增加网络拥塞。

  3. 适应不同网络环境:不同的网络类型和设备可能有不同的MTU限制。设置合适的MTU可以确保数据包在不同网络环境中顺利传输。

Path MTU Discovery(PMTUD): 为了避免数据包分片和提高数据传输效率,网络中使用Path MTU Discovery(PMTUD)技术来动态确定网络路径上的最大MTU,并根据这个值来调整数据包的大小。PMTUD通过不断发送带有不同大小的数据包来探测路径上的最大MTU,以确保数据传输在不引发分片的情况下能够正常进行。

MTU是网络通信中一个重要的参数,控制了能够一次传输的数据包的最大大小,影响着网络通信的效率和性能。

5.ARP协议

ARP(Address Resolution Protocol)是一种用于在局域网中将IP地址映射到MAC地址的协议。在IPv4网络中,当一台设备需要与另一台设备通信时,需要知道目标设备的MAC地址,而ARP协议就是用来解析目标IP地址对应的MAC地址的。

ARP的工作原理:

  1. 设备A需要发送数据包到设备B,但只知道设备B的IP地址,不知道它的MAC地址。设备A将发送一个ARP请求广播包,询问整个局域网中谁拥有目标IP地址对应的MAC地址。
  2. 设备B接收到ARP请求后,会发送一个ARP响应包,包含自己的MAC地址。设备A收到响应包后,就会知道设备B的MAC地址,然后可以直接发送数据包到设备B。
  3. ARP请求和响应包都是在数据链路层(二层)进行广播的,以确保局域网中的所有设备都能接收到。一旦设备A缓存了设备B的IP地址和MAC地址的映射关系,它就可以直接使用该映射,无需再发送ARP请求。

ARP的工作流程:

  1. 发送方检查自己的ARP缓存,查找接收方的IP地址对应的MAC地址。
  2. 如果找不到,发送方在局域网内广播ARP请求。
  3. 接收方接收到ARP请求,并识别出请求中的IP地址与自己的IP地址匹配。
  4. 接收方发送ARP响应,提供自己的MAC地址。
  5. 发送方接收到ARP响应,更新ARP缓存,并使用新的MAC地址发送数据。

ARP缓存: 为了提高效率,设备会在本地维护一个ARP缓存,用于存储IP地址与MAC地址之间的映射关系。当设备需要发送数据包时,首先检查本地的ARP缓存,如果找到目标IP地址对应的MAC地址映射,则直接使用缓存中的映射,不需要再发送ARP请求。

ARP的局限性

  • 广播限制:ARP请求是广播的,这意味着它只能在同一局域网内工作,不能跨越路由器。
  • 安全性问题:ARP协议本身没有认证机制,容易受到ARP欺骗攻击,攻击者可以伪造ARP响应,导致网络流量被重定向。
  • 动态性:ARP缓存条目不是永久的,通常会在一定时间后过期,需要定期更新。

ARP是网络通信中一个基础但非常关键的协议,它使得设备能够在局域网内通过IP地址找到对应的MAC地址,从而实现数据的传输。

总结:

数据链路层是OSI模型中的第二层,负责在直接相连的两个节点之间传输数据。数据链路层通过定义数据帧格式、数据传输、MAC地址和碰撞检测等功能,实现了在直接相连的节点之间安全、可靠地传输数据的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2020 6.s081——Lab1:Xv6 and Unix utilities梦开始的地方

一任宫长骁瘦 台高冰泪难流 锦书送罢蓦回首 无余岁可偷 ——知否知否 完整代码见:6.s081/kernel at util SnowLegend-star/6.s081 (github.com) Lecture 01知识点总结 首先透彻理解Lecture01的知识很是重要 ①pidwait((int *) 0); “wait(int *status)”函数用于…

【Java数据结构】详解LinkedList与链表(二)

目录 1.❤️❤️前言~🥳🎉🎉🎉 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表,输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表,找…

Java 代码审计---反序列化

Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。 序列化在 Java 中是通过 java.io.Serializable 接口来…

C++候捷stl-视频笔记2

深度搜索list list是双向链表:底部实现是环状双向链表 list内部除了存data之外,还要存一个前向指针prev和一个后向指针next list的iterator,当迭代器的时候,是从一个节点走到下一个节点,是通过访问next指针实现的 主要…

C语言:深入了解(联合体和枚举)

目录 联合体 联合体的类型的声明 联合体的特点 相同成员的结构体和联合体对比 联合体大小的计算 联合体的使用举例 联合体的类型:判断联合体是大端还是小端 枚举类型 枚举类型声明 枚举类型的优点 枚举类型的使用 联合体 联合体的类型的声明 像结构体⼀…

(含笔试题)深度解析数据在内存中的存储

目录 本章重点 前言: 1.整型在内存中的存储 1.1原码、反码、补码 原码 反码 补码 2.大小端字节序介绍 什么是大小端字节序: 为什么会有大小端字节序: 3.浮点数存储规则 本章重点 1. 整形在内存中的存储:原码、反码…

刷机 iPhone 进入恢复模式

文章目录 第 1 步:确保你有一台电脑(Mac 或 PC)第 2 步:将 iPhone 关机第 3 步:将 iPhone 置于恢复模式第 4 步:使用 Mac 或 PC 恢复 iPhone需要更多协助? 本文转载自:如果你忘记了 …

【嵌入式硬件】DRV8874电机驱动

目录 1 芯片介绍 1.1 特性简介 1.2 引脚配置 1.3 最佳运行条件 2 详细说明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 独立半桥控制模式 2.2 电流感测和调节 2.2.1 IPROPI电流感测 2.2.2 IMODE电流调节 3.应用 3.1设计要求 3.2 设计…

逆天工具一键修复图片,视频去码。本地部署超详细!!

上一篇文章:逆天工具一键修复图片,视频去码。简直不要太好用!-CSDN博客 根据上一篇文章展示的效果,本文章主要讲如何部署本地github开源项目。博主走了无数弯路,最后精化下来的步骤,超级详细!&a…

统计信号处理基础 习题解答10-5

题目 通过令 并进行计算来重新推导MMSE估计量。提示:利用结果 解答 首先需要明确的是: 上式是关于观测值x 的函数 其次需要说明一下这个结果 和教材一样,我们用求期望,需要注意的是,在贝叶斯情况下,是个…

Amis源码 embed渲染方法解析(json结构渲染原理):

js sdk中的渲染函数embed使用方式如下: const amis amisRequire("amis/embed"); const amisScoped amis.embed( self.$refs["mnode"],amisJSON, {}, amisEnv); //env会有默认值,默认值与传来的参数进行合并({默认值…

【学习Day5】操作系统

✍🏻记录学习过程中的输出,坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞👍🏻收藏⭐评论✍🏻指点🙏 学习编辑文章的时间不太够用,先放思维导图,后续复习完善细节。

【每日刷题】Day53

【每日刷题】Day53 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1019. 链表中的下一个更大节点 - 力扣(LeetCode) 2. 116. 填充每个节点的下一…

mac多媒体影音库:Emby for Mac 中文版

Emby软件是一款功能强大的媒体服务器软件,旨在为用户提供丰富的多媒体体验。以下是关于Emby软件的详细介绍: 下载地址:https://www.macz.com/mac/7964.html?idOTI2NjQ5Jl8mMjcuMTg2LjE1LjE4Mg%3D%3D 主要功能 媒体管理:Emby允许用…

python编程:SQLite 管理图片数据库

在本博客中,我们将介绍如何使用 wxPython 和 sqlite3 模块构建一个 GUI 应用程序,该程序可以遍历指定文件夹中的所有图片,并将其信息存储到 SQLite 数据库中。 C:\pythoncode\new\InputImageOFFolderTOSqlite.py 项目简介 我们的目标是创建…

新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码

同城校园跑腿外卖配送平台源码,这套目前全网还没有人分享过,这个是开源的,所以没有任何问题了,这套源码非常吊,支持自定义diy 你可以设计你的页面,设计你自己的风格,支持多校园,独立…

Java基础入门day62

day62 AJAX 概念 AJAX: Asynchronous Javascript And XML AJAX是一种无需重新加载整个网页的情况下,能够更新部分网页的技术 AJAX是一种用于创建快速动态网页的技术 通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新 传统…

Jvm(二)新生代和老年代与GC回收

目录 新生代和老年代 新生代 MinorGC 老年代(Old Generation) MajorGC Minor GC、Major GC 和 Full GC 三个GC具体区别和使用场景 JVM GC及内存调优的参数 调优建议 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波,它还充满了无…

【教程】自监督 对比学习,代码,爽学一波

from: https://docs.lightly.ai/self-supervised-learning/examples/simclr.html

1114 全素日

你好哇&#xff0c;新的一天开始啦&#xff01; solution 取数值的不同部分&#xff0c;联想到借助string #include<iostream> #include<string> using namespace std; bool judge(string s){int n atoi(s.c_str());if(n 1 || n 0) return false;for(int i 2…