Linux网络 | 进入数据链路层,学习相关协议与概念

        前言:本节内容进入博主讲解的网络层级中的最后一层:数据链路层。 首先博主还是会线代友友们认识一下数据链路层的报文。 然后会带大家重新理解一些概念,比如局域网交换机等等。然后就是ARP协议。 讲完这些, 本节任务就算结束。 那么下面废话不多说,开始我们的学习吧!

        ps:建议友友们先学习上三层在学习本节内容哦! 

目录

认识报文

局域网

局域网通信原理 

如何看待局域网

交换机

MSS和MTU

ARP协议

ARP原理 

谈ARP报头

模拟一次过程 

ARP周边问题 


认识报文

        首先, 数据链路层解决的是:直接相连的主机之间,进行数据交付的问题。  

 

        接下来这里有两个问题:

        1、Mac帧如何做到解包和封装。 2、如何做到分用 

        对于第一个问题,我们mac帧解包采用的是定长报文。所以当我们收到报文时,根据定长的报文将报头和有效载荷进行分离。

        对于第二个何题,如做分用就是根报文里面的一个字段叫做类型,这个类型就是记录了报文的类型,如果是0800,就是数,如果时0806,那么就是ARP请求,如果是8035,那么就是RARP请求。

局域网

局域网通信原理 

 

        每一台主机H1、H2等等都有它的Mac地址Mac1、Mac2、Mac3.....Mac7。

        我们之前说过,就此如老师问小王你为什么没交作业,其实教室里面的人都听到了,只是大部分的人一听目的地址是小王,说明不关自己的事情,就直接把老师说的报文丢弃了。只有小王收到报文后,目的地址是小王,自己也是小王,那么就知道是发给自己的。然后就拿着报文向上交付。所以,局域网通信的过程,其实是有很多吃瓜群众的。

        就比如上面从Mac1发向Mac7的报文。其实Mac1要向局域网内的每一台主机都发送一份这个报文(数据)。但是只有Mac7收到后不会将报文丢弃。

        但是这里就有了一个问题,如果一个局域网内的两个主机都发送数据,假如H1和H3发送数据。那么在底层当中,两台主机发送的数据就一定会发生数据碰撞。并目两台主机能够识别碰撞的信息。检测到了后,就实行碰撞避免算法来保证任何时刻只有一台主句在局域网中发送。

        并且,局域网中,主机数量越务,发生碰撞的概率太大,这也就是为什么我们在人多的地方有时候网会卡顿,因为发生数据碰撞概率大,一旦发生数据碰撞,那么就要实行 碰撞避免算法,就要等一等。

如何看待局域网

         我们可以把局域网看成多台主机所对应的临界资源。

         A主机发送数据,数据从上向下进行交付。在网络层先做决策。当我们做完决策,我们发现我们就是要发给中间的某一个路由器,比如说发给路由器R。这个数据发给路由R的时候,一定是数据链路层先收到。然后去掉CRC和报头,再由数据链路层向上交付给网络层。然后网络层就得到了一个带有IP报头的报文。 然后如果又要将这个数据发向别的路由器。那么就要将IP报文重新向下交付。所以,这个整体的过程就是一个解包然后重新封包的过程。

 

交换机

        随着局域网的主机增多,我们会诞生一种新的网络设备。这种设备叫做交换机。这种交换机的设备是工作在数据链路层的。交换机能够识别到数据碰撞,不会影响另一边。所以,假如我们的左边发生了数据碰撞了,那么我们的右边的数据正常转发没有问题。

        一般情况下,就是交换机左侧的报文不会发送到右侧,就能减少右侧的报文数量。就不容易发生数据碰撞。所以,综上,交换机有一个特点:划分碰撞域,减少局域网碰撞。

MSS和MTU

        正因为数据顿最多字节就是1500, 那么就倒逼着网络层最多发送1500字节的数据,网络层就要分片。 又因为分片不太好, 所以就要尽可能减少分片。

        所以如何减少分片呢? 就是规定TCP最多发送多少个字节!那么发送多少, 首先数据最多1500,说明IP报文最多能有1500个字节。然后要知道TCP发送过来的报文是在IP报文的有效载荷部分。IP报头20字节,那么TCP报头加有效载荷就不能超过1480个字节。 TCP的报头加有效载荷是哪里来的? TCP内部有一个流式缓冲区。 倒时候我们就是从流式缓冲区中拿数据。拿多少? TCP的报头加有效载荷为1480,那么有效载荷最多1460。 所以拿1460个字节最多。这个1460就是我们的MSS。这就是为什么当中我们的滑动窗口中要一段一段的滑动。

        上面的这个数据帧对多就是1500,这个1500,就是MTU。

ARP协议

        我们在学习IP的时候其实就已经知道了,所谓了数据发送到目标网络,本质就是通过无数个连续的子网实现的。我们也学过了,其实我们发送到报文在子网中进行跳跃的时候跳到一个路由器上面就要先解包向上交付到网络层。然后检查dst和src。如果不是的话,再封包向下交付到数据链路层,然后进行跳转。就是下面这个过程:

         问题是,如果我们的路由器向上交付后,在网络层发现dst IP就是在自己的局域网中。那么路由器就要重新封装mac顿交给目标主机了。

        可是,路由器怎么知道我们的目标主机的mac地址的呢?所以,此时在局域网当中,还要有一种协议:ARP(工作在数据链路层,局域网当中)  。ARP协议的作用是,在局域网中,将目标主机的IP地址,转化为mac地址。

        下面是一种局域网

        下面是一个IP报文,从A发来的,目的主机是B。

 

        如何将目标主机内的IP地址转化为mac地址呢?

ARP原理 

        加入上面是主机A和主机B的IP和MAC地址。 如果是主机A想要向主机B发送数据。开始主机A是先进行广播。就是广播说我想要与IP地址170.20.1.2进行通信,我的IP地址是170.20.1.1,MACA。IP地址为170.20.1.2的主机,MAC地址是多少?这个广播就是一次ARP请求。

        然后主机B就收到了这个ARP请求。然后就返回一个ARP响应包: 170.20.1.2的MAC地址是XXX。

谈ARP报头

        下面是ARP报头以及其中的各个字段: 

  •         硬件类型指的是网络类型。这个固定写法为1,为以太网。
  •         协议类型:指要转化的地址类型, 0x0800为IP地址。
  •         硬件地址长度对于以太网地址长度是6
  •         协议地址长度对于IP地址为4字节
  •         OP字段为1,表示ARP请求。OP字段为2表示ARP应答
  •         发送端和目的就是我们的路由器和目标主机。 

模拟一次过程 

         此时入口路由收到了一个报文:

 

        因为我们的中转路由要将报文发给主机B。但是他只知道主机B的IP地址,不知道MAC地址,那么怎么办呢。所以中转路由就要发起ARP请求了。 ARP请求报文格式如下。先不填写Mac帧:

        怎么填这个报文呢?

  •         硬件类型填1,表示以太网。
  •         协议类型是IP地址转化为MAC地址。所以填0800
  •         硬件长度就是6,协议地址长度就是4。
  •         然后OP字段是1。
  •         发送端的以太网地址是谁呢? 就是MACR。
  •         发送端的IP地址就是IPR。
  •         目的以太网地址不知道,所以就是全F。
  •         目的IP就是IP B。

         然后添加Mac帧

        添加好MAC顺之后就发送向局域网了,然后局域网当中的每一合主机都受到了这个报文、所以每合主机都要处理,如果不是B主机。那么就是收到这个报文解包并处理。先进行MAC的解包。然后发现报头的目的以太网地是全F,所以A就要处理2这个报文,然后又看帧类型,是0806,说明就是ARP请求,所以这个主机就要把数据帧向上交付给上层,也就是ARP软件层。然后ARP软件层就查看目的IP地址,是IP B,不是自己。就把这个报文丢弃了。

        但是这里有一个问题,任何一个主机,既可以收到ARP清求,也可以收到ARP应答。我怎么知道我这个收到的应答就是我刚刚发过去的请求的应答呢。所以,就要先看一下OP。如果OP是1就是个请求。如果是2就是应答。

        如果是主机B,主机B收到后发现就是发给自己的。那么就要应答了。应答的时候,OP字段就不能是1了, OP要变成2。发送方和目的也要调换一下了。

        然后就把应答报文发到以太网中。路由就发现这个报文是发给我的。然后就能拿到主机B的MAC地址了。这里要注意的是,在ARP的过程中,收到的任何ARP报文,都是先看OP!!!OP决定了什么呢??OP决定了ARP的类型: 请求或者应答。如果是请求,我们看的是目的MAC地址和目的IP。如果是应答,我们看的是发送端的MAC地址和发送端的IP。看看这两个是否相等。

ARP周边问题 

        arp,主机的Mac地址和IP地址都是数据,会被主机缓存起来 (临时缓存)可以使用arp-a查看: 

1、arp不是每次都要做的,因为它已经被缓存了。 arp只有在缓存失效的时候,才会进行.

2、我可以通过我的IP和子网掩码,得到我的网络号,然后拼接IP地址, ping所有的主机。得到所有主机的IP和mac。

3 、如果我收到多次同样的arp应答,我会以最新的为准。这就导致了一个问题——基于ARP的称为中间人方式。 如下:

        上面这种中间主机定向的向目标主机发送大量的arp,构建出虚假的IP地址和Mac地所对应的映射关系。以后所有的报文都会转发给这个主机。这种技术,叫做arp欺骗。

        如果以后,中间主机不再丢弃了,而是将数据发给路由器。以后路由器返回数据也会返回给中间主机。然后由中间主机发给原本的主机。以后,原本主机和路由器都不知道中间主机的存在,这台中间主机就成功地成为了一台局域网当中的中间人机器。 这种方式,叫做基于arp的称为中间人的方式

 ——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!    

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

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

相关文章

Python 科学计算

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

18.[前端开发]Day18-王者荣耀项目实战(一)

01-06 项目实战 1 代码规范 2 CSS编写顺序 3 组件化开发思想 组件化开发思路 项目整体思路 – 各个击破 07_(掌握)王者荣耀-top-整体布局完成 完整代码 01_page_top1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8…

Java 大视界 -- Java 大数据在智能医疗影像诊断中的应用(72)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…

知识管理平台在提升组织智慧与执行力方面的关键作用探讨

内容概要 知识管理平台是现代组织在日益激烈的竞争环境中提升自身智慧和执行力的重要工具。其基本概念在于通过系统化的方式收集、整理和共享知识资源&#xff0c;确保组织内部的信息流畅和决策信息的及时性。这不仅强化了团队成员之间的沟通与协作&#xff0c;还促进了对复杂…

STM32F103ZET6完整技术点(持续更新~)

①STM32②F③103④Z⑤E⑥T⑦6简介&#xff1a; ①基于ARM核心的32位微控制器&#xff0c;②通用类型&#xff0c;③增强型&#xff0c;④引脚数目144个 ⑤闪存存储器容量&#xff1a;512K字节&#xff0c;⑥封装:LQFP&#xff0c;⑦温度范围&#xff1a;工业级温度范围&#xf…

交叉验证、精确率、召回率

1. 交叉验证 交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证&#xff0c;顾名思义&#xff0c;就是重复的使用数据&#xff0c;把得到的样本数据进行切分&#xff0c;组合为不同的训练集和测试集&#xff0c;用训练集来训练模型&#xff0c;用测试集来评估…

sql表的增删改、替换

一、增加 1、向原表的字段中插入多条记录的方法 # mysql中常用的三种插入数据的语句: # insert into表示插入数据&#xff0c;数据库会检查主键&#xff0c;如果出现重复会报错&#xff1b; # replace into表示插入替换数据&#xff0c;需求表中有PrimaryKey&#xff0c; # 或…

执行策略更改

执行策略三种模式&#xff1a; Restricted&#xff1a;不允许运行任何脚本&#xff08;这是默认设置&#xff09;。RemoteSigned&#xff1a;允许本地脚本运行&#xff0c;但从互联网下载的脚本需要有效的签名才能运行。Unrestricted&#xff1a;允许所有脚本运行&#xff0c;…

如何创建折叠式Title

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容&#xff0c;本章回中将介绍SliverAppBar组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似&#xff0c;它们的…

[Proteus仿真]基于51单片机的智能温控系统

[Proteus仿真]基于51单片机的智能温控系统 基于51单片机的智能温控系统&#xff1a;DS18B20精准测温LCD1602双屏显示三键设置上下限声光报警&#xff0c;支持温度校准、抗干扰设计、阈值记忆。 一.仿真原理图 ​​ 二.模块介绍 温度采集模块&#xff08;DS18B20&#xff0…

RAG 与历史信息相结合

初始化模型 # Step 4. 初始化模型, 该行初始化与 智谱 的 GLM - 4 模型进行连接&#xff0c;将其设置为处理和生成响应。 chat ChatZhipuAI(model"glm-4",temperature0.8, ) 此提示告诉模型接收聊天历史记录和用户的最新问题&#xff0c;然后重新表述问题&#x…

【Redis】安装配置Redis超详细教程 / Linux版

Linux安装配置Redis超详细教程 安装redis依赖安装redis启动redis停止redisredis.conf常见配置设置redis为后台启动修改redis监听地址设置工作目录修改密码监听的端口号数据库数量设置redis最大内存设置日志文件设置redis开机自动启动 学习视频&#xff1a;黑马程序员Redis入门到…

神经网络参数量和运算量的计算- 基于deepspeed库和thop库函数

引言 最近需要对神经网络的参数量和运算量进行统计。找到一个基于deepspeed库函数计算参数量和运算量的例子。而我之前一直用thop库函数来计算。 看到有一篇勘误博文写道使用thops库得到的运算量是MACs (Multiply ACcumulate operations&#xff0c;乘加累积操作次数&#xf…

小程序-基础加强

前言 这一节把基础加强讲完 1. 导入需要用到的小程序项目 2. 初步安装和使用vant组件库 这里还可以扫描二维码 其中步骤四没什么用 右键选择最后一个 在开始之前&#xff0c;我们的项目根目录得有package.json 没有的话&#xff0c;我们就初始化一个 但是我们没有npm这个…

HTMLCSS :下雪了

这段代码创建了一个动态的雪花飘落加载动画&#xff0c;通过 CSS 技术实现了雪花的下落和消失效果&#xff0c;为页面添加了视觉吸引力和动态感。 大家复制代码时&#xff0c;可能会因格式转换出现错乱&#xff0c;导致样式失效。建议先少量复制代码进行测试&#xff0c;若未能…

string例题

一、字符串最后一个单词长度 题目解析&#xff1a;由题输入一段字符串或一句话找最后一个单词的长度&#xff0c;也就是找最后一个空格后的单词长度。1.既然有空格那用我们常规的cin就不行了&#xff0c;我们这里使用getline,2.读取空格既然是最后一个空格后的单词&#xff0c;…

OpenGL学习笔记(六):Transformations 变换(变换矩阵、坐标系统、GLM库应用)

文章目录 向量变换使用GLM变换&#xff08;缩放、旋转、位移&#xff09;将变换矩阵传递给着色器坐标系统与MVP矩阵三维变换绘制3D立方体 & 深度测试&#xff08;Z-buffer&#xff09;练习1——更多立方体 现在我们已经知道了如何创建一个物体、着色、加入纹理。但它们都还…

NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram

结论 Transformer 大于 传统的Seq2Seq 大于 LSTM 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异&#xff1a; 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的&q…

登录认证(5):过滤器:Filter

统一拦截 上文我们提到&#xff08;登录认证&#xff08;4&#xff09;&#xff1a;令牌技术&#xff09;&#xff0c;现在大部分项目都使用JWT令牌来进行会话跟踪&#xff0c;来完成登录功能。有了JWT令牌可以标识用户的登录状态&#xff0c;但是完整的登录逻辑如图所示&…

【R语言】R语言安装包的相关操作

一、管理R语言安装包 1、安装R包 install.packages() 2、查看已安装的R包 installed.packages() 3、更新R包 update.packages() 4、卸载R包 remove.packages() 二、加载R语言安装包 打开R语言时&#xff0c;基础包&#xff08;base包&#xff09;会自动被加载到内存中…