以太网数据格式与封装解封——以太网基础02

2023-10-29


      我们在上一文中介绍了以太网5层模型,这一节我想学习一下以太网数据封装与解封的知识,了解以太网数据是如何传输的。
一、数据封装
        当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。而再这个过程中,每一层都会对要发送的数据加一些首部信息。整个过程如下图。
        如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据  ,称为本层的协议数据单元   ,即PDU.
        应用 层数据在传输层添加TCP报头后得到的PDU被称为 Segment(数据段 ),图示为TCP段
        传输层的数据(TCP段)传 给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包
        网络层 数据报(IP数据包)被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧),图示为以太网帧。
         最后,帧被转换为比特,通过网络介质传输。 这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。
二、数据格式
        需要注意的是,这里所说的以太网帧,与我们常说的以太网是不一样的。下面我们就来介绍每一层数据的 首部信息 内容。
        首先我们知道世界上有个协会叫作IEEE,即电子工程师协会,里面有个分会,叫作IEEE802委员会,是专门来制定局域网各种标准的。而802下面还有个分部,叫作802.3.就是我们经常提到的 IEEE802.3,这个部门制定的规范叫以太网规范,这个以太网规范中就定义了上面提到的“以太网首部”,这个以太网规范,实际只定义了数据链路层中的MAC层和物理层规范。(注意数据链路层包括MAC子层和LLC子层两个子层,而LLC子层是在IEEE802.2中规范的)。
1、以太网帧格式
          以太网常用帧格式有两种, 一种是Ethernet II,另一种是IEEE 802.3 格式。这两种格式区别是:Ethernet II中包含一个Type字 段,。而IEEE 802.3格式中,此位置是长度字段。  其中Type字段描述了,以太网首部 后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。以太网中多数数据帧使用的是 Ethernet II帧格式。
       a、  Ethernet II帧格式
    
     b、 IEEE 802.3   帧格式
        
     前导码: Ethernet II是由 8个8‘b10101010构成, IEEE802.3由7个 8‘b10101010+1个字节SFD..
     目的地址:目的设备的MAC物理地址。
     源 地址 :发送设备的MAC物理地址。
     类型( Ethernet II) 以太网首部 后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。
     长度( IEEE802.3 ):当长度小于1500时,说明该帧为 IEEE802.3帧格式,大于1500时,说明该帧为 Ethernet II帧格式。
     数据:数据长度最小为46字节,不足46字节时,填充至46字节。因为最小帧长度是64字节,所以,46+6+6+2+4=64。(不算前导码)
     FCS: 就是CRC校验值
     以太网首部就是:
2、IP数据包格式
    IP数据包格式如下图。IP首部,如图也表示出来了。
    
1) 版本号 4位:表示IP协议的版本号,如目前广泛使用的是IPv4,还有其他版本的IP协议,如IPv6。通信两端协议必须一致。一般的值为0100(IPv4),0110(IPv6)。
2) 首部长度: 4 位,可表示的最大十进制数值是  15。请注意,这个字段所表示数的单位是 32位字  ( 1 32位字长是 字节 ),因此,当  IP 的首部长度为  1111  (即十进制的  15),首部长度就达到  60字节。当  IP 分组的首部长度不是 4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在  4字节的整数倍开始,这样在实现  IP协议时较为方便。首部长度限制为  60字节的缺点是有时可能不够用。这样做的目的是希望用户尽量减少开销。最常用的首部长度就是  20 字节  (即首部长度为  0101),这时不使用任何选项。
  3) 服务: 占  8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。 1998IETF把这个字段改名为区分服务  DS (DifferentiatedServices)。只有在使用区分服务时,这个字段才起作用。
 4) 总长度:总长度指首都及数据之和的长度,单位为字节。因为总长度字段为  16位,所以数据报的最大长度为  216-1=65 535字节。     IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元  MTU (Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度  (即首部加上数据部分 )一定不能超过下面的数据链路层的 MTU值。
5) 标识符: 占  16位。 IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加  1,并将此值赋给标识字段。但这个“标识”并不是序号,因为  IP是无连接的服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的  MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
6) 标志:占 位,但目前只有 2位有意义。    标志字段中的最低位记为  MF (More Fragment)MF=1即表示后面“还有分片”的数据报。 MF=0表示这已是若干数据报片

中的最后一个。标志字段中间的一位记为 DF(Don't Fragment),意思是“不能分片”。只有当 DF=0时才允许分片。

7)片偏移:占  13位。较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以  8个字节为偏移单位。这就是说,每个分片的长度一定是  8字节  (64)的整数倍。\
8)生存时间:占  8位,生存时间字段常用的英文缩写是 TTL (Time To Live),其表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜围子,因而白白消耗网络资源。最初的设计是以秒作为  TTL的单位。每经过一个路由器时,就把 TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于  1 秒,就把 TTL值减  1。当  TTL值为  0时,就丢弃这个数据报。
9) 协议:占  8 位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的 IP层知道应将数据部分上交给哪个处理过程。
比较常用的协议号:
     1    ICMP  2    IGMP   6    TCP   17    UDP  88    IGRP   89    OSPF

10) 首部检验和:占 16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算一下首都检验和 (一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

11) IP源地址: 32位IP地址

12) IP目的地址: 32位IP地址





 
   
3、TCP数据段格式
          如图所示为TCP首部和TCP数据段格式
下面我们再介绍几个常见的数据格式
4、UDP数据段格式--传输层的
    
     其中UDP首部如上图所示。
5、ARP数据包格式(摘自:来源:  http://blog.sina.com.cn/s/blog_9c5d29f70101dwgk.html)

1)硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1

2)协议类型字段指明了发送方提供的高层协议类型,IP080016进制);

3)硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;

4)操作字段用来表示这个报文的类型,ARP请求为1ARP响应为2RARP请求为3RARP响应为4

5)发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;

6)发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;

7)发送方IP0-1字节):源主机硬件地址的前2个字节;

8)发送方IP2-3字节):源主机硬件地址的后2个字节;

9)目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;

10)目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;

11)目的IP0-3字节):目的主机的IP地址。

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

以太网数据格式与封装解封——以太网基础02 的相关文章

  • kind & kubernetes 集群内如何通过 helm 部署定制化 Prometheus-Operator?

    文章目录 1 Prometheus 简介 2 Prometheus 优势 3 Prometheus 架构图 4 Prometheus Operator 简介 5 Prometheus Operator 架构图 6 环境准备 7 Kind 部
  • 优雅演进:探索低代码与全栈的完美结合

    前情提要 本章节是番外篇的低代码平台的相关知识 接下来我们即将进入一个全新的空间 对代码有一个全新的视角 以下的内容一定会让你对低代码平台有一个颠覆性的认识哦 以下内容干货满满 跟上步伐吧 作者介绍 作者 热爱编程不起眼的小人物 作者的Gi
  • sbt配置国内镜像

    操作环境 win10 从官网下载sbt的windows安装包 安装成功后 进入安装目录的 conf 文件夹 编辑sbtconfig txt 增加下面两行代码 Dsbt global base C Sbt sbt Dsbt repositor
  • 智能安全 - 学习资源

    Security Data Science Learning Resources
  • 【Spring源码系列】Bean生命周期-实例化前

    这里写目录标题 前言 一 实例化前 InstantiationAwareBeanPostProcessor介绍 InstantiationAwareBeanPostProcessor实例化前作用 InstantiationAwareBean
  • iphonex黑屏开不了机_手机死机开不了机怎么办

    大多数手机用户在使用手机过程中或多或少都遇到过死机的问题 如同电脑的操作系统也会出现死机一样 那么 当手机死机开不了机怎么办 下面介绍一下手机死机后开不了机解决办法 手机死机开不了机怎么办 苹果手机的死机解决方法 步骤1 按住你手机 开机键
  • 初探STM32F4(6)--系统时钟配置

    时钟配置 概述 时钟系统框图 时钟系统初始化代码架构分析 概述 经过前文对GPIO USART外设的初步学习 发现有两个基本知识需要补充学习 一个是系统时钟的相关配置 另一个是中断事件的相关配置 本文先学习系统时钟 阅读完本文 要能回答以下
  • C++ 防 陷阱2 重复包含头文件

    multiple definition of 错误 1 为了避免重复包含头文件 建议在声明每个都文件时采用 头文件卫士 采用google建议H 具体形式如下 ifndef PROJECT PATH FILE H define PROJECT
  • 十五)Stable Diffusion使用教程:其他

    A still life scene with the theme of small and delicate jewelry crystal clear gemstones Product positioning is conspicuo
  • ARM Linux Oops使用小结

    内核Oops小结 出现Oops消息的大部分错误时因为对NULL指针取值或者因为用了其他不正确的指针值 Oops如何产生的解释如下 由于处理器使用的地址几乎都是虚拟地址 这些地址通过一个被称为 页表 的结构被映射为物理地址 当引入一个非法指针
  • 【opencv4.3.0教程】01之opencv介绍与配置(win10+VS2015+OpenCV4.3.0)

    目录 一 前言 二 OpenCV介绍 1 介绍 2 OpenCV版本简介 3 OpenCV4 3 0下载 三 OpenCV安装与配置 1 安装 2 环境变量配置 四 配置VS2015 1 包含目录与库目录 2 链接器配置 五 测试及效果 一
  • Ajax vs Willem II,Feyenoord on top after beating Ajax 2-1

    Feyenoord on top after beating Ajax 2 1 Soccer Updated 2005 08 29 11 07 AMSTERDAM Netherlands Dirk Kuijt and Salomon Kal
  • 【概率论与数理统计】猴博士 笔记 p3-4 事件的概率、事件的独立性

    事件的概率 引入 画图 假设方块面积为1 那么P A 的数值就是点落在A上的概率 我们可以通过画图求出很多概率 如 P A B 0 25 P B A 0 23 P A B 0 58 一些概念 例1 解 0 3 画个图就行 例2 解 5 12
  • Windows平台下安装与配置MySQL ,配置环境变量,详细图解,

    1 安装检查 下载之前要看一下Windows版本 如果是专业版我们在安装之前需要多一步检查操作 如果是专业版我们需要在计算机管理中检查管理员属性中是否添加网络服务的属性 红框部分 计算机管理 gt 本地用户和组 gt 组 gt 双击Admi
  • C++复数运算

    C 复数运算探究 题目说明 抽象数据类型 ADT 的定义与实现 复数a bi a为实部 b为虚部 请用C或C 语言定义和实现复数抽象数据类型 要求能够输入两个实数作为实部和虚部 用于初始化 创建 一个复数 对任意的两个复数 能够按照复数运算
  • TypeC 基础

    type C接口形式 PD最大支持20V 5A 100W功率 通过CC线来协商Power供给 由于Type C的扩展功能 SBU1 SBU2 大部分配件诸如耳机 视频接口 debug接口等都可以实现兼容设计 在USB2 0端口 USB根据输
  • C++学习之路-构造函数的初始化列表

    构造函数 初始化列表 一 何为初始化列表 二 初始化列表的本质 三 初始化列表的优势 四 初始化列表中列表顺序问题 五 初始化列表与默认参数的配合使用 六 初始化列表的注意之处 七 构造函数的声明和实现分离时 初始化列表需写在实现里 八 子
  • 回归与分类区别

    回归与分类的根本区别在于输出空间是否为一个度量空间 我们不难看到 回归问题与分类问题本质上都是要建立映射关系 对于回归问题 其输出空间B是一个度量空间 即所谓 定量 也就是说 回归问题的输出空间定义了一个度量 去衡量输出值与真实值之间的 误
  • AGX Xavier使用记录

    整理了遇到的一些问题 Jetson AGX Xavier上查看版本 格格 gloria 博客园 Nvidia agx xavier TX2 无法查看opencv版本问题 Cc CSDN博客 Project cv bridge specifi

随机推荐

  • hdu1799(用递推公式求组合的个数)

    题目意思 我们知道 在编程中 我们时常需要考虑到时间复杂度 特别是对于循环的部分 例如 如果代码中出现 for i 1 i lt n i OP 那么做了n次OP运算 如果代码中出现 fori 1 i lt n i for j i 1 j l
  • Windows平台如何查看一个dll依赖的其他dll

    好多开发者在做windows开发的时候 容易遇到dll依赖的问题 VS自带一个小工具dumpbin 这个工具挺好用 可以查看dll相关依赖库 还可以看dll导出接口 下面演示下查依赖库用法 运行 dumpbin dependents nm
  • axios相应拦截器弹窗的实现

    在axios中同一封装 将请求之后code不等于0的数据进行弹窗显示 在封装axios的时候 通过require导入elementUI 之后调用message方法 import axios from axios var ui require
  • 【Jmeter线程组及报告解析】

    前言 一 线程组解析 1 含义 2 案例 3 各类线程执行顺序 二 报告解析 1 常用的压测报告 2 View Results Tree 介绍 3 Aggregate Report 聚合报告 介绍 前言 本章主要针对压测时常用的 线程组 压
  • 【FPGA IP系列】FIFO的通俗理解

    FPGA厂商提供了丰富的IP核 基础性IP核都是可以直接免费调用的 比如FIFO RAM等等 本文主要介绍FIFO的一些基础知识 帮助大家能够理解FIFO的基础概念 一 FIFO介绍 FIFO全称是First In First Out 即先
  • Unity热更新 ILRuntime 从零开始 继承 Inheritance(五)

    Unity热更新 ILRuntime 从零开始 继承 Inheritance 五 前言 一 继承分类 二 跨域继承的用法 1 继承适配器 2 实际应用 总结 版权声明 前言 我们继续来一起看下ILRuntime的第四个案例 Inherita
  • Java一键授权方案 离线授权 日期授权 代码授权 代码混淆

    Java软件部署到客户端 有时没外网 有时需要对模块时效进行控制 但是通常一般性的lic号注册 很容易被破解 屏蔽 不能保证软件的版权和收益 中小型软件又不能再安全方面投入太大 这时该如何做授权功能呢 我现在向您介绍的是一套具体的授权加密方
  • Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by

    使用node js连接mysql数据库报如下错误 Error ER NOT SUPPORTED AUTH MODE Client does not support authentication protocol requested by s
  • 8、抽象类、接口、多态、向上转型、向下转型

    一 final关键字 1 可以修饰变量 方法 类 2 修饰变量时 变量的值不能再改变 成为一个常量 3 修饰方法时 被修饰的方法不能被修改 4 修饰类时 这个类不能被继承 并且类中的成员方法会隐式地被final修饰 5 当final修饰一个
  • stm32 ucos/ii移植,程序执行到OSStart()内部的OSStartHighRdy()语句时跑飞问题解决方法之一

    stm32 ucos ii移植 程序执行到OSStart 内部的OSStartHighRdy 语句时跑飞问题解决办法之一 网络上的一些解决办法 stm32程序遇到OSStartHang的问题解决方法总结 但并不适合我遇到的情况 我的情况是已
  • WebSocket服务端数据推送及心跳机制(Spring Boot + VUE)

    一 WebSocket简介 HTML5规范在传统的web交互基础上为我们带来了众多的新特性 随着web技术被广泛用于web APP的开发 这些新特性得以推广和使用 而websocket作为一种新的web通信技术具有巨大意义 WebSocke
  • android 倒计时 界面,Android实现倒计时结束后跳转页面功能

    前言 在开发中会经常用到倒计时这个功能 关于倒计时的实现 有疑问的朋友们可以参考这篇 https www jb51 net article 101807 htm 本文主要给大家介绍了关于Android倒计时结束跳转页面的相关内容 分享出来供
  • 部署k8s动态持久卷nfs报错如下:waiting for a volume to be created, either by external provisioner “gxf-nfs-storag

    报错如下 waiting for a volume to be created either by external provisioner gxf nfs storage or manually created by system adm
  • 使用UniFlash闪存编程工具为TM4C129x芯片写入MAC地址

    对MAC地址进行检查和编程 网络上的每个 NIC 网络接口控制器 都必须由一个 MAC 地址唯一标识 以便在网段内进行通信 MAC 地址是一个 48 位值 表示为两个十六进制数字的六个八位字节 MAC 地址主要由设备制造商来分配 前三个八位
  • IPsec 认证头协议(IPsec AH)--网络大典

    IPsec 认证头协议 IPsec AH 是 IPsec 体系结构中的一种主要协议 它为 IP 数据报提供无连接完整性与数据源认证 并提供保护以避免重播情况 一旦建立安全连接 接收方就可能会选择后一种服务 AH 尽可能为 IP 头和上层协议
  • 关于refid的使用

    关于refid的使用 首先定义一个id 然后通过refid通过id将之前定义的内容进行引用 这样适用于同一字符串被大量引用的时候应用 具体代码如下
  • 主线剧情01-ARM-IMX6ULL基础学习记录

    ARM i MX6ULL 基础学习记录 编辑整理 by Staok 本文大部分内容摘自 100ask imx6ull 开发板的配套资料 如 IMX6ULL裸机开发完全手册 等等 侵删 进行了精髓提取 方便日后查阅 过于基础的内容不会在此提及
  • 贵金属交易中做空操作注意事项

    贵金属投资项目流行的原因之一就是其囊括的种类多 这让不同的投资者都可以找到适合自己的投资项目 而且具体到贵金属交易的时候往往形式也很多 比如像伦敦金等产品都可以进行做空操作 而今天就来说说进行做空操作需要注意的地方 第一 提到贵金属交易中的
  • osgFBO(十四)PrerenderOrder的使用

    由于前面是简单的demo 所以不用管渲染次序 然而 实际项目中 会出现多种渲染方式 这时候就要用到 camera gt setRenderOrder osg Camera PRE RENDER 还要加上具体次序 比如 采样摄像机设为2 处理
  • 以太网数据格式与封装解封——以太网基础02

    我们在上一文中介绍了以太网5层模型 这一节我想学习一下以太网数据封装与解封的知识 了解以太网数据是如何传输的 一 数据封装 当我们应用程序用TCP传输数据的时候 数据被送入协议栈中 然后逐个通过每一层 知道最后到物理层数据转换成比特流 送入