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

ops/2025/2/6 1:14:39/

        前言:本节内容进入博主讲解的网络层级中的最后一层:数据链路层。 首先博主还是会线代友友们认识一下数据链路层的报文。 然后会带大家重新理解一些概念,比如局域网交换机等等。然后就是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.ppmy.cn/ops/156017.html

相关文章

OpenCV:图像轮廓

目录 简述 1. 什么是图像轮廓? 2. 查找图像轮廓 2.1 接口定义 2.2 参数说明 2.3 代码示例 2.4 运行结果 3. 绘制图像轮廓 3.1 接口定义 3.2 参数说明 3.3 代码示例 3.4 运行结果 4. 计算轮廓周长 5. 计算轮廓面积 6. 示例:计算图像轮廓的面…

知识蒸馏教程 Knowledge Distillation Tutorial

来自于:Knowledge Distillation Tutorial 将大模型蒸馏为小模型,可以节省计算资源,加快推理过程,更高效的运行。 使用CIFAR-10数据集 import torch import torch.nn as nn import torch.optim as optim import torchvision.tran…

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

arkui-x跨平台与android java联合开发

华为鸿蒙系统采用的是arkts,支持跨平台crossplatform 即前端为arkts,arkui-x框架,后端为其他的语言框架。 本篇示例后端采用的是java,android studio工程。 主要方式是前端鸿蒙完成界面元素、布局等效果,后面androi…

Unity3D仿星露谷物语开发26之创建场景控制管理器

1、目标 创建场景控制管理器,来加载和卸载场景,以实现场景之间的切换。 2、思路 Fade To Back是黑色的过渡场景,透明度逐渐变为1。 Fade To Transparent To Show Scene:黑色消失的过渡场景,透明度逐渐变为0. 事件触发…

使用 Docker 部署 pSQL 服务器 的教程

如何使用 Edu 邮箱申请 Azure 订阅并开通免费 VPS 使用 Edu 邮箱不仅可以申请 Azure 的免费订阅来开通 VPS,还可以免费使用 Adobe 和 Notion 等软件,极大地提高学习和工作的效率。如果您还没有 Edu 邮箱,可以参考在线笔记s3.tebi.io/notes-i…

Linux ifstat 命令使用详解

简介 Linux 中的 ifstat 命令用于显示网络接口统计信息,显示系统中每个网络接口的网络流量信息(如发送和接收的字节数或包数)。它提供了一种实时监视网络接口活动的方法,帮助系统管理员和用户诊断与网络相关的问题。 安装 Debi…

Windows图形界面(GUI)-QT-C/C++ - QT MDI Area

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 多文档编辑器 2. 多窗口应用程序 3. 多视图应用程序 三、常见样式 1. 子窗口管理 2. 布局管理 四、属性设置 1. 添加子窗口 2. 移除子窗口 3. 设置…