当前位置: 首页 > article >正文

-MAC桢-

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取最小的那一个来进行后续数据包发送的大小避免数据包拆分。

相关文章:

-MAC桢-

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

安装: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 单链断裂的修复,从而…...

RPC、gRPC和HTTP的区别

RPC 只是一种屏蔽远程过程调用的设计,它与HTTP不是对立的,两者不是一个层面的概念。 RPC底层通信可以使用TCP实现(如Thrift),也可以使用HTTP实现(如gRPC),其本身并无限制。 1. 概念…...

Windows重置网络,刷新缓存

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

Ref是什么

在 React 中,ref 是一种用于访问 DOM 元素或组件实例的机制。它允许你在组件中直接操作 DOM 元素,或者访问子组件的实例。ref 的使用场景非常广泛,包括表单操作、焦点控制、动画等。以下是关于 ref 的详细讲解以及在项目中的常见使用场景。 …...

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

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

解决IDEA无法运行git的问题

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

HTTP 响应状态码总结

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

Java求职面试:Spring Boot与微服务的幽默探讨

Java求职者面试:技术与幽默的碰撞 场景概述 在某互联网大厂的面试现场,面试官严肃认真,程序员则是一个搞笑的水货角色。面试者名叫张伟,年龄28岁,硕士学历,拥有5年的Java开发经验。以下是面试的详细过程。…...

lua脚本+Redission实现分布式锁

实现分布式锁最简单的一种方式:基于Redis 不论是本地锁还是分布式锁,核心都在于“互斥”。 在 Redis 中, SETNX 命令是可以帮助我们实现互斥。SETNX 即 set if not exists (对应 Java 中的 setIfAbsent 方法),如果 key 不存在的…...

JVM之jcmd命令详解

jcmd 是 Oracle JDK(Java Development Kit)自 JDK 7 起引入的一个强大的诊断工具,用于与正在运行的 JVM(Java Virtual Machine)实例进行交互。它允许用户执行各种诊断命令,比如线程堆栈分析、堆转储、GC 信…...

Go语言:json 作用和语法

在 Go 语言中,JSON 字段(也称为 JSON Tag)是附加在结构体字段上的元数据,用于控制该字段在 JSON 编码(序列化)和解码(反序列化) 时的行为。它的语法是: type StructName…...

Hive HA配置高可用

Hive的高可用性(HA)通过消除关键组件的单点故障来实现,确保系统在部分故障时仍能正常运行。其基本原理涉及以下核心组件和策略: ‌1. Hive Metastore 的高可用‌ ‌ 多实例部署‌:部署多个Metastore服务实例,每个实例连接到共享的后端数据库(如MySQL、PostgreSQ…...

Ubuntu 第11章 网络管理_常用的网络配置命令

为了管理网络,Linux提供了许多非常有用的网络管理命令。利用这些命令,一方面可以有效地管理网络,另一方面出现网络故障时,可以快速进行诊断。本节将对Ubuntu提供的网络管理命令进行介绍。 11.2.1 ifconfig命令 关于ifconfig命令&…...

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

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

Python实例题:pygame开发打飞机游戏

目录 Python实例题 题目 pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本 代码解释 初始化部分: 游戏主循环: 退出部分: 运行思路 注意事项 Python实例题 题目 pygame开发打飞机游戏 pygame-aircraft-game使用 Pygame 开发…...

《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…...

使用Python和OpenCV实现实时人脸检测与识别

前言 在计算机视觉领域,人脸检测与识别是两个非常重要的任务。人脸检测是指在图像中定位人脸的位置,而人脸识别则是进一步识别出人脸的身份。随着深度学习的发展,这些任务的准确性和效率都有了显著提升。OpenCV是一个开源的计算机视觉库&…...

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…...

【网络安全】SQL注入

如果文章不足还请各位师傅批评指正! 想象一下,你经营着一家咖啡店,顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入,向后厨发送指令,比如“为顾客A准备一杯拿铁”。 然而,如果有个不怀好意的顾客…...

Transformer Decoder-Only 参数量计算

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

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

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

<C#>log4net 的配置文件配置项详细介绍

log4net 是一个功能强大的日志记录工具&#xff0c;通过配置文件可以灵活地控制日志的输出方式、格式、级别等。以下是对 log4net 配置文件常见配置项的详细介绍&#xff1a; 根元素 <log4net> 这是 log4net 配置文件的根元素&#xff0c;所有配置项都要包含在该元素内…...

excel单元格如果是日期格式,在C#读取的时候会变成45807,怎么处理

excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 在 C# 中&#xff0c;Excel 日期被表示为一个数字&#xff0c;这是因为 Excel 内部将日期存储为…...