【Linux】MAC帧

目录

一、MAC帧

(一)IP地址和MAC地址

(二)MAC帧格式

(三)MTU对IP协议的影响、

(四)MTU对UDP协议的影响

(五)MTU对TCP协议的影响

二、以太网协议

(一)以太网MAC帧如何进行解包和分用

(二)局域网中转发原理

三、ARP协议

(一)ARP协议的作用

(二)ARP数据报的格式

(三)ARP协议的工作流程

(四)RARP协议

四、相关的技术与协议

(一)DNS协议

(二)ICMP协议

(三)代理服务器


一、MAC帧

(一)IP地址和MAC地址

        通过上节我们了解一台入网的主机的IP地址是有可能发生变化的,例如该主机处于不同的网络或重新入网时路由器分配了新的IP地址,因此仅靠IP地址是无法完成网络中数据通信的,因此引入了MAC地址。

        MAC地址用来区别数据链路层中相连的节点,MAC地址是网络接口卡的硬件标识符,全球唯一,主要作用于数据链路层,描述的是数据传输中每个区间的起点和终点。

        MAC地址一共48位,全球任意一张网卡都有唯一的MAC地址。使用 ifconfig 命令可查看本机的MAC地址:

(二)MAC帧格式

目的地址:目的主机的MAC地址;

源地址:发送主机的MAC地址;

类型:MAC帧类型;

CRC:MAC帧校验码。

        数据链路层的MAC数据帧协议规定了单帧有效载荷最大为1500字节,有效载荷的最大值称MTU最大传送单元。

        在网络通信中,真正决定数据发送的是传输层,因此数据包的大小实际由传输层决定。若传输层向下交付的数据包过大,则需要IP层将数据进行分片以及重组,而数据链路层对此并不关心只负责数据包的发送

        在网络传输中,不仅仅只有主机采用MTU最大传输单元,对于中间节点的路由器同样也存在MTU最大传输单元,若报文大小超过了路由器的MTU最大传输单元且该数据报中的df = 0,那么路由器的IP层会再次对报文进行IP分片后发送报文,若df = 1 也就是禁止分片的话,路由器会将报文丢弃并通知发送端(ICMP报文)。

(三)MTU对IP协议的影响、

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

        当传输层交付的数据过大需要进行分片时,IP层首先将数据进行分割并填写相应的报头信息,其中被原始的数据报分配唯一的标识位,所有分片继承该标识,除了最后一个分片外,其他分片的标志位中的MF = 1,最后的标识位置0。置1表示后续还有分片,而置0表示后续没有分片即该数据报为最后一个分片。在分片的同时也需要填写片偏移大小,该字段用于表示该数据报的数据原处分配前数据的起始位置,其中除了最后一个分片以外,其他的分片的偏移量必须是8的整数倍。

        当收到一个报文时,查看标志位的MF是否为1,若为1则说明该报文进行过分片操作并不是完整报文,若为0则需要查看该报文的偏移量,若偏移量不为0则说明该报文是被分片后的最后一个IP报文,若为0则说明该报文本身是个完整的报文;通过以上步骤即可验证该报文是否被分片,若没有进行分片该报文本身就是一个完整报文,若该报文进行过分片,需等到最后一个报文的到达。偏移量为数据处原始数据的起始地址。因此当收到最后一个报文后,只需要将各个报文按偏移量大小进行排序,验证各个相邻报文之间的是否连续即可判断收到的所有分片报文是否完整。若完整则重新组装后交付给上层。

        在传输过程中,数据包进行分片后的小数据包中任意一个小包丢失,接受端的重组就会失败,若需要重新发送数据包,是需要将整个数据包重新进行分片后再此全部发给发送端的,IP层不服职责重新传输数据,由上层决定。因此在实际传输中,传输层会避免向下交付的数据包过大而导致IP分片的,IP分片不仅仅增加了网络层的负担,也增加了整个数据包重传的风险。

(四)MTU对UDP协议的影响

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

(五)MTU对TCP协议的影响

  • TCP的数据不能过大,IP协议受制于MTU,同样的TCP协议也受制于MTU,TCP协议蛋哥数据报的最大消息长度称为MSS(Max Segment Size)
  • TCP在建立连接时,通信双方会协商MSS大小:双方在发送SYN时会把自己能支持的最大MSS值写入TCP首部,一般取双方较小的作为最终MSS;
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度;
  • MSS的值就在TCP首部的40字节变长选项中。

二、以太网协议

(一)以太网MAC帧如何进行解包和分用

        MAC帧采用定长的策略,对于一个MAC帧而言,首部为 6+6+2 = 14字节以及有效载荷后的4字节CRC校验位,解包时去掉以上部分即为有效载荷。

        在MAC帧首部由类型字段,根据该类型字段即可了解将有效载荷交付给上层的哪种协议,例如0800代表是IP数据报,0806为ARP协议。

(二)局域网中转发原理

        当局域网内的一台主机发送了一个MAC帧后,局域网内的所有主机都可以收到该MAC帧,而只有其目的地址为本主机的MAC地址时,该主机数据链路层才会把该数据向上交付,而其他主机会直接将该MAC帧丢弃。在局域网中,网卡有一种“混杂模式”,该模式下不会放弃任何数据帧,物理MAC帧内的目的地址是否为主机的MAC地址,都会将MAC帧解包后向上交付,这也是局域网内抓包工具的原理。

        因此在一个局域网内如果多个主机同时发送数据,那么总线上的信号会相互干扰产生碰撞冲突。所以在同一时刻只有一台主机能够发送数据。因此需要约定一些协议保证数据的正常发送:

令牌环:令牌环网络中有一个令牌(Token)在环路上循环传递。只有持有令牌的节点才能发送数据,其他节点则监听该链路以接收数据。当节点需要发送数据时,它会将数据附加到令牌上,并将令牌继续传递下去。每个节点在接收到令牌时检查是否有附加的数据,如果有,节点就将数据提取出来并处理。

以太网:以太网使用一种称为CSMA/CD(带冲突检测的载波侦听多路访问)的协议来管理和调度数据传输。在CSMA/CD中,每个节点都监听网络上的信道来检测是否有其他节点正在发送数据;如果检测到信道空闲,则节点可以开始发送数据;否则,节点会等待一段随机时间后再次尝试发送;当多个主机同时发送该数据导致冲突时,所有主机停止发送并发送阻塞清号,随后二进制指数退避算法重新尝试发送。

        当局域网上的主机越多时,越容易发生数据碰撞冲突,因此可以在局域网中使用交换机。

        交换机可以隔绝冲突域。正常情况下,交换机并不影响局域网内的通信,例如当主机A向主机E发送数据时,交换机会正常将数据进行转发;当主机A和主机B同时向主机D发送数据时发生冲突,当交换机左侧(如图)发生冲突时并不会将发生冲突的数据转发给右侧,而右侧也就是主机C和主机E之间仍然可以继续进行正常的通信不受左侧冲突的影响。

        对于每条MAC的数据长度,数据越长,越有可能发生碰撞,这也是MAC帧协议限制有效载荷最大是1500字节的原因。

三、ARP协议

        ARP协议是介于数据链路层和网络层之间的协议,用于使用IP地址来获取MAC地址。

        在网络传输过程总,IP地址就相当于最终目的地,而MAC地址相当于中间途径的地址。数据报封装为MAC帧时需要目的MAC地址。当主机向服务器发送数据时,主机如何知道所处网段的公网路由器的MAC地址是多少?当报文到达目的网络时,路由器又怎么知道该数据包的目的地址的MAC地址是多少?这些实际都需要MAC地址。

(一)ARP协议的作用

        ARP协议建立了主机IP地址和MAC地址的映射关系

  • 在网络通信中,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是呗网络接收到再去交给上层协议的,如果收到的数据包的目的硬件地址与本主机不符,则会直接丢弃数据包;
  • 因此在通信前必须获得目的主机的硬件地址

(二)ARP数据报的格式

  • 注意源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层为其他类型的网络则是有必要的;
  • 硬件类型指的是链路层网络类型,以太网为1;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址为6字节;
  • 协议地址长度对于IP地址为4字节;
  • op字段为1表示ARP请求,op表示为2表示ARP应答;

(三)ARP协议的工作流程

        当主机A需要向主机E发送数据时,由于主机A只知道主机E的IP地址,因此需要通过ARP协议获取主机E的MAC地址。

        首先主机A发送ARP请求报文,其中ARP报文中的以太网目的地址为全F,也就是为广播地址。局域网内的所有主机都会收到该请求报文,由于报文中的以太网目的地址为广播地址,对MAC帧首部进行解包后查看帧类型字段并将其交给ARP协议处理。首先读取ARP请求报文的op字段,若op字段为1即确认该报文为ARP请求报文,再查看目的IP地址是否为本主机的IP地址(目的以太网地址为全F),若不为本主机的IP地址则将该报文丢弃。

        当主机E收到该ARP请求报文后,经过处理后向主机A回送ARP响应报文,其中MAC帧首部的目的地址为主机A的MAC地址,也就是单播地址。当其他主机收到该报文后查看MAC目的地址并不是本机的MAC地址后会将该报文进行丢弃。当主机A收到该ARP响应报文后对其进行解包,查看op字段,若op字段为2即该报文为ARP响应报文,再查看发送端以太网地址字段获取主机E的MAC地址。

             除此之外,局域网内的设备实际还会维护一张ARP缓存表,用于映射IP地址和MAC地址的关系,每次封装MAC帧时首先会进行查表,若表中不存在目标条目的话才会进行ARP协议请求。

(四)RARP协议

        RARP协议与ARP协议过程类似,不过其作用为MAC地址映射IP地址,也就是知道目的主机的MAC地址,但不知道其IP地址,因此需要通过RARP协议来获取目的主机的IP地址。

四、相关的技术与协议

(一)DNS协议

        当我们通过网络访问服务器时,我们输入的往往是域名,例如我们访问百度时只需要搜索百度的域名而不是其IP地址,这是因为IP对人的记忆及使用不友好,域名网址就比较直观了,而由域名到IP地址的映射实际是由DNS来完成的。

        DNS域名系统是互联网的核心基础设施之一,承担着将人类可读的域名转换为机器可识别的IP地址的关键任务。

百度的域名:www.baidu.com

com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等。

baidu: 二级域名, 公司名。

www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议。在浏览器输入域名时可以省略。

        域名服务器一共有三类,根服务器、权威服务器和递归服务器。

根服务器:全球共13组。存储顶级域服务器地址;

权威服务器:管理特定域名的解析记录;

递归服务器:接收用户查询并完成全链路解析。

        下面简单介绍下DNS解析的一般流程:

  1. 当用户访问www.baidu.com时,先检查本地缓存(浏览器/操作系统缓存),命中则直接返回IP;
  2. 未命中则向递归服务器发送请求,递归服务器依次查询根服务器、.com服务器、baidu.com权威服务器,最终获取IP并返回;
  3. 递归服务器缓存结果,其生存时间决定缓存有效期。

        目前计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容。

(二)ICMP协议

        IP协议并不是可靠的协议,如果在传输过程中丢包了,IP协议是无法得知是否出现了丢包。因此引入了ICMP协议。

        ICMP互联网控制报文协议,TCP/IP协议族中的核心网络层协议,主要用于在IP主机和路由器之间传递控制消息,辅助网络通信的可靠性和诊断。

        ICMP协议提供了以下功能:

差错报文:

  1. 目标不可达;
  2. 超时报文:TTL耗尽或分片重组超时;
  3. 重定向:通知发送端更有路由路径。

查询报文:

  1. Echo请求/应答:用于Ping等工具;
  2. 时间戳请求或应答:同步网络设备时间。

        ICMP协议是基于IP协议的,但是它并不是传输层的功能,因此将其归于网络层协议,ICMP协议只能搭配IPv4协议使用,若是IPv6则需要ICMPv6.

        PING命令实际就是基ICMP协议实现的。

        Ping命令通过发送ICMP Echo请求并等待Echo应答,测试两台主机的连通性。

1、此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址;

2、ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期);

3、ping命令会先发送一个 ICMP Echo Request给对端;

4、对端接收到之后, 会返回一个ICMP Echo Reply;

ping命令是不关注端口的,因为ping命令是基于ICMP, 是在网络层;而端口号, 是传输层的内容。在ICMP中根本就不关注端口号这样的信息。

(三)代理服务器

        

        正向代理:正向代理是客户端与目标服务器之间的中介,​代理对象是客户端。客户端通过代理服务器间接访问目标服务器,隐藏自身真实信息。

        反向代理:客反向代理是服务器端的中介,​代理对象是服务器。客户端直接访问反向代理,由代理将请求分发到后端服务器。

        采用反向代理可以实现负载均衡策略:客户端可能会发送大量的数据,反向代理服务器需要合理的将数据分配给服务器集群。

        作为反向代理的服务器,需要配置较高,充当软件服务的可以是Nginx(Web服务器,不做业务处理,只做转发处理),当反向代理服务器中的服务器集群将请求处理完,可以通过代理服务器将结果发回给客户端,也可以直接发回给客户端。

        NAT和代理服务器的区别:

1、从应用层面上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比 如通过代理服务器进行翻墙;

2、从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换,代理服务器往往工作在应用层;

3、从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。

4、从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。

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

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

相关文章

如何查看window电脑的GPU信息

GPU(图形处理器,Graphics Processing Unit)和显卡是两个密切相关但不同的概念 概念 1. ‌基本概念‌ ‌GPU‌:是专门用于处理图像和视频信息的微处理器,拥有强大的并行计算能力,主要负责图形渲染、数值分…

大数据判存算法

所谓的大数据判存算法,就是如何在海量数据中快速判断某个数据是否存在。这里用到的知识是布隆过滤器(Bloom Filter),下面按照 what - why - how 的顺序来学习它。 1、什么是布隆过滤器 布隆过滤器(英语:B…

Solr-搜索引擎-入门到精通

以下是对 Apache Solr 的简介及其常用语法的快速入门指南: 一、Solr 是什么? • 核心定位:Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台,支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能: • 全…

Ajax与Axios,以及Apifox的入门使用

Ajax与Axios,以及Apifox的入门使用 作者:blue 时间:2025.3.20 文章目录 Ajax与Axios,以及Apifox的入门使用1.Ajax2.Axios3.Apifox的基本使用内容Path 参数定义语法用途 Query 参数定义语法用途 1.Ajax 概念:Asynchr…

Spring MVC拦截器

一、什么是拦截器 拦截器是 SpringMVC 提供的一种可以在请求处理过程中对请求进行预处理或后处理的机制。简单来说,拦截器就像是一位“守门员”,它拦住所有进来的请求,根据设定的规则决定是否放行或者进行某些操作。 拦截器可以&#xff1a…

mysql语句 聚合+分组+内外链接

1.聚合函数 1.count 记数 2.sum 求和 3.avg *语法:select avg(列名) from 表名; 4.max 求最大值 5.min 求最小值 求一个班级数学平均分? select avg(ifnull(math,0&#x…

WPF 与 C# 融合开发:从基础到高级应用(一)

WPF 与 C# 融合开发:从基础到高级应用 一、C# 语言基础回顾 1.1 C# 语言概述 C# 是微软开发的一种现代、面向对象的编程语言,它融合了 C、C 和 Java 等语言的优点,具有简洁、安全、高效等特点。C# 广泛应用于 Windows 平台的应用开发&…

【Linux】IP协议

目录 一、IP协议的概念 二、IP协议的报头 (一)IP协议报文的封装、解包和分用 (二)8位生存时间 (三)IP分片 三、IP协议的网段划分 (一)为什么需要网段划分 (二&am…

如何快速下载并安装 Postman?

从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作,帮助初学者快速上手。 Postman 下载及安装教程(2025最新)

计算机网络高频(三)UDP基础

计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现: 甲骨文是我国目前已知的最早成熟的文字系统,它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值,不仅对中国文…

【深度学习的数学】导数

导数的定义。好像是从极限开始的。比如说,函数f(x)在点xa处的导数,就是当h趋近于0时,[f(ah) - f(a)]除以h的极限,对吧?公式应该是这样的:f’(a) lim_{h→0} [f(ah) - f(a)] / h。这个极限如果存在的话&…

word文件转换为Markdown格式

目录 一、前言1.1、poi-ooxml、docx4j、aspose-words对比二、poi-ooxml技术实现一、前言 顺应时代技术的变更及高效协同理念的影响,非结构化信息展示、存储、应用等也由传统文档向在线协同文档的演变,类似腾讯在线文档。   目前大多数在线文档支持的是Markdown格式,因此这…

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline:端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE(Variational AutoEncoder)图像尺寸与 UNet 和 VAE 的关系EMA(Exponential Moving…

langserve搭建方法

文章目录 安装 langserver安装 langchain-cli创建langserve脚手架使用poetry管理包 安装 langserver pip install langserve安装 langchain-cli pip install langchain-cli创建langserve脚手架 langchain app new 项目名后续交互界面全回车,接着cd到 项目名 目录…

网络基础-路由器和交换机工作配置

三、路由器和交换机的工作原理配置以及华为体系下的小型网络的搭建 3.1路由基础 3.1.1数据转发 通过链路层交换机和网络层路由器进行数据转发 交换机(链路层)mac地址表的数据转发路由器(网络层) ip路由表的数据转发 隔离广播域…

mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁

1.mysql体系结构 1) 连接层 主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作…

Unity高清渲染管线

Unity高清渲染管线——1 unity高清渲染管线是渲染管线的一种,在看完《创造高清3D虚拟世界》这本书的前两章以及第三张第二小节后终于对unity的高清渲染管线也是有了一个初步的认知,以下是我个人理解仅作参考: unity高清渲染管线项目模板比起…

Python基础语法元素(学习笔记)

实例1:温度转换 # TempConvert.py #为单行注释 多行注释为: 这里写内容 TempStr input("请输入带有符号的温度值:") if TempStr[-1] in [F,f] :C (eval(TempStr[0:-1])-32)/1.8print("转换后的温度是{:.2f}C".format(C)) e…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持,其中包括两个重要的函数:std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…