Linux网络之数据链路层协议

目录

数据链路层

MAC地址与IP地址

数据帧 

ARP协议 

NAT技术

代理服务器 

正向代理

反向代理 


        上期我们学习了网络层中的相关协议,为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址,从而指引了数据在网络中的一步步传输,而数据链路层作为网络层的下一层,在数据的传输过程中也扮演着重要的角色,具体扮演了什么样的角色,这是我们本期要学习的内容。

数据链路层

        通过上图,我们可以知道,主机B将报文沿着每个路由器,最终发送到了主机C。上期在学习IP协议时,我们已经知道当主机B发送数据到路由器F时,路由器会解析出数据中的目的IP地址,然后在自己的路由表中与路由表中子网掩码进行按位与得到目的IP主机对应的网络号再与路由表的目的网络的网络号进行比对,如果比对成功,再去判断路由表的flag字段中是否含有G,如果含有则当前路由器将数据发送给数据的下一跳路由器,如果不含有则证明当前数据要发送的目的IP所对应的主机与当前路由器在同一局域网,所以可以直接由当前路由器进行转发。

        所以上节课我们也得出了结论,数据中的目的IP指引数据在网络节点中一步步进行转发,直到将数据发送到目标主机上,上节课我们也提出了数据在网络中由一个节点转发至与之直接相连的下一个节点(数据的下一跳节点)时,数据的转发是通过数据帧进行转发的,接下来我们就要向大家讲述,这个数据帧究竟是什么,以及这个数据帧是如何进行转发的。  

MAC地址与IP地址

          我们再以上节课的用户手机与抖音服务器的图进行举例。图示如下。      

        当用户手机上的数据随着网络中的一个个节点传送逐渐的靠近抖音服务器,看似是横跨整个网络的传输,其实也被分成了多个局域网的传输,上述的一个红圈就是一个局域网。为什么这么说呢?

        以上图为例,以手机相连的最近的用户路由器会给手机这个主机设备分配一个与自身网络号相同的IP地址,那么手机就与与它最近的用户路由器处于了同一局域网中,后续的用户路由器又被与它最近的运营商路由器分配了与运营商相同网络号的IP,从而用户路由器又与运营商路由器处于同一局域网中,这样依次每两个相邻节点之间都形成了一个局域网,最终与抖音服务器相连的路由器我们称之为入口路由器,入口路由器又为抖音服务器分配了一个与自身网络号相同的IP地址,这样入口路由器又和抖音服务器处于同一局域网中。以上讲述并不是很准确,在后续ARP协议和NAT技术讲解之后,我们会为大家进一步补充数据依次传输的细节。

        所以上述图示,就被分成了多个局域网中主机之间的通信(一个圈就是一个局域网)。局域网之间的的主机是可以直接进行通信的。

        局域网之间的通信图示如下。

        处于同一局域网中的主机之间是可以直接互相通信的,且通信的内容可以被局域网中的其它主机获取到。正如在教室里上课,老师点名了张三,但是教室里的同学都听到了老师点名张三的话一样。

        我们规定,在局域网中,主机之间通过mac帧进行数据传输。 

        好了讲了这么多也妹有说明MAC地址和IP地址是个啥呀,别急,以上只是铺垫。

        何为MAC地址?

        简单来说MAC地址就是一个物理地址,任何一台主机一生产出来,就会在网卡中标识出唯一的地址,全球唯一,在局域网中通信时,两台主机使用mac帧进行数据传输,而mac帧的报头中需要使用到MAC地址,一个为源主机MAC地址,一个为目的主机MAC地址。

        何为IP地址?

        IP地址不是主机一生产出来就有的,而是后期相关的厂商进行分配的,IP地址分为私有IP和公网IP,私有IP在一个局域网中一定是唯一的,而在多个局域网中可以重复,公网IP是全网唯一的。在跨网络通信时,一般要使用到IP地址,IP报头中要封装目的主机的公网IP,我们称之为目的IP,目的IP指引了数据在网络中传输的主体方向。

        有了以上所有知识的铺垫,我们再来讲讲数据帧的报文。 

数据帧 

        数据帧又称作MAC帧,简单来说就是处于数据链路层的报文,一般情况下mac帧的有效载荷为IP报文,也可能为ARP报文(后续会讲到)。数据帧的报文图示如下。

  • 目的地址(6字节):局域网中数据帧要发送的目标主机的MAC地址。
  • 源地址(6字节):局域网中发送数据帧的主机的MAC地址。
  • 类型(2字节):数据帧的有效载荷一般情况下有三种,一种是IP报文,一种是ARP报文(通过IP地址获取MAC地址),一种是RARP报文(通过MAC地址获取IP地址)。如果是IP报文则2字节类型的值填充为0800,如果是ARP报文,则2字节类型的值填充为0806,如果是RARP报文,则2字节类型填充为8035。
  • 数据(有效载荷):46~1500字节,对于IP报文,如果大于1500字节就要进行分片。对于ARP报文和RARP报文,一般情况下为28字节,所以要在报文后加上PAD18字节的填充字段,保证报文的长度为46字节。
  • CRC:2字节,用于差错检验,接收端通过CRC检验数据帧的传送是否出现了差错。

ARP协议 

                主机B发送了一个数据到主机C。其实简单的来说确实是这样,准确的说法就是从主机B开始,一直到数据传送到主机C,是通过了多个局域网,最终才将数据传送到了主机C。更准确的说,其实就是主机B发送了数据帧给路由器F,路由器F先判断数据帧的报头,发送数据帧报头的目的MAC地址是自己所以进行了数据帧的解包,然后通过解包后的IP报文的目的IP地址,将这个IP地址在自己的路由表中进行查询,首先将该IP依次和路由表中的子网进行按位与,得到的主机号与路由表中的目标网络的网路号进行比对,对比成功,然后再去判断flag字段的选项,发现为G,所以当前路由器就对IP报文进一步进行封装成MAC帧,然后发送给下一跳路由器,因为当前路由器和下一条路由器都处于同一局域网(为什么处于同一局域网,在后续讲NAT技术时会讲到),所以可以直接发送MAC帧,后续的转发都依靠上述原则,逐步分析MAC帧报头和IP报文的目的IP,直到数据帧发送到了入口路由器D,路由器D对发送来的数据帧报头进行分析,发现报头中的目的MAC地址就是自己,所以对MAC帧进行了解包,然后对解包之后的IP报文的目的IP进行了分析,与自己的路由表中的子网掩码按位与得到的网络号与自己路由表中的目的网络的网络号进行对比,发现对比成功,然后判断flag标志位,发现标志位为U没有G,所以路由器D就认为目的IP主机与自己在同一局域网内,所以就将IP报文重新封装成了MAC帧,然后将MAC帧直接在局域网内发送给目的IP对应的主机。

        好了,那么此时问题来了,封装MAC帧是需要自己的MAC地址与目的主机的MAC地址的,此时路由器D此时只知道目的IP所对应的主机的IP地址,那么如何通过IP地址获取到MAC地址呢?

        此时ARP协议就登场了。

        ARP报文如下图中的以太网ARP字段所示。

  • 硬件类型:硬件类型指的是链路层的网络类型,1为以太网。
  • 协议类型:要转换的地址的类型,要转为IP地址,则填充0800。
  • 硬件地址长度:对于以太网而言为6字节。
  • 协议地址长度:对于要转换的IP地址而言,协议地址长度为4字节。
  • op:为1表示ARP请求,为2表示为ARP应答。        
  • 后面四个就不必多说了,分别为源主机MAC地址,源主机IP地址,目的主机MAC地址,目的主机IP地址。

        我们以图示简单的来讲解一下,怎么样通过ARP协议,将目的主机的IP地址转为MAC地址。        

        ARP协议也是处于数据链路层的协议,在局域网中,刚开始主机A不知道主机B的地址,所以主机A会向主机B发送ARP请求,然后对ARP的请求报文进行封装,封装成了MAC帧,然后在局域网中进行广播,然后局域网的每个主机都会接收这个MAC帧,都以为是发送给自己的,然后对MAC帧进行解包,得到了ARP报文,然后每个主机的ARP协议层首先分析ARP报文的OP字段,发现为1表明是一个请求,然后分析目的IP字段,发现目的IP地址并不是自己主机的IP地址,所以都对该ARP请求报文进行了抛弃,只有主机B发现目的IP与自己的IP地址一致,所以就会接收ARP请求,对主机A做出ARP响应,此时主机B已经通过主机A发送给自己的ARP请求获知了,主机A的MAC地址和IP地址,响应ARP报文中,会将OP字段设置为2,表示这是一个ARP响应报文,同时填充相应的字段,然后封装成MAC帧传递给同一局域网中的主机A,此时局域网中的其它主机也会接收到这个MAC帧,但是当前的MAC帧并不是以广播的形式进行传送的,它有明确的源MAC地址和目的MAC地址,所以当每个局域网中的主机分析到MAC帧的报头的目的MAC地址并不是自己时,就会直接在接收到MAC帧时进行抛弃,而不是解包成ARP报文发送到ARP协议层进行分析之后再抛弃,只有主机A发现MAC帧的目的地址是自己的主机MAC地址,所以会对MAC帧进行解包,解包之后的ARP相应报文会被发送至主机A的ARP协议层,然后会分析ARP协议,发现OP字段为2,表明这是一个响应报文,然后分析得到了源MAC地址,这个源MAC地址就是主机B的地址,所以此时主机A就通过主机B的IP地址得到了主机B的MAC地址。

        所以此时也就解释了为什么上图中的路由器D可以通过主机C的IP地址获知主机C的MAC地址从而向主机C发送MAC帧。与此同时,在上图由主机B到主机C,主机B可以通过路由器F给自己分配IP地址,因为DHCP协议,主机B也会获知路由器F的IP地址,所以也会通过类似的方法获知路由器的MAC地址,从而实现局域网MAC帧的传输。往后的路由器F和路由器G,也是会通过类似的方法实现MAC帧的传送,需要注意的是,一般情况下,与主机相连的我们称之为NAT路由器,不与主机相连的我们称之为ISP路由器。NAT路由器的LAN口用于给局域网中的主机分配私有IP,而WAN口会被ISP路由器分配公网IP,而ISP路由器的LAN口和WAN口一般情况下都为公网IP,所以NAT路由器的WAN口公网IP和ISP的LAN口的公网IP一般都是ISP分配的公网IP,切这两个公网IP处于同一局域网,可以发送MAC帧传送数据,WAN口的IP又会被下一个ISP路由器分配处于同一局域网的公网IP,直到到达了最后一个入口路由器,入口路由器一般情况下也为NAT路由器,NAT路由器的WAN口公网IP是上一跳ISP路由器分配的公网IP地址,LAN口是一个私有IP地址,用于为局域网主机分配IP地址。

NAT技术

        在学习网络层的IP协议时,我们知道了IP协议的地址是有限的,所以为了解决IP地址不足的问题,我们引入了一个NAT技术,何为NAT技术呢?     

        如上图,主机A要发送数据帧到服务器。如果主机A发送数据时将数据帧中的IP报文的源IP写成了自己的私有IP,那么将来服务器接收到了数据帧对数据帧进行解包之后,得到了IP报文,发现IP报文的源IP是一个私有IP,那么此时服务器就蒙了,因为私有IP是可以重复的,那么此时服务器就不知道是给哪个子网的这个私有IP对应的主机发送响应MAC帧。

        基于以上问题,我们产生了NAT技术,因为我们上文已经说到了,NAT路由器的WAN接口是一个由ISP路由器分配的公网IP地址,也就是全网唯一的,所以说,当NAT路由器的LAN口给客户端A主机分配了子网IP之后,客户端主机A先将MAC帧发送至NAT路由器,然后NAT路由器对MAC帧进行解包,然后将解包之后的IP报文的源IP替换成了自己的的WAN口公网IP,因为公网IP是唯一的,所以当服务器发送响应MAC帧时会将响应MAC帧的有效载荷IP报文的目的IP地址填充成NAT路由器的WAN口公网IP。

        说的挺好,将源IP替换成了自己的WAN口的公网IP,那么将来服务器将响应MAC帧通过NAT路由器的WAN口公网IP发送至NAT路由器时,NAT路由器怎样将收到的MAC真发送给局域网中的客户端A呢?这就又引申了一个概念,就是在NAT路由器将客户端A的私有IP替换成自己的公有IP时,会生成一个对照表,大致图示如下。

        即将来NAT路由器接收到响应MAC帧时,会将响应的MAC帧通过对照表发送给局域网中的私有IP对应的主机。

        那么如果上图中的客户端主机A和客户端主机B都向服务器发送了MAC帧,那么经过NAT路由器将私有IP转为公网IP之后,就会有两个对照的记录,那么将来NAT路由器接收到响应MAC帧时,究竟发送给哪一个局域网中的主机呢,此时又诞生了NAPT技术,即就是给私有IP和公有IP都带上了端口号,这样就产生了一一对应的关系,简单图示如下。

代理服务器 

正向代理

        正如大学里的校园网,一般情况下,当学生在使用互联网时访问的其实并不是访问的软件对应的企业服务器,而是校园内的代理服务器。

        

        为什么要有校园代理服务器呢,主要有两个原因?

  1. 校园内可能同时有大量相同的请求服务,比如都同时观看爱奇艺体育中的球赛,所以如果没有代理服务器,那么此时就会有大量相同功能的请求发送,需要多次频繁的访问外网。但是有了代理服务器之后,代理服务器进行分析,发现大量的请求都是为了获取相同的一个资源,所以代理服务器就会发送相同的请求,将获取的球赛资源缓存到自己代理服务器中,多个主机请求相同的资源时,直接就可以从代理服务器中获取相应的资源。
  2. 处于安全性考虑,如果没有代理服务器,那么此时就相当于校园内的主机可以直接与外部的服务器进行数据交换,那么如果有了恶意分子,恶意分子就直接可以攻击校园内的主机,而校园内的主机大部分的拥有者都是学生,并不具备对于恶意攻击的访问能力。所有有了代理服务器之后,与外网服务器之间直接进行交互的就是代理服务器,代理服务器有专业的认识进行管理,可以有效的对不法攻击进行防范。 

        给发送端,建立的代理服务器,我们称为正向代理。 

反向代理 

        反向代理就类似于给企业端配置了一个企业端代理服务器。

        为什么要在企业端配置这样一个代理服务器呢?主要原因还是两个。

        1.我们知道主机与服务器之间的通信是要贯穿TCP/IP网络协议栈的,特别是TCP协议为了保证可靠传输要建立连接,那么如果有多个客户主机去访问了同一企业服务器,那么当企业服务器就会获取大量的连接,而维护连接又要创建大量的数据结构,所以如果大量的客户主机访问了同一企业服务器,就会导致这个企业服务器创建大量的维护连接的数据结构,从而增加了服务器的负载。有了企业代理服务器之后,代理服务器会合理的对用户的请求进行分配,从而不会导致某一个企业服务器的负载过大,我们称之为负载均衡。

        图示如下。

        2.同样在企业端配置企业代理服务器是为了保护企业服务器的安全,因为有了企业代理服务器,客户主机不会与企业服务器直接进行通信,而是会与企业代理服务器进行交互,企业代理服务器会对每个客户请求进行甄别,能够有效的组织非法客户的恶意请求,这样就保证了企业服务器的安全,有人会说难道不能为企业服务器配置一些有效的防护策略吗,当然有,但是加上企业代理服务器之后安全级别会更高。

        在接收端我们配置了相应的代理服务器,我们称之为反向代理。 

        以上便是数据链路层的所有重点内容。

        本期内容到此结束^_^

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

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

相关文章

TCP7680端口是什么服务

WAF上看到有好多tcp7680端口的访问信息 于是上网搜索了一下,确认TCP7680端口是Windows系统更新“传递优化”功能的服务端口,个人理解应该是Windows利用这个TCP7680端口,直接从内网已经具备更新包的主机上共享下载该升级包,无需从微…

“量子心灵AI“的监控仪表盘 - javascript网页设计案例

【前端实战】基于Three.js和Chart.js打造未来科技风AI监控仪表盘 本文通过AI辅助开发,详细记录了一个高级前端项目的完整实现过程。文章包含核心代码片段、技术要点及遇到的问题与解决方案。适合有一定前端基础的开发者学习参考。 1. 项目概述 本文详细介绍了一个名…

vtkDepthSortPolyData 根据相机视图方向对多边形数据进行排序

1. 作用 在 3D 渲染中,透明对象的渲染顺序非常重要。如果透明对象的渲染顺序不正确,可能会导致错误的视觉效果(例如,远处的透明对象遮挡了近处的透明对象)。vtkDepthSortPolyData 通过对多边形数据进行深度排序&#…

第十五章:go package 包的管理

import f "fmt"   // 注意 这里 f 是包的别名 init初始化函数 在每一个Go源文件中,都可以定义任意个如下格式的特殊函数: func init(){// ... } package:声明包的关键字 packagename:包名,可以不与文…

【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统

【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统 存储器存储器相关概念存储器分类存储器系统存储器性能指标存储器层次概述程序访问的局部性原理SRAM存储器存储器的读写周期DRAM存储器DRAM控制器高性能的主存储器存储器扩展只读存储器ROM光擦可编程只读存储…

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权,禁止商用!本项目未经授权,禁止商用!本项目未经授权&…

20250212:linux系统DNS解析卡顿5秒的bug

问题: 1:人脸离线识别记录可以正常上传云端 2:人脸在线识别请求却一直超时 3:客户使用在线网络 思路:

爱普生温补晶振 TG5032CFN高精度稳定时钟的典范

在科技日新月异的当下,众多领域对时钟信号的稳定性与精准度提出了极为严苛的要求。爱普生温补晶振TG5032CFN是一款高稳定性温度补偿晶体振荡器(TCXO)。该器件通过内置温度补偿电路,有效抑制环境温度变化对频率稳定性的影响&#x…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一,那什么是AOP?AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。AOP是一种思想,而在Spring框…

AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录

AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录 一、AutoDl平台租用GPU 1.注册并登录AutoDl官网:https://www.autodl.com/home 2.选择算力市场,找到需要的GPU: 我这里选择3090显卡 3.这里我们就选择P…

三维建模与视频融合(3D-Video Integration)技术初探。

三维建模与视频融合(3D-Video Integration)是一种将虚拟三维模型无缝嵌入实拍视频场景的技术,广泛应用于影视特效、增强现实(AR)、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…

天津大学:《深度解读DeepSeek:部署、使用、安全》

大家好,我是吾鳴。 吾鳴之前给大家分享过由天津大学出品的报告《DeepSeek原理与效应》,今天吾鳴再给大家分享一份由天津大学出品的报告——《深度解读DeepSeek:部署、使用、安全》。 报告主要从DeepSeek本地化部署、DeepSeek使用方法与技巧、…

用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息

web 网页项目在安卓手机打开时出现问题,想要查看控制台调试信息。记录一下使用android studio 模拟器访问的方式。 步骤如下: 1.安装android studio,新增虚拟设备(VDM- virtual device manager) 点击Virtual Device Manager后会…

【音视频】ffmpeg命令提取像素格式

1、提取YUV数据 提取yuv数据,并保持分辨率与原视频一致 使用-pix_fmt或-pixel_format指定yuv格式提取数据,并保持原来的分辨率 ffmpeg -i music.mp4 -t "01:00" -pixel_format yuv420p music.yuv提取成功后,可以使用ffplay指定y…

同为科技智能PDU在数据中心场景的应用与解决方案

数据中心当前处于一个快速发展和技术变革的特殊时期,全新的人工智能应用正在重塑整个世界,为社会带来便捷的同时,也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长,对数据中心提出了大算力、高性能的新需求&#xf…

deepseek在pycharm中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm,如何接入deepseek是我们窥探ai代码编写的第一步,熟悉起来总没坏处。 1、官网安装pycharm社区版(免费),如果需要安装专业版,需要另外找破解码。 2、安装Ollama…

汽车一键启动按钮更换注意事项

汽车一键启动开关更换教程 一键启动开关是现代汽车中常见的便捷配置,但随着时间的推移,这个部件可能会出现失灵的情况。当一键启动开关发生故障时,许多车主选择自行更换。以下是整理的一键启动开关更换教程: 更换前的准备 选择匹…

群晖DS223 Docker搭建为知笔记

群晖DS223 Docker搭建为知笔记,打造你的专属知识宝库 一、引言 在数字化信息爆炸的时代,笔记软件成为了我们管理知识、记录灵感的得力助手。为知笔记,作为一款专注于工作笔记和团队协作的云笔记产品,以其丰富的功能和便捷的使用体…

①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信单元 MODBUS TCP 转 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作为MODBUS TCP通信的服务器进行动作。可通…