协议篇之以太网UDP协议

news2024/9/26 5:21:24

协议篇之以太网UDP协议

  • 一、写在前面
  • 二、TCP/IP协议分层
  • 三、UDP协议数据报格式
    • 2.1 MAC层/物理层:
    • 2.2 IP层/网络层:
    • 2.3 UDP层/传输层:
    • 2.4 应用层:
  • 四、总结
  • 四、写在后面

一、写在前面

  TCP/IP协议是指一个协议簇,可以理解为以太网通信协议的集合,在这个集合里面有很多种协议,比如:TCP、IP、UDP等,其中,由于TCP核IP最为常用,所以协议的集合就命名为TCP/IP协议。本文中主要学习以太网TCP/IP协议的分层与传输层协议中的UDP协议。

二、TCP/IP协议分层

  在TCP/IP协议中,一般可以分为5层:应用层、传输层、网络层、数据链路层和物理层。以上五层协议构成了TCP/IP协议的基础,每一层都有其特定的功能和协议,通过不同层级的分工合作,TCP/IP协议能够实现互联网的通信。

在这里插入图片描述

  • 应用层(Application Layer):应用层就是我们需要通过用户传输的数据;
  • 传输层(Transport Layer):这一层提供端到端的通信服务。常见的传输层协议有TCP和UDP协议;
  • 网络层(Network Layer):这一层负责将数据报从源主机发送到目的主机。常见的网络层协议包括IP协议和ICMP协议;
  • 数据链路层(Data Link Layer):这一层将数据包转换为帧,并将它们传输到网络。常见的数据链路层协议包括以太网和Wi-Fi;
  • 物理层/MAC层(Physical Layer):这一层负责在物理媒介上传输数据。常见的物理层协议包括有线电缆、光纤和无线电波;

三、UDP协议数据报格式

  那么,下面,我们对网络层采用IP协议,传输层采用UDP协议的分层各层数据报格式进行讲解,分层情况概览如下图所示。

在这里插入图片描述

2.1 MAC层/物理层:

  MAC层主要包括前导码Preamble、帧开始符SFD、以太网帧头、MAC数据段和帧校验序列FCS,其中,以太网帧头又可以分为目的MAC地址、源MAC地址和长度/类型三个部分,如下。在这里值得注意的是,

在这里插入图片描述

  • 前导码(Preamble):前导码为7个字节的0和1交替的二进制值,即0x55-55-55-55-55-55-55;
  • SFD(帧开始符):表示一帧的开始,为1字节的固定值0xd5;
  • 目的MAC地址:目的主机的MAC地址,长度为6个字节。MAC地址根据目的主机的个数又分为单播地址、组播地址和广播地址;
  • 源MAC地址:源主机的MAC地址,长度6个字节;
  • 长度/类型:长度为2字节,当这两个字节的值小于1536(十进制)时,代表该以太网MAC帧中数据段的长度;当这两个字节的值大于1536时,则表示该以太网MAC层的上层协议是什么协议,比如:0x0800表示IP协议,0x0806表示ARP协议;
  • MAC数据段:MAC数据段的数据长度在46~1500字节之间,如果MAC数据段的长度小于46字节,则补0到长度为46字节;
  • FCS(帧校验序列):帧校验序列是4字节的CRC校验码,用来在接收端检测传输数据的正确性。CRC数据校验是从以太网帧头开始,到MAC数据段结束,不包含前导码Preamble和帧开始符SFD。

2.2 IP层/网络层:

  MAC层数据段即IP数据报,IP数据报主要包括IP首部和IP数据段两个部分,其中,IP首部又可以分为多个部分,包括协议版本、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、首部校验和、源IP地址、目的IP地址、可选字段。IP首部如下图所示。
在这里插入图片描述

  • 协议版本:协议版本的长度为4比特,有IPV4和IPV6两种,当值为0x4时,表示IPV4,当值为0x6时,表示IPV6;
  • 首部长度:首部长度是值IP首部的长度,位宽为4比特,这里需要注意的是这里对IP首部长度的度量单位不是1字节,也不是1比特,而是4字节,比如IP首部长度是20字节时,则首部长度是5(即20/4=5),此时无可选字段;
  • 服务类型:服务类型用于描述IP数据包的优先级和服务质量;
  • 总长度:总长度是指IP数据报的总长度(不是指IP数据段),包括IP首部+IP数据段的长度,位宽为2字节;
  • 标识:用于标识IP数据包,通常由发送方设置;
  • 标志:该字段包含3个标志位,分别是MF(More Fragments)、DF(Don’t Fragment)和Reserved,用于控制IP数据包的分片和重组;
  • 片偏移:该字段用于指示分片数据在原始数据中的位置;
  • 生存时间:生存时间用于控制IP数据包在网络中的生存时间,以避免数据包在网络中无限循环
  • 协议:协议部分是指上层协议的类型(即传输层协议的类型),常见的协议号有:0x00(IP协议)、0x01(ICMP协议)、0x06(TCP协议)、0x17(UDP协议);
  • 首部校验和:首部校验和是对IP首部进行校验得到的校验和;
  • 源IP地址:源主机的IP地址,4字节,比如192.168.0.2;
  • 目的IP地址:目的主机的IP地址,4字节,比如192.168.1.1;
  • 可选字段:可选,没有的时候长度可以为 0,该字段最大字长度40字节;
  • IP数据段:IP数据报的数据段部分;

在这里插入图片描述

在这里,IP层的首部校验和计算步骤如下:
(1)将IP首部每16bit(2字节)看成一段数据,如果IP首部的长度不是16bit(2字节)的整数倍,则在IP首部的尾部补充0x00直到IP首部为2字节的整数倍;
(2)将IP首部的每16bit进行累加求和,得到一个32位的累加和;
(3)将32位累加和的高16位与低16位相加,直到得到一个16位的结果;
(4)对16位的结果按位取反,取反后的结果即为IP首部校验和;

  需要注意的是,在计算IP首部校验和的时候,需要把IP首部中的首部校验和字段先置为0x00,在计算完IP首部校验和后,再将IP首部校验和填入到该字段。

2.3 UDP层/传输层:

  IP数据段部分即UDP数据报,UDP数据报包括UDP首部和UDP数据段两个部分。其中,UDP首部又分为:源端口号、目的端口号、UDP长度、UDP校验和。UDP首部如下图所示。

在这里插入图片描述

  • 源端口号:2字节,源端口号,需要对方回信时选用,不需要时全部置0;
  • 目的端口号:2字节,目的端口号,在终点交付报文时需要用到;
  • UDP长度:2字节,UDP数据报的长度,最短为8字节,即不传输数据,UDP数据段为空;
  • UDP校验和:2字节,在接收端,根据UDP头部和UDP数据段进行计算得到,在接收端,利用UDP校验和;
  • UDP数据段:UDP数据段即用户需要发送的数据;

在这里插入图片描述

  在这里,对于UDP校验和计算步骤,如下:

(1)将UDP数据报的头部和数据部分看作一个连续的16位字节序列,即将UDP数据报每两个字节看成一段数据(如果UDP数据报的长度为奇数字节,则在尾部补充一个字节0x00);
(2)将这个16位字节序列按照每两个字节一组(即16位一组)进行累加,得到一个32位的累加和;
(3)将32位累加和的高16位与低16位相加,直到得到一个16位的结果;
(4)将16位的结果按位取反,按位取反后得到的值即为UD校验和;

  需要注意的是,计算UDP校验和的时候,UDP头部中的校验和字段的值应该先置为0,只有在计算完检验和之后才能在校验和字段填入正确的值。

  UDP校验和与IP首部校验和的区别?
  UDP校验和与IP首部校验和的计算方法是一致的,区别在于UDP校验和是对UDP层(传输层)的UDP头部和UDP数据段进行校验,而IP首部校验和只是对IP层(网络层)的IP头部进行校验。

2.4 应用层:

  UDP层的数据段即应用层的数据报,即用户需要发送的数据。

在这里插入图片描述

四、总结

  从数据报的格式角度来看,TCP/IP数据包的分层更像是一层一层的包装(套外壳),如下图所示。

在这里插入图片描述

  在发送端,就像是给一个东西“包装”的过程。如下图所示。从用户层开始,用户传输的数据作为用户层的数据包给到传输层,传输层给其加一层包装(UDP首部)后再传给网络层,网络层对传输层传来的数据包再加上一层包装(IP首部)后传给数据链路层,而数据链路层再对网络层传来的数据包加上一层包装(以太网帧头、FCS)后就可以传到物理层,物理层对数据链路层传来的数据包进行包装(加上前导码、SFD)后就是一帧完整的以太网帧了,就可以用于数据的传输了。

在这里插入图片描述
  而在接收端,就像是一个“拆包装”的过程,如下图所示。接收到一帧完整的以太网帧,首先从物理层开始拆包装,物理层获取到物理层的包装上的信息(前导码、SFD)后,把拆除外包装的产品(物理层的数据段)丢给数据链路层。数据链路层在获取到数据链路层包装上的信息(以太网帧头、FCS)后,把数据链路层的数据段丢给网络层。然后网络层在获取到网络层的外包装上的信息(IP首部)后,再将网络层拆除包装后的产品(IP数据段)丢给传输层。传输层在获取到传输的外包装上的信息(UDP首部)后,再将传输层拆除包装后的产品(UDP数据段)丢给用户层。最后,用户层即我们最终需要获得的用户发送的数据。

在这里插入图片描述

四、写在后面

  好了,以上就是关于以太网TCP/IP协议分层的介绍,以及对传输层采用UDP协议,网络层采用IP协议的情况下的各层数据报格式进行讲解。
  以上仅为个人学习笔记,如有疑问,欢迎评论区友好交流批评指正!!!

在这里插入图片描述

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

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

相关文章

测试包的更新

有的项目有配了ci自动打包更新,开发有权限,就不用测试更新;有的是在阿里云上,测试没有权限,也是开发更新;测试自己的测试服务器,部分开发没有上传下载的权限,所以需要测试来进行更新…

CentOS 8自动化安装MongoDB并安装和实验master-slave集群、副本集群(Replica Set)、分片集群(Sharding)

文章目录CentOS 8自动化安装MongoDB安装Master-Slave集群安装并测试副本集(Replica Set)集群安装副本集(Replica Set)集群实验测试安装并测试分片集群(Sharding)注意实验使用的是ARM架构的CentOS 8 虚拟机 CentOS 8自动化安装MongoDB 首先,更…

分布式事务-概念-实现方式

分布式事务 文章目录分布式事务一、分布式事务相关概念1.分布式事务架构图2.理解本地事务相关概念3.理解分布式事务相关概念1.CAP理论2.刚性事务(CP)与柔性事务(AP)3.基于AP模型衍生下的BASE理论4 .如何从大方向选择分布式事务&am…

MySQL正则表达式 | 事务详解

目录 一、正则表达式 实例操作 二、事务 事务控制语句 MYSQL 事务处理主要有两种方法 SQL测试代码 PHP中使用事务实例 使用保留点 SAVEPOINT 一、正则表达式 MySQL可以通过 LIKE ...% 来进行模糊匹配。 MySQL 同样也支持其他正则表达式的匹配, MySQL中使用…

【嵌入式Linux内核驱动】GPIO子系统

GPIO子系统 总体框架 通用功能 可以设为输出:让它输出高低电平;可以设为输入,读取引脚当前电平;可以用来触发中断 通用属性 Active-High and Active-LowOpen Drain and Open Source 开漏和开源 GPIOLIB向上提供的gpiod相关接…

数据结构与算法之手撕排序算法

前言 为什么要学习排序算法? 根据统计,早起大型机CPU资源的四分之一都花在了数据排序上面。排序算法作为最基础的算法,各种操作系统、编程语言都提供了内置的实现。既然排序实现随处可见,我们为什么还要自己动手实现呢&#xff1…

文章伪原创-文章伪原创工具

伪原创原理 文章伪原创的原理是将一篇原始文章进行修改、改写、调整或者替换一些词句等方式,生成与原始文章类似但又不完全相同的新文章。 文章伪原创的实现需要用到自然语言处理技术和相关的算法。具体的过程包括以下几个步骤: 分析原始文章&#xff…

YML是一种数据存储格式

读取yml配置信息 Value("${province}") private String province; Value("${user.sname}") private String name1; Value("${user1[1].name}") private String name; Value("${server.port}") private int port; server:port: 8099 #…

大数据现在找工作难么

大数据行业工作好找还是难找不是光靠嘴说出来的结合实际,看看市场上的招聘需求和岗位要求就大致知道了 要想符合企业用人规范,学历,工作经验,掌握技能都是非常重要的~ 先来看几个招聘网站的报告数据: Boss直聘发布的…

Linux应用编程(系统信息与系统资源)

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取系统信息,譬如获取系统时间、日期以及设置系统时间、日期等&#xf…

java拦截器怎么实现

Java拦截器是一种对象拦截器,它可以拦截任何的类、方法和字段。拦截器还可以用于检查类是否已经加载以及对字段的访问权限是否符合规范。下面就让我们来了解一下 java拦截器怎么实现吧。 在 Java中,可以通过重写方法和代码块来实现拦截功能,但…

通俗讲解什么是Socket通讯

Socket通讯原理 1、什么是Socket? Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。 Socket是一套…

【python】类和对象 | 一些混淆的知识点再复盘 | 魔术方法(特殊方法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、魔术方法二、构造方法三、__ getitem __方法四、__ len __方法前言 参考视频:视频 一、魔术方法 首先看一看chatgpt对魔术方法(特…

一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 xlsxwriter 模块:用于创建 Excel .xlsx 文件, 资料整理笔记(大全)摘要模块图类关系图模块全展开【xlsxwriter】统计常量模块1 xlsxwrite…

数据爬虫爬数据时常遇到的问题

第一,可能不能直接通过pyppeteer简单的直接page.querySelectorAll()获取所有元素然后直接 str(await (await element_songer_name.getProperty("title")).jsonValue()) 得到数据值,主要原因可能是#document问题, 所以遇到这个问题…

vue项目配置不同环境打包指令(vue-cli2、vue-cli3项目)

目录 一、vue-cli3项目:1、项目根目录创建环境文件2、 配置打包指令3、打包生成不同的dist文件夹 二、vue-cli2项目1、配置指令2.创建环境文件3、config/index.js中添加 三、遇到的问题1.vue-cli3项目配置打包指令,没有生成css文件--mode test2、vue-cli…

UE DTMqtt 虚幻引擎 Mqtt 客户端插件说明

目录 CreateMqttClient Connect Subscribe UnSubscribe Publish Disconnect BindConnectedDelegate BindConnectionLostDelegate BindMessageDelegate CreateMqttClient 创建一个Mqtt客户端对象 Connect 链接Mqtt服务器Subscribe 订阅消息频道UnSubscribe 取消订阅频道…

【go项目-geecache】动手写分布式缓存 - day3 - HTTP 服务端

收获总结: 了解go函数的可变参数的使用,还有切片展开的方式即…了解了HTTP通信方式,hinder的使用了解了go.mod ,import 和modoule的使用 分布式缓存需要实现点对点的通信,我们可以使用HTTP来实现节点之间的通信&…

Linux·IO子系统和文件系统读写流程

目录 1.概述 2.linux IO子系统和文件系统读写流程 3.IO之流程与buffer概览 4.IO队列和IO调度 1.概述 分析一下写操作: char *buf malloc(MAX_BUF_SIZE); strncpy(buf, src, , MAX_BUF_SIZE); fwrite(buf, MAX_BUF_SIZE, 1, fp); fclose(fp); 以下图为例&…

九耶丨钛伦特-用深度学习实现垃圾图像分类(二)

3 构建模型 这里大家可以使用自己在项目 2 中寻找到的最好的模型结构,做为示例,这里以实验2-3 中的 snet 模型为基础,并进行细微的调整。 样例代码: 需要注意的是,我们在第一层卷基层之后增加了一层池化层,主要是为了降…