【Hello Network】数据链路层协议

news2025/1/10 11:36:44

本篇博客简介:介绍数据链路层的各协议

数据链路层

  • 以太网协议
    • 认识以太网协议
    • 以太网帧格式
    • 局域网通信原理再理解
  • MTU
    • 认识MTU
    • MTU对IP协议的影响
    • MTU对UDP协议的影响
    • MTU对于TCP协议的影响
    • 如何查看ip地址 mac地址 以及mtu
  • ARP协议
    • ARP协议的作用
    • ARP协议在哪里
    • ARP的工作过程
    • ARP数据格式
    • 模拟ARP协议场景
      • arp请求
      • arp响应
      • arp缓存表
      • 问题总结
  • 总结

以太网协议

我们在上一章节学习了网络层的IP协议 现在我们通过IP协议已经确定了数据传输的路线

在这里插入图片描述

但是确定路线之后还有一个现实的问题 数据帧接下来的路要一步一步走

  • 我们在数据链路层中 一般习惯性把数据叫做数据帧和mac帧

而这一步一步走的过程 就是数据链路层所做的工作

  1. 决定将数据交付给下个路由器的时候 下个路由器一定和我在同一个局域网中

在这里插入图片描述

就比如说上图中的红圈 每个红圈就是一次数据交付 每一次数据交付都是在一个局域网中完成的

也就是说 每一跳的本质都是子网转发

从宏观上理解我们上面说的这句话 我们的网络本质上就是由一个个子网构成的

我们只要能够解决数据在一个子网中的传输问题 那么就解决了在所有子网中的传输问题

所以说 我们数据链路层解决的问题 也就是数据在一个子网中的转发问题

认识以太网协议

在网络基础一 这篇博客中我们讲解了网络的起源

网络诞生之后几乎每个实验室都会布置自己的局域网 自然也会有自己的局域网通信标准

而 “以太网” 就是其中的一种协议标准

  • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

以太网帧格式

我们在网络中学习一个协议的时候一定要回答的问题有两个

  • 如何解包 即如何分离报头和有效载荷
  • 如何分用 即如何交付给上层协议

当然数据链路层的协议也不例外

以太网帧格式如下

在这里插入图片描述

下面我们依次解释下上面的各项数据

  • 数据 : 实际上就是IP报文 大小为46~1500字节
  • 目的地址和源地址: mac地址 由网卡决定 能够唯一标识数据链路层中两个相邻的节点
  • 类型: 协议类型 决定了要交付给上层的什么协议
  • CRC: 校验用

为什么数据链路层不直接用IP地址而使用mac地址来标识

理论上 我们是可以使用IP地址来标识每台设备的 这在技术上是可行的

但是如果我们这么做了 那么数据链路层就和网络层高度耦合了 如果说网络层要改变 那么数据链路层也一定要跟着改变

综上所述 为了解耦 我们这么设计了

如何解包和封装

因为我们以太网帧格式的报文中 目的地址 源地址 类型 CRC都是定长字段 所以说我们直接按照设定的长度切分 就能很轻易的得到报头和有效载荷了

如何交付给上层协议

我们通过报文中的协议类型来决定交付给上层的哪种协议

  • 0800 IP协议
  • 0806 ARP请求
  • 8035 RAPP请求

局域网通信原理再理解

关于局域网通信原理的前置解释在我的这篇博客中

网络基础一

下面是我们根据刚刚学习的以太网协议做出来的一个更加具体的解释

我们假设 一台局域网中有着下面六台主机 每台主机的编号如下

他们的mac地址依次为 m1 m2 … … m6

在这里插入图片描述
那么 假设现在我们h1主机要给h6主机发送一个消息 它的报文就应该是这样子

在这里插入图片描述

而根据我们网络基础一博客中的局域网的通信原理 这个报文会被广播到整个局域网当中

每台主机会对比该报文中的 目的地址 和自己的mac地址是否匹配 如果不匹配就丢弃

当h6主机拿到了该报文之后 他就会对于该报文进行解包

在这里插入图片描述

之后将有效载荷根据协议类型交付给网络层协议

数据碰撞

回到我们教室的例子中 教室是一个公共资源 所以说大家都可以使用 那么在我向张三说话的时候李四有没有可能也在说话呢?

答案当然是有可能的 如果大家的声音都很大的话那么我们就听不清别人发送给我们的信息了 这就叫做数据碰撞

但是消息不能因为数据碰撞就不发了啊 所以说每一台主机都必须要有数据碰撞算法 当检测到数据碰撞的时候等一段时间再发送(每台主机的等待时间不一样)

如何判断发送出去的数据是否发生了碰撞?

因为发送到局域网当中的数据是所有主机都能够收到的 因此当一个主机将数据发送出去后 该主机本身也是能够收到这个数据的 当该主机收到该数据后就可以将其与之前发送出去的数据进行对比 如果发现收到的数据与之前发送出去的数据不相同 则说明在发送过程中发生了碰撞

也就是说,主机实际是能够通过某种方式 知道曾经发送出去的数据是否发生了碰撞的

如果我们拿操作系统的理解去理解网络的话 实际上网络(局域网)就是一个临界资源 它是要保证互斥的

局域网越大越好还是越少越好

越小越好 因为局域网越大 发生数据碰撞的可能性就越大

局域网中交换机的作用

在这里插入图片描述
交换机的一个最大作用就是划分碰撞域

如何理解上面这句话呢 就比如说 h1主机想要给 h2 主机发送一个消息 此时我们的交换机就发现 h1 h2主机在同一侧 此时它就不让 h1 发送的数据广播到另外一侧 也就减轻了另外一侧的通信压力

如何攻击网络

既然上面我们知道局域网是互斥的且没有同步机制攻击的思路就很简单了 我们只要解除计算机的数据碰撞算法 让一台计算机不停的网局域网中发送垃圾信息那么所有的计算机就都不能通信了

MTU

认识MTU

MTU相当于发快递时对包裹尺寸的限制 这个限制是不同的数据链路对应的物理层产生的限制

  • 以太网帧中的数据长度规定最小46字节 最大1500字节 ARP数据包的长度不够46字节 要在后面补填充位
  • 最大值1500称为以太网的最大传输单元(MTU) 不同的网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上 数据包长度大于拨号链路的MTU了 则需要对数据包进行分片(fragmentation)
  • 不同的数据链路层标准的MTU是不同的

MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包

  • 将较大的IP包分成多个小包 并给每个小包打上标签
  • 每个小包IP协议头的 16位标识(id) 都是相同的
  • 每个小包的IP协议头的3位标志字段中 第2位置为0 表示允许分片 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0)
  • 到达对端时再将这些小包, 会按顺序重组 拼装到一起返回给传输层
  • 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败 但是IP层不会负责重新传输数据

MTU对UDP协议的影响

  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报
  • 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.

MTU对于TCP协议的影响

让我们再回顾一下TCP协议:

  • TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);
  • TCP在建立连接的过程中, 通信双方会进行MSS协商
  • 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  • 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2)

如何查看ip地址 mac地址 以及mtu

我们使用ifconfig指令即可查询

在这里插入图片描述

ARP协议

ARP协议,全称“Address Resolution Protocol”,中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)

ARP协议的作用

我们假设 一台局域网中有着下面六台主机 每台主机的编号如下

他们的mac地址依次为 m1 m2 … … m6

在这里插入图片描述
此时我们的h1主机收到了前面一台主机的报文 该报文中有着源ip和目的ip

通过网络层路由的确认 我们确定 我们要将该数据交给此局域网中的h4主机

但是目前我们只知道h4主机的ip地址 并不知道它的mac地址是多少

所以说我们就需要一个协议来获取目标主机的mac地址 而这个协议就是arp协议

ARP协议在哪里

我们开始学网络就知道了 网络是分层的

但是细分到每一层中 还可以再继续分层

就拿数据链路层举例 它其中不止有一个协议 而ARP协议就在以太网协议的上层

在这里插入图片描述

所以说 ARP协议 在网络中的数据链路层 并且在以太网协议的上方(我们可以在以太网协议的报头类型中发现这一点)

ARP的工作过程

假设现在我们在一个教室里面 而我是一位老师

此时教室外面有个人说要找一位身份证号为 123456 的同学 但是作为一个老师 我只知道学生的名字 不知道学生的身份证号

此时我就会在教室里面说一句 有没有身份证号为 123456 的同学

这位同学听到了之后就会回应我

此时我就知道了身份证号为 123456 的同学是谁了

对应到计算机局域网通信中

在这里插入图片描述

主机 h1 想要给主机 h6 发消息 但是它只知道主机 h6 的ip地址

此时它会向整个局域网发送一个广播 问询该ip地址对应的mac地址是多少

而主机h6收到之后就会回复 h1 自己的mac地址

这就是ARP协议的工作过程

ARP数据格式

在这里插入图片描述

下面是各个字段的解释

  • 硬件类型指链路层网络类型 1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节 所以说填6
  • 协议地址长度对于和IP地址为4字节 所以说填4
  • 发送端以太网地址
  • 接收端以太网地址 如果我们不知道就填全1
  • 目的IP地址
  • PAD 因为MAC协议要求数据最低为46字节 所以使用PAD字段填充

对比ARP的数据格式 我们不难发现 它实际上底层使用的就是MAC帧

在这里插入图片描述

模拟ARP协议场景

arp请求

在上面得学习中我们知道了 arp协议的下一层是以太网协议

所以说我们将arp协议封装完之后就会传给下层的以太网协议

大概格式如下

在这里插入图片描述

交付到我们额度以太网协议之后由于我们不知道以太网目的地址是多少 所以说在报文中的以太网地址这一栏填写全1 标识广播该数据

在这里插入图片描述

在广播该数据之后 整个局域网中的主机都会接收到该消息

但是 由于这些主机并不知道该数据要交付给哪台主机(有可能是自己) 所以说它们都会接收该报文 并且解包分用

在解包之后这些主机会发现类型中填写着0806 也就是ARP请求/应答 所以说会交付给上层的ARP协议(当然还是在数据链路层)

之后ARP协议会解析报文 首先看op字段 确定这是个ARP请求报文 之后看目的IP地址 如果是自己则留下该报文并开始构建响应报文 如果不是则丢弃

在广播arp请求之后 所有的主机都会接收请求嘛?

是的 所有的主机都会接收请求 因为arp协议的底层是以太网协议 而在以太网协议报文中 并没有注明要接收主机的mac地址 所以说大家都会接收并解包查看是不是发给自己的

报文丢弃发生在哪一层

报文丢弃发生在arp协议层

arp响应

在主机接收到arp请求之后便会构建响应 在响应中会填写自己的mac地址和对应主机的mac地址

也就是说和请求不同的是 响应报文的目的地址一栏是填写明确的

在广播之后 对应主机则会收到该报文并且解包分用 其他主机则会直接丢弃

在广播arp请求之后 所有的主机都会接收请求嘛?

不是 因为在报文中明确规定了目的mac地址 所以说主机看到目的mac地址不是自己后便会丢弃报文

报文丢弃发生在哪一层

以太网协议

arp缓存表

在经历一次arp请求-响应之后 操作系统会构建一个arp缓存表

我们在Linux操作系统下可以使用arp -a指令查看该表

在这里插入图片描述

问题总结

是不是每一次数据发送都要经过arp协议

不是 因为我们有arp缓存表 我们可以直接通过缓存表找到对应ip的mac地址

什么时候需要使用arp协议

当我们知道主机的ip地址 缺不知道主机的mac地址时 我们可以使用arp协议

为什么我们不直接用ip通信 一定要mac帧

从技术上来讲 我们是可以直接通过ip地址来进行通信的

但是实际上 如果使用了ip地址进行通信 那么数据链路层和网络层就高度耦合了

所以说为了解耦 我们特意使用mac地址进行通信

RARP协议是什么

RARP协议是通过mac地址获取IP地址的一种协议

总结

在这里插入图片描述

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

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

相关文章

跨境电商系统开发:成就全球贸易新时代

跨境电商系统开发简介 随着全球贸易的迅猛发展,跨境电商成为了推动贸易全球化的重要方式。跨境电商系统的开发在这一进程中扮演了重要角色,它为企业提供了全球贸易的便利和机遇。 1. 跨境电商系统的定义与功能 跨境电商系统是指为实现企业的跨区域贸易而…

2023年05月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中&#xff0c;判断是否存在某两个元素之和为k。 输入 第一行输入序列的长度n和k&#xff0c;用空格分开。 第二行输入序列中的n个整数&#xff0c;用空格分开。 输出 如果存在某两个元素的和为k&…

更换阿里云的yum源

更换阿里云的yum源 yum源存储的位置在&#xff1a; etc/yum.repos.d记住这个名字 CentOS-Base.repo对它进行备份&#xff0c;防止下载的yum源有问题 mv CentOS-Base.repo Back_up然后找到阿里云的yum源 如果没有wget 可以使用yum -y install wget 下载 wget http://mirrors…

数据分析经验总结-基础工具篇

一&#xff1a;Excel操作相关&#xff1a; 1.方便实用&#xff0c;但最大104W行&#xff0c;纯手工&#xff0c;无法沉淀数据处理流程&#xff0c;多表链接慢&#xff1b;不能为主流工具&#xff1b; 2.相关公式&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.c…

西门子SCALANCE W744-1PRO 客户端配置

. 安装西门子无线搜索软件PST。 无线SCALANCE W788-1PRO参数设置。 打开PST软件&#xff1a;选择Settings->Network Adapter->2本地连接 输入该无线设置的IP地址&#xff0c;进入网络访问界面。输入密码&#xff1a;admin&#xff0c;点击Log on进入。 填写本无线的SSI…

【探索C++】string类:更强大的字符串处理

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

在上一篇文章讲述zuul的时候&#xff0c;已经提到过&#xff0c;使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。 一、简介 在分布式系统中&#xff0c;由于服务数量巨多&#xff0c;为了方便服务配置文件统一管理&#xff0c;实时更新&#xff0c;所以需…

Linux网络编程1(网络基础定义)

网络早已成为我们日常生活的一部分&#xff0c;经常使用互联网的人很难长时间内离开互联网。你是否好奇你的电脑仅仅插上一根网线&#xff0c;你发给朋友的聊天信息就能准确无误的到达朋友的手机或者电脑上&#xff0c;你是否好奇为何你仅仅在浏览器输入一个网址&#xff0c;点…

动态不确定性的动态S过程(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 7 Function callers标签页介绍

不知不觉这个code-mapping专题已经写了6篇文章了,今天是我们这个专题的最后一篇文章了介绍Function callers 这个其实很简单,以前的文章里也有提到CS接口实现两个SWC之间的CS调用,我们在从Code-mapping的角度在说下 首先还是看下模型 我们还记得在simulink里我们用function…

选择排序:用C语言打造高效的排序算法

本篇博客会讲解如何使用C语言实现选择排序。 下面我来画图讲解选择排序的思路。 假设有一个数组&#xff0c;其初始状态如下&#xff0c;我们想把这个数组排成升序。 首先我们标明范围&#xff0c;即[begin, end]&#xff0c;一开始begin(b)和end(e)分别表示数组的第一个位置…

【黑马头条之热点文章kafkaStream】

本笔记内容为黑马头条项目的热点文章-实时计算部分 目录 一、实时流式计算 1、概念 2、应用场景 3、技术方案选型 二、Kafka Stream 1、概述 2、Kafka Streams的关键概念 3、KStream 4、Kafka Stream入门案例编写 5、SpringBoot集成Kafka Stream 三、app端热点文章…

验证码识别DLL ,滑块识别SDK,OCR图片转文字,机器视觉找物品

验证码识别DLL ,滑块识别SDK 你们用过哪些OCR提取文字&#xff0c;识图DLL&#xff0c;比如Opencv,Labview机器视觉找物品之类&#xff1f;

数据库第十五课-------------非关系型数据库----------Redis

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

第三方软件测试都有哪些?

第三方软件测试 第三方软件测试是一种软件测试活动&#xff0c;旨在确保软件的质量、功能、性能和安全性等方面符合预期要求。 一、以下是一些常见的第三方软件测试类型&#xff1a; 兼容性测试&#xff1a;测试软件在不同操作系统、浏览器、数据库等环境下的兼容性。 功能测…

计费时间与非计费时间:工时表如何帮助你平衡两者?

正确分配时间是企业管理员工的必要条件&#xff0c;这意味着了解并了解如何管理计费时间和非计费时间。更重要的是&#xff0c;需要能够在两者之间找到适当的平衡&#xff0c;这样才能最大限度地提高生产力、消除业务中的低效率并提高利润。 什么是计费时间和非计费时间&#x…

Python“牵手”天眼查、企查查、启信宝企业数据API接口运用场景及功能介绍

天眼查企业信用查询app是一款企业数据信息查询软件&#xff0c;专注服务于个人与企业信息查询,是人人都在用的商业安全工具。本软件整合了国内所有企业数据信息&#xff0c;用户可以使用这款软件查询企业单位相关信息&#xff0c;只要在线输入企业名称&#xff0c;就可以为您搜…

网络互联与互联网 - TCP 协议详解

文章目录 1 概述2 TCP 传输控制协议2.1 报文格式2.2 三次握手&#xff0c;建立连接2.3 四次挥手&#xff0c;释放连接 3 扩展3.1 实验演示3.2 网工软考 1 概述 在 TCP/IP 协议簇 中有两个传输协议 TCP&#xff1a;Transmission Control Protocol&#xff0c;传输控制协议&…

每日后端面试5题 第八天

1.UDP和TCP协议的区别 1.UDP无连接&#xff0c;速度快&#xff0c;安全性低&#xff0c;适合高速传输、实时广播通信等。 2.TCP面向连接&#xff0c;速度慢&#xff0c;安全性高&#xff0c;适合传输质量要求高、大文件等的传输&#xff0c;比如邮件发送等。 &#xff08;还…