数据链路层(以太网简介)

embedded/2024/10/9 3:34:59/

一.以太网数据帧结构:

        目的地址,源地址,类型这三个被称为帧头,数据则被称为载荷,CRC则被称为帧尾(校验和)

二.数据帧结构分析

1.目的地址和源地址

 i.地址解释

        这两个地址指的是mac地址,而不是IP地址。二者的区别在于:mac地址是使用6个字节表示的,而IP地址是使用4个字节表示的,空间范围比IP地址大了6倍多。

        mac地址当前仍然可以给每个设备分配唯一一个mac地址,一般一个网卡,在出厂的时候,mac地址就被分配好了,就写死了。

        mac地址,也可以作为设备的身份标识。

ii.地址的使用和表示区别

        mac地址使用在数据链路层,用来表示两个相邻设备之间的数据转发,IP地址使用在网络层,表示整个转发流程,进行路径的规划。

举个例子:
(1).从四川 => 吉林省的白城市安广镇,第一步需要规划路径(网络层)

第一种方案:四川-> 北京 -> 长春 -> 白城 -> 安广;

第二种方案:四川-> 北京 -> 沈阳 -> 白城 -> 安广;

第三种方案:四川 -> 长春 -> 白城 -> 安广;

等等......

(2).选择第一种方案并且执行第二步来解释其中的过程原理

实施方案:

四川 -> 北京时:源IP:四川 目的IP:安广,源mac:四川,目的mac:北京,坐飞机;

北京 -> 长春时:源IP:四川 目的IP:安广,源mac:北京,目的mac:长春,坐高铁;

长春 -> 白城:源IP:四川 目的IP:安广,源mac:长春,目的mac:白城,坐大巴;

白城 ->安广时:源IP:四川 目的IP:安广,源mac:白城,目的mac:安广,坐出租车。

        则达到目的地,这里的过程中不考虑NAT机制,由此也说明了,以太网数据帧里面的mac地址,随着转发的过程,时刻发生改变,每经过一个交换机/路由器都会产生上述的变化。

2.类型

        描述了载荷中数据的类型,其中类型的数据是16进制,ARP和RARP是不传输业务的数据,只给转发功能提供辅助的措施。

i.ARP数据包 

         ARP数据报/ARP协议,可以认为是让当前设备获取到周围设备IP地址和mac地址之间的映射关系。

        IP协议在路由转发的过程时,在这个过程中都是拿着IP地址来进行查路由表的,由此得到的是网络接口(抽象概念),具体的说就是传输给哪个mac地址的设备,这个环节中就涉及到了IP地址转换成mac地址的过程。

        ARP协议就是用来建立上述的映射关系,当前设备接入网络的时候,就会往广播地址发ARP报文,收到ARP请求的设备就会返回ARP响应,响应就会告知自己的IP和mac地址。

3.载荷

        载荷上面数据表示的1500个字节的意思是 :数据链路层数据帧的最大载荷长度为1500字节,相当于 1.5kb,这个数字就被称为MTU。

        MTU和硬件直接相关,不同的硬件设备,对应到了不同的数据链路层协议,对应到了不同的MTU。

        以太网非常的短,并且1.5也非常的小,毕竟TCP/UDP至少都是64kb,此处的MTU的限制,就会对上层协议产生直接的影响,也就是IP协议。

        虽然IP协议能够拆包组包,但实际上,IP协议更多的是应对MTU的限制,当一个IP数据报,达到了1500以上的时候,就会自动拆包了。


http://www.ppmy.cn/embedded/124863.html

相关文章

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离 —— 2024-10-02 下午 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离1.代码图片2.分析3.UML4.代码 1.代码图片 运行 Mouse button 1 pressed at (1…

『网络游戏』窗口基类【06】

创建脚本:WindowRoot.cs 编写脚本: 修改脚本:LoginWnd.cs 修改脚本:LoadingWnd.cs 修改脚本:ResSvc.cs 修改脚本:LoginSys.cs 运行项目 - 功能不变 本章结束

pg if条件语句

1.语法: 2.区别 IF 语句: 只能在 PL/pgSQL 中使用,不适合在直接的 SQL 查询中使用。没有返回值,仅仅是控制逻辑流程。适合用在存储过程、函数和触发器中。 CASE 语句(在 PL/pgSQL 中): 可以在 P…

命名管道Linux

管道是 毫不相关的进程进程间通信::命名管道 管道 首先自己要用用户层缓冲区,还得把用户层缓冲区拷贝到管道里,(从键盘里输入数据到用户层缓冲区里面),然后用户层缓冲区通过系统调用(write)写…

【Web】portswigger 服务端原型污染 labs 全解

目录 服务端原型污染 为什么服务器端原型污染更难检测? 通过受污染的属性反射检测服务器端原型污染 lab1:通过服务器端原型污染进行权限提升 无需污染属性反射即可检测服务器端原型污染 状态代码覆盖 JSON 空格覆盖 字符集覆盖 lab2:检测没有污染属性反射的…

微信原生小程序

app.json 中配置project.config.json 中配置project.private.config.json 中配置sitemap.json 中配置index.json 中配置常用全局配置常用页面配置WXMLnavigator 组件 基本用法常用属性事件 scroll-view 组件 基本用法 1. 创建可垂直滚动的区域2. 创建可水平滚动的区域事件1. 事…

JumperServer入门

一、安装部署 官方安装文档:快速入门 - JumpServer 文档 机器准备 CentOS7 ip 角色 192.168.252.145 主节点 192.168.252.146 被控节点1 192.168.252.148 被控节点2 安装JumperServer curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver…

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候,单体锁就不再适用,而我们自己去用redis实现分布式锁的话,会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然,上述问题并非无…