OSI七层模型---数据链路层(以太网帧、MAC地址、MTU、MSS、ARP协议)

2023-11-15

我们首先来了解一下物理层的作用

* 物理层的主要目的是实现比特流的透明传输,为数据链路层提供服务,物理层接口解决了用几根线,多大电压,每根线什么功能,以及几根线之间是怎么协调的问题。

* 物理层介质解决了数据载体材质以及价格优缺点的问题。

* 通信技术解决了每根导线上数据传输的速度和导线上最快能传多少以及怎么高效使用导线的问题。

* 编码解决了数据变为电信号的问题。

* 交换技术解决了数据远距离传输的问题。

虽然物理层已经解决了这么多问题,但是物理层传输的数据还不够准确,而数据链路层的目的就是为了让物理层的数据传输更加可靠、更加准确。

数据链路层的作用

数据链路层在物理层和网络层的中间层,保证网路层的数据能可靠的透明的在物理层传输。

以太网的帧格式

这里写图片描述

* 源地址和目的地址是指网卡的硬件地址,即MAC地址,长度为48位,在网卡出厂时固化的。

* 帧协议类型字段有三种值,分别为IP、ARP、RARP。

* 帧末尾是CRC校验码。

MAC地址

* MAC地址是用来标识数据链路层中相连的节点。

* MAC地址6个字节,长度为2^6=48个比特位。一般用16进制数字加上冒号的形式来表示。(08:00:27:03:fb:19)
* MAC地址在网卡出厂的时候就确定了,不能修改,MAC地址通常是唯一的。(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突)

我们之前在网络层提到了IP地址,那么MAC地址和IP地址有什么区别?

其实,IP地址描述的类似于路途的起点和终点,而MAC地址描述的是路途上的每一个区间的起点和终点。就好比,我们需要到一个地方(西安-北京),我们中间可能会有一些中转站,而这些中转站就可以看作是MAC地址,而北京、西安就可以看作是IP地址。

MTU

MTU是指数据链路层向网络层发数据的最大传输单元,不同网络类型的MTU也不同,其中以太网的MTU为1500.

如果一个数据包从以太网路由到拨号链路上,数据包长度大于MTU,则需要对数据包进行分片。以太网帧的数据长度规定最小为46字节,最大为1500字节ARP数据包长度不够46字节,就需要在后面不填充位。

MTU对IP协议的影响

受到数据链路层的MTU的限制,对于较大的IP数据包需要进行分包。
我们回顾一下IP协议报头格式:
这里写图片描述

  1. 将较大的IP包分成多个小包,并将每个小包的都填上相同的标签,即将16位标识置为相同。

  2. 每个小包IP协议的3位标识中,第2位置为0,表示允许分片第3位表示结束标记,如果是最后一个包,第3位置1,否则只0.

  3. 到达对端再将这些包,按照顺序分组,拼接到一起返回给传输层。

  4. 一旦任意一个小包丢失,接收端的重组就会失败,IP层不会重新传输数据,会交给上一层TCP重发。所以,分包是不太好的。

MTU对UDP协议的影响

UDP传输在网络层是IP(首部为20),在传输层是UDP(首部是8),一个数据从上到下需要添加报头消息,在数据链路层不能超过1500,则UDP在传输层超过1472(1500-20-8=1472),就会在网络层分成多个IP数据报。

如果多个IP数据报有任意一个丢失,就会引起接收端网路层重组失败,UDP还没有重传机制,丢失了就丢弃了,所以,UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

MTU对TCP协议的影响

TCP的数据报也受数据链路层MTU的影响,TCP的单个数据报的最大消息长度MSS(Max Segment Size)MSS值在TCP首部的选项中。

TCP在建立连接的过程中,通信双方会进行MSS协商。双方在发送SYN时,会在TCP头部写入自己能支持的MSS值。双方得到对方的MSS值后,选择较小的作为最终的MSS值。
这里写图片描述

MSS和MTU的关系

这里写图片描述

ARP协议

作用:将IP地址转化为MAC地址
在网络通信中,源主机的应用程序需要知道目的主机的IP地址和端口号,但不知道目的主机的硬件地址。数据包首先是被网卡接收到再去处理上层的协议,如果接收到的数据包的硬件地址与本机不符,就直接丢弃。

每台主机都维护一个ARP缓存表(IP-MAC对照表),可以用命令:arp -a查看。
这里写图片描述
注:缓存表中有过期时间,一般为20分钟,如果20分钟内没有再次使用某个表项,则该表项失效,下次还需要发送ARP请求获得目的主机的硬件地址(MAC)。
这里写图片描述

字段 解释
帧类型 0800(IP数据报),0806(ARP请求/应答),8035(PARP请求/应答)
硬件类型 指的是链路层网络类型,1为以太网
协议类型 指的是要转换的地址类型,0x800为IP地址
硬件地址长度 以太网的为6字节
协议地址长度 IP地址为4字节
OP 为1表示ARP请求,为2表示ARP应答

源主机发出ARP请求,询问该IP地址的主机MAC地址,并将这个请求广播到本地以太网。目的主机接收到广播的ARP请求,发现其中IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的MAC地址写在应答包中。最后,源主机与目的主机的通过MAC地址进行通信。
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSI七层模型---数据链路层(以太网帧、MAC地址、MTU、MSS、ARP协议) 的相关文章

  • C++设计模式——单例模式 (一)

    单例模式 一个类只能创建一个对象 单例模式是C 中常用的一种设计模式 熟悉Qt的朋友肯定清楚QApplication实际也是采用的单例模式 并且为用户提供了一个全局的指针对象 qApp 我们先看看Qt中对于单例的实现 define qApp
  • Android NDK是什么

    官方给出的答案 Android NDK 是一套允许您使用原生代码语言 例如 C 和 C 实现部分应用的工具集 在开发某些类型应用时 这有助于您重复使用以这些语言编写的代码库 深入的学习 https developer android goo
  • 13 款炫酷的 MySQL 可视化管理工具!好用到爆!!

    MySQL 的管理维护工具非常多 除了系统自带的命令行管理工具之外 还有许多其他的图形化管理工具 工具好用是一方面 个人的使用习惯也很重要 这里介绍 13 款 MySQL 图形化管理工具 供大家参考 1 DBeaver DBeaver 是一
  • 分数运算(类+构造)

    题目描述 用C 定义和实现一个分数类 并根据要求完成分数对象的运用 分数类包含分子和分母两个属性 操作包括 各属性的get方法 构造函数 初始化分子分母 相加运算 该运算接收两个分数对象的分子和分母 然后进行分数相加 结果保存在自己的分子和
  • 利用 ViewBinding 和反射封装的基类,从此再也不用 findViewById 了

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者 段颖超丨乐拼链接 https www jianshu com p ea395a83c666声明 本文已获段颖超丨乐拼授权发表 转发等请联系原作者授权 今
  • 计算机图形学入门(一)-线性代数部分知识1

    本部分主要介绍了向量的点乘与叉乘在图形学中的基本应用 介绍了图形学中常用的2D矩阵变换 例如缩放 对称 切变换 旋转 平移 逆变换 组合变换和分解变换 还有在图形学中为了简化操作而采取的添加维度的方法 主要的学习过程来自下面的视频 本文只会
  • select case when语句

    今天看见一公司的数据库面试题 其中有道一开始没想起怎么做 后来摸索了下终于做出来了 题目是 两个表联合查询 当表2的记录在表A里没有时 将其设置为0 mysql gt select from t1 id name 1 bbs 2 bb 3

随机推荐

  • folly库安装(2)openssl升级、python3.8安装

    openssl是必须要升级到openssl1 1 1的 python3 8可以选择不安装 因为folly官网提供了一种用python3快速安装的方法 但这个方法在国内不太顺利 被墙的原因 很多包是不能自动下载的 但了解下也是好的 用pyth
  • 面试官:生成订单30分钟未支付,则自动取消,该怎么实现?

    了解需求 方案 1 数据库轮询 方案 2 JDK 的延迟队列 方案 3 时间轮算法 方案 4 redis 缓存 方案 5 使用消息队列 了解需求 在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单 30 分钟未支付 则自动取消 生成
  • Centos下服务异常停止,log无任何异常体现localhost kernel: TCP: request_sock_TCP: Possible SYN flooding on port 8080

    背景 这两天项目出了奇怪的问题 某服务不明原因的停止运行 停止前一切正常 解决 重启服务解决 但不多久又出现类型问题 分析 开发和运维给不出原因 无法向客户交待 头大时刻想到系统运行日志 var log message应该有记录相应log
  • MySQL必知必会 学习笔记 第二十二章 使用视图

    MySQL 5添加了对视图的支持 视图是虚拟的表 它包含的是一个查询的结果 它本身不含数据 只是用来查看存储在别处的数据的一种设施 视图返回的数据是从其他表中检索出来的 在添加或更改这些表中的数据时 视图将返回改变过的数据 视图的应用 1
  • java数据结构基础名词解释

    第一章 绪论 数据与数据结构 数据 信息的载体 数据元素 数据中的一个 个体 是数据的基本组织单位 数据项 简单数据项 例如 姓名 年龄 组合数据项 例如 出生年月日 包含年 月 日三个简单数据项 数据对象 属性相同的数据元素的集合 数据结
  • 2022.11.29(面经五,笔试+技术面)

    2022 11 29 面经五 笔试题目不难 多刷力扣就成 1 什么是面向对象 面向对象 是把构成问题的事务分解成各个对象 而建立对象的目的也不是为了完成一个个步骤 而是为了描述某个事物在解决整个问题的过程中所发生的行为 附加 面向过程 分析
  • 【自我提高】树莓派GPIO的几种语言控制方法 C 篇

    使用C语言控制 GPIO 18 首先知道树莓派外置IO的关系对照表 我这里的树莓派是 PI 3B V1 2 关系对照表如下 C 语言下使用 wiringPi GPIO 进行编程 要安装 wiringPi pi raspberrypi sud
  • perl 入门推荐

    整理了一些perl链接 perl没有太多复杂概念 了解基础后 就可以编写各种需求脚本了 perl 相同功能 实现的方法有很多 只需了解最最基本的那种方法就好 剩下的就是百度 熟能生巧 举一反三 理解消化 perl语言 一个视频全解决 在线播
  • 合宙Air700E/4G模块使用AT指令查询基础信息

    Air700E使用AT指令查询基础信息 前言 AT指令使用 AT 确认AT固件 AT CGMR 请求制造商版本 AT CGMM 返回制造商型号编码 AT CGSN x 查询产品序列号 AT CGSN 1 查询IMEI AT CGSN 2 查
  • Flask项目(三)定义登录装饰器、图片服务、缓存机制、celery

    Flask项目 定义登录装饰器 redis文档 图片服务 封装七牛方法 城区数据下拉列表 缓存 用户认证相关 发布房源 map 函数 celery 基本使用 房屋管理 定义登录装饰器 utils commons py from werkze
  • x86汇编_MUL/IMUL乘法指令_笔记52

    32位模式下整数乘法可以实现32 16或8位的操作 64位下还可以使用64位操作数 MUL执行无符号乘法 IMUL执行有符号乘法 MUL指令 无符号数乘法 32 位模式下 MUL 无符号数乘法 指令有三种类型 执行 8 位操作数与 AL 寄
  • gitee删除上传到的远程分支的提交记录

    在实际开发中可能也经常会遇到写完代码后提交到远程分支但发现写的提交信息有误 不符合规范 由于自己的gitee账号可能没有修改提交记录的权限 因此最佳的解决方法是 撤销本地分支当前的提交记录 将代码回滚到上一个版本 提交前 重新强制再提交一版
  • 大数据挖掘、分析与应用

    第一讲 基础知识 大数据指无法在可承受的时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 是需要新处理模式才能具有更强的决策力 洞察力和流程优化能力的海量高增长率和多样化的信息资产 数据挖掘 DataMining 是有组织有目的地收集
  • 安装SQLServer2008出现[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1

    问题 当我们卸载SQLServer2008后再重新安装后会出现以下问题 原因是卸载有时不能完全清理文件 解决方法 找到文件C Users user name AppData Local Microsoft Corporation删除Land
  • 深度学习Pytorch(十)——基于torchvision的目标检测模型

    深度学习Pytorch 十 基于torchvision的目标检测模型 文章目录 深度学习Pytorch 十 基于torchvision的目标检测模型 一 定义数据集 二 为PennFudan编写自定义数据集 1 下载数据集 2 为数据集编写
  • C++ 中基础的几种变量作用域,类作用域(C++复习向p5)

    文章目录 三种变量 变量作用域 初始化变量 类作用域 三种变量 局部变量 函数 代码块中的变量 形式参数 函数参数中定义的变量 在函数体中有效 全局变量 所有函数外部声明的变量 变量作用域 局部作用域 局部变量在函数执行完后销毁 全局作用域
  • 最全面的Socket使用解析

    前言 Socket的使用在Android的网络编程中非常重要 今天我将带大家全面了解Socket及其使用方法 目录 1 网络基础 1 1 计算机网络分层 计算机网络分为五层 物理层 数据链路层 网络层 运输层 应用层 其中 网络层 负责根据
  • 一次内网 Harbor 镜像仓库导出迁移过程记录

    1 整体思路 Harbor 提供有丰富的 API 接口 可以获取所有项目信息 镜像和标签等信息 通过编写 shell 脚本循环处理即可实现批量导出镜像包的需求 登陆 Harbor 后 左下角有 API 控制中心按钮 进入可以查看和调试 2
  • centos 安装配置l2tp实现***

    centos 安装配置l2tp实现 1 前言 L2TP是一种工业标准的Internet隧道协议 功能大致和PPTP协议类似 比如同样可以对网络数据流进行加密 不过也有不同之处 比如PPTP要求网络为IP网络 L2TP要求面向数据包的点对点连
  • OSI七层模型---数据链路层(以太网帧、MAC地址、MTU、MSS、ARP协议)

    我们首先来了解一下物理层的作用 物理层的主要目的是实现比特流的透明传输 为数据链路层提供服务 物理层接口解决了用几根线 多大电压 每根线什么功能 以及几根线之间是怎么协调的问题 物理层介质解决了数据载体材质以及价格优缺点的问题 通信技术解决