-MAC桢-

news2025/7/20 11:10:32

MAC桢和IP的关系:

主机A想跨网络和B通信需要IP地址进行路由选择,但一个局域网,比如路由器进行路由选择之前,首先要将数据包发送给路由器B,也就是局域网通信也就是同一个网段的主机进行通信,所以必须通过mac地址来进行转发。

IP地址是用来进行路劲选择,比如路由器B是交给路由器A还是路由器C,MAC地址是用来局域网通信的,比如主机A和路由器B通信。形象的说法也就是,IP地址就是用来索引路由器之间的转发和标示主机的唯一性,MAC地址用来索引和路由器处于同一个网段的主机和主机之间内的通信。

一 报头格式

1. 如何解包和分用

MAC桢采用定长报头:

解包:起始去掉6+6+2=14字节,尾部去掉4字节,得到正文。

分用:类型字段标示交付给上层对应的协议。

目的地址:目的MAC地址

源地址:源MAC地址

类型:表示向上交付给IP层还是ARP/RARP层

CRC:用来校验MAC桢报文是否损坏

二 模拟局域网通信

假设知道对方主机的MAC地址

主机A自顶向下把网络报文封装成mac桢,给处于同一个局域网所有主机发送数据包,当B收到数据包,解包得到mac地址和自己不一样丢弃,主机E收到数据包比对mac桢是一样的在根据类型字段0800向上交付给IP层,自此就完成局域网内的通信。

1.  任何一个时间段只能有一个主机发送数据包,如果有多台主机同时发送数据包,数据就会混在一起,然后进行碰撞检测,执行碰撞避免算法,各自休眠一段时间在进行重新发送,类似TCP超时重传机制,所以碰撞避免算法的结果就是只能有一台主机进行通信,否则进行休眠重传。

2.  如果一个子网内主机越来越多,数据发生碰撞的几率就越大,频繁执行碰撞检测/碰撞避免算法就导致了数据传输速率变慢,比如学校开运动会,一个操场占几千人,同时发送数据进行发面积碰撞,就导致了上不了网的情况,换句话说,一个局域网就是一个大的碰撞域,那么怎么缓解这种主机越来越多,数据频繁碰撞的问题呢?下面引入交换机。

三 交换机

交换机的主要作用就是用来把一个局域网的碰撞域划分成若干的小的碰撞域达到减少数据之间碰撞的冲突,也就是说如果有2个已经被交换机划分好的碰撞域,他们之间相互通信是可以并行的。

下面看一张图:

当某台主机首次通信时,交换机会记录当前主机的mac地址,下次在进行通信,比如交换机首次记录A的mac地址,A再次通信,如果目的mac地址是B,则不需要往交换机右边的碰撞域发送数据包,同时C也能给E/F发送数据,进而减少了数据碰撞,如果A给右边的碰撞域发送数据,那就不会给B/D发送数据包,而是给右边的碰撞域所有的主机发送数据包。

四 MTU/MSS

1. MAC桢除了报头字段是固定的,有效数据一般是的46~1500,所以有效数据最大能承受的大小为1500,简称MTU,包含传输层/网络层/应用层协议的报头字段。

2. 最少为46字节,TCP/IP报头最少占20+20(不带选项),剩下的6字节填充无效数据,到了IP层,IP层有16位总长度标记IP报文的大小,除去这个剩余的就是无效数据直接丢弃即可。

3. 在传输层,比如TCP单次发送的有效数据的大小不能超过1460,减去后续的TCP/IP报头,避免在IP层重新分片和后续组装,因为受MTU的影响。这种不引起分片的单个有效数据的大小简称MSS。

4. TCP三次握手的时候,双方会进行MSS的协商,在可变选项指定,因为双方的MTU可能不一样,最终双方使用的MSS取最小的那一个来进行后续数据包发送的大小避免数据包拆分。

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

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

相关文章

安装:Kali2025+Docker

安装:Kali2025Docker Kali2025安装 直接官网下载WMware版本 https://www.kali.org/get-kali/#kali-virtual-machines 直接打开运行 初始用户密码 kali/kali sudo -i 命令切换到root 更换镜像 切换到其他可用的 Kali Linux 镜像源可能会解决问题,可以使用国内的镜像源&…

Linux云计算训练营笔记day04[Rocky Linux中的命令:mv、cp、grep(^$)、tar、重定向>和>>]

mv 移动(剪切) 源数据会消失 格式: mv 源文件 目标路径 touch /opt/a.txt 创建文件 mv /opt/a.txt /root 移动文件,没有改名 mkdir gongli 创建目录 mv gongli /opt/ 移动目录,没有改名 mv /opt/gongli tedu 移动目录,改名了 …

AbMole Olaparib:打破常规,用PARP抑制重塑肿瘤研究

在当今的生物医学研究领域,Olaparib(AZD2281,AbMole,M1664)作为一种重要的PARP(聚腺苷二磷酸核糖聚合酶)抑制剂,受到了广泛关注。Olaparib可干扰 DNA 单链断裂的修复,从而…

Windows重置网络,刷新缓存

同时按键盘上的【Windows】键和【S】键,弹出搜索框,输入 命令提示符 在“最佳匹配”下的【命令提示符】上右键,点击【以管理员身份运行】 1弹出一个窗口,在光标闪烁的位置,直接输入【netsh winsock reset】&#xff0…

OpenHarmony平台驱动开发(十),MMC

OpenHarmony平台驱动开发(十) MMC 概述 功能简介 MMC(MultiMedia Card)即多媒体卡,是一种用于固态非易失性存储的小体积大容量的快闪存储卡。 MMC后续泛指一个接口协定(一种卡式)&#xff0…

解决IDEA无法运行git的问题

之前git一直没有问题,今天打开就提示我安装git,自然用git去提交新项目也会遇到问题。 我出现问题的原因是:git路径缺失 文件->设置->git 发现git的路径为空,按照实际位置填写即可

HTTP 响应状态码总结

一、引言 HTTP 响应状态码是超文本传输协议(HTTP)中服务器对客户端(通常是 Web 浏览器)请求的响应指示。这些状态码是三位数字代码,用于告知客户端请求的结果,包括请求是否成功。响应被分为五个类别&#…

【Qt】Qt 构建系统详解:qmake 入门到项目实战

Qt 构建系统详解:qmake 入门到项目实战 本文将系统介绍 Qt 构建工具 qmake 的用法,并通过一个完整的项目结构示例,帮助你掌握 .pro 文件编写、子项目管理、模块依赖等核心技能。 🧭 一、什么是 qmake? qmake 是 Qt 提…

《Zabbix Proxy分布式监控实战:从安装到配置全解析》

注意:实验所需的zabbix服务器的搭建可参考博客 zabbix 的docker安装_docker安装zabbix-CSDN博客 1.1 实验介绍 1.1.1 实验目的 本实验旨在搭建一个基于Zabbix的监控系统,通过安装和配置Zabbix Proxy、MySQL数据库以及Zabbix Agent,实现分…

华为配置篇-RSTP/MSTP实验

MSTP 一、简介二、常用命令总结三、实验 一、简介 RSTP(快速生成树协议)​ RSTP(Rapid Spanning Tree Protocol)是 STP 的改进版本,基于 ​​IEEE 802.1w 标准​​,核心目标是解决传统 STP 收敛速度慢的问…

git如何将本地 dev 分支与远程 dev 分支同步

要让本地 dev 分支与远程 dev 分支完全同步(丢弃本地多余的提交记录),可以按照以下步骤操作: 1. ​​获取远程最新状态​ git fetch origin dev # 拉取远程 dev 分支的最新提交,但不会修改本地代码 IDEA中点击fetc…

Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制

目录 一、Input类 1. 鼠标输入 2. 键盘输入 3. 默认轴输入 (1) 基础参数 (2)按键绑定参数 (3)输入响应参数 (4)输入类型与设备参数 (5)不同类型轴的参…

QT:获取软件界面窗口的尺寸大小2025.5.8

在Windows系统中,获取软件界面窗口的尺寸大小可以通过多种方法实现,以下是基于不同场景的详细解决方案: 方法1:使用Windows API获取窗口尺寸 适用于获取外部应用程序窗口的尺寸(如记事本、计算器等)。 步…

【ML-Agents】ML-Agents示例项目导入unity报错解决

最近在跑ML-Agents的示例代码,无奈往unity中导入项目后,就出现报错。本文简要描述了各个报错的解决方法。 文章目录 一、error CS0234: The type or namespace name InputSystem does not exist in the namespace UnityEngine (are you missing an assem…

Transformer Decoder-Only 参数量计算

Transformer 的 Decoder-Only 架构(如 GPT 系列模型)是当前大语言模型的主流架构,其参数量主要由以下几个部分组成: 嵌入层(Embedding Layer)自注意力层(Self-Attention Layers)前馈…

uni-app 中的条件编译与跨端兼容

uni-app 为了实现一套代码编译到多个平台(包括小程序,App,H5 等),引入了条件编译机制。 通过条件编译,我们可以针对不同的平台编写特定的代码,从而实现跨端兼容。 一、条件编译的作用 平台差异…

Unity接入SDK之修改Unity启动页面

原理就是在Android Studio新建Activity继承UnityPlayerActivity,然后再Unity中修改启动页面。 一,Android Studio篇 首先新建一个项目, 新建完成之后基于新建的项目新建一个module,选择为Android Library类型 新建的Library再目…

yarn workspace使用指南

作用 Yarn workspace 是 Yarn 包管理工具中的一个功能,主要用于管理多包项目(monorepo)。它的主要作用如下: 支持多包结构:允许在一个仓库中管理多个独立的包或项目。项目间依赖管理:方便地在不同包之间添…

VUE el-select下拉框动态设置禁用,删除后恢复可选择

场景:点击新增添加按钮,列表table会新增一条包含下拉菜单的数据,如果其中任何一个下拉框选择了某个值,那么新增的下拉菜单的选项中该值是禁用状态,只能选择其他未被选中过的值。点击删除按钮后,已禁用的选项…

FPGA----基于ALINX提供的debian实现TCF

引言:接上问,我们使用自制的image.ub和boot.bin以及ALINX提供的debian8根文件系统,构建了petalinux,但是经测试,该文件系统无法启用TCF服务,即无法与Xilinx SDK建立连接,那么我们应该如何解决? FPGA----基于ZYNQ 7020实现定制化的EPICS通信系统-CSDN博客文章浏览阅读4…