UDP协议

小王学习录

  • 自定义应用层协议
    • 为什么要自定义应用层协议
    • 如何自定义应用层协议
  • UDP协议
    • 端口号
    • UDP数据报

自定义应用层协议

为什么要自定义应用层协议

生活中要实现的业务流程是多种多样的, 使用现有的统一的应用层协议不足以完成业务需求, 因此需要自定义应用层协议

如何自定义应用层协议

  1. 首先需要结合业务需求确认请求响应(客户端和服务器之间传递)的是哪些数据
  2. 然后约定好传递的数据的格式, 这样是为了客户端和服务器之间传递的数据能够相互解析

目前典型的数据格式有以下三种

  • XML 标签化的数据组织格式, 使用标签来表示键值对和树结构, 标签名字和内容是由自己指定的, 然后代码中赋予标签名字所表示的含义
<response><商铺><第一家商铺><name>小王面馆</name></第一家商铺><第二家商铺><name>小李面馆</name></第二家商铺><第三家商铺><name>小张面馆</name></第三家商铺></商铺>
</response>
  • Json
{商铺[{name: "小王面馆"}{name: "小李面馆"}]
}
  • protobuffer(二进制格式)
    使用二进制的方式将数据进行压缩, 肉眼无法识别, 占用内存较小, 传输时使用的带宽较小

UDP协议

提到UDP,就不得不说它的特点了:不连接,不可靠,面向数据包,全双工
在详细介绍UDP协议和TCP协议之前,先简单说一下端口号

端口号

  1. 端口号是用来区分一个主机上不同应用程序(实际上是进程)的,所以一个主机上的一个端口不能同时被多个进程绑定。
  2. 端口号是用两个字节,也就是16个比特位来表示的。因此端口号的取值范围是0~65535,其中0 ~1024是知名端口,被一些广泛使用的应用所绑定。因此在编码时绑定端口一般从1025开始(我们并不清楚当前主机是否安装了绑定了知名端口的应用)

UDP数据报

通过之前的学习我们已经知道UDP数据报是由报头载荷(payload)组成的,载荷部分是socket对象调用send方法取到的,然后在载荷前面拼接上了8个字节的报头,如图:
在这里插入图片描述

报头:

  1. 在报头中包含了一些属性信息,不同的协议报头属性信息不同,所占的空间也就不同。对于DUP来说,报头共有8个字节
  2. 这八个字节分成四个字段,分别存储源端口目的端口UDP数据报长度校验和。每一部分占两个字节
  3. 源端口和目的端口占两个字节好理解,因为端口号本来就占两个字节。
  4. UDP数据报长度占两个字节,单位为字节,也就是理论上一个UDP数据报中UDP头+载荷的长度最大为65535个字节。由1kb=1024byte,就可以知道理论上一个UDP数据报的最大长度为64kb
  5. 校验和:校验和是为了确保数据的准确性。我们知道这些数据最后是以光信号/电信号传输的,而在传输过程中有可能会由于电场、磁场或高能射线等因素的干扰而造成比特翻转
    (1)比特翻转:就是比特流数据发生了变化,如1变成0,0变成1。这种情况在理论上是存在的且无法避免的,我们能做的就是使用校验和及时识别出数据是否发生了变化
    (2)校验和如何生成:校验和的生成是对数据通过一系列的数学计算得到一个较小的值。在发送时对数据进行计算得到一个校验和,写入报头,然后在分用时对传输过去的数据重新计算校验和,比较两次校验和是否一致,如果一致则认为数据正确。目前知名的计算校验和的算法有以下三个:

1> CRC循环冗余检验:设置一个初始值为0,对数据中的每个字节都进行累加,累加溢出则放弃高位。这种方式冲突概率比较大,比如前一个字节少1而后一个字节多1,则会出现数据已经发生变化而CRC值不变的情况
2> MD5算法:MD5算法进行的数学计算及其复杂,也就有了如下几个特点:

定长:无论原始数据有多长多短,经过MD5算法进行计算的结果长度是一点的
冲突概率小:即使数据只有一处发生了改变最后计算出的结果都会相差很大
不可逆:通过校验和反向计算原始数据计算量极大,理论上不可能实现,现在出现的MD5解密只是将常见的字符串和其所对应的MD5值进行了匹配,通俗一点讲就类似于万能钥匙的暴力破解

正是由于MD5算法有以上的特点,所以MD5算法不仅用于计算校验和,还可以用来计算hash值数据加密

3> SHA1算法。SHA1算法特点与MD5相似,只是计算方式不同

对UDP结构图进行完善就是:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sitespeedio.io 前端页面监控安装部署接入influxdb 到grafana

1.docker部署influxdb,部署1.8一下&#xff0c;不然语法有变化后面用不了grafana模板 docker run -d -p 8086:8086 --name influxdb -v $PWD/influxdb-data:/var/lib/influxdb influxdb:1.7.11-alpine docker exec -it influxdb_id bash #influx create user admin with pass…

京东大数据平台(京东数据分析):9月京东牛奶乳品排行榜

鲸参谋监测的京东平台9月份牛奶乳品市场销售数据已出炉&#xff01; 9月份&#xff0c;牛奶乳品市场销售呈大幅上涨。鲸参谋数据显示&#xff0c;今年9月&#xff0c;京东平台牛奶乳品市场的销量为2000万&#xff0c;环比增长约65%&#xff0c;同比增长约3%&#xff1b;销售额为…

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!

目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2&#xff0e;单样本秩和检验 四、结果解读第一&#xff0c;假设检验摘要第二&#xff0c;Wilcoxon符号检验结果摘要。第三&#xff0c;Wilcoxon符号秩检验图第四&#xff0c;数…

CN考研真题知识点二轮归纳(1)

本轮开始更新真题中涉及过的知识点&#xff0c;总共不到20年的真题&#xff0c;大致会出5-10期&#xff0c;尽可能详细的讲解并罗列不重复的知识点~ 目录 1.三类IP地址网络号的取值范围 2.Socket的内容 3.邮件系统中向服务器获取邮件所用到的协议 4.RIP 5.DNS 6.CSMA/CD…

在Linux环境下远程访问MeterSphere开源测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

为什么前端用vue的公司越来越多?

Vue.js是一款流行的JavaScript框架&#xff0c;被广泛应用于Web开发中。它相比于其他框架具有一些有利的特点&#xff0c;所以受到许多开发人员的青睐。可以用“简单易学、响应式数据绑定、轻量高效、生态系统丰富、渐进式框架”等概括VUE的技术优势。 Vue 3.0是Vue.js于2022年…

hadoop hdfs的API调用,在mall商城代码中添加api的调用

在网上下载了现成的商城代码的源码 本次旨在熟悉hdfs的api调用&#xff0c;不关注前后端代码的编写&#xff0c;所以直接下载现成的代码&#xff0c;代码下载地址。我下载的是前后端在一起的代码&#xff0c;这样测试起来方便 GitHub - newbee-ltd/newbee-mall: &#x1f525; …

Flutter 04 按钮Button和事件处理、弹框Dialog、Toast

一、按钮组件 1、按钮类型&#xff1a; 2、按钮实现效果&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);overrideWidget build(BuildContext co…

python爬虫—使用xpath方法进行数据解析

1. 背景信息 爬取安居客二手房源信息 URL地址&#xff1a;https://wuhan.anjuke.com/sale/?fromnavigation 2. 代码实现 import requests from lxml import etreeif __name__ __main__:# 1.指定URLurl "https://wuhan.anjuke.com/sale/?fromnavigation"# 2.U…

Vue 项目中如何使用Bootstrap5(简单易懂)

Vue 项目中如何使用Bootstrap5&#xff08;简单易懂&#xff09; 安装在 src/main.js 文件下引入包在vue文件中使用 Bootstrap官网&#xff08;中文&#xff09;&#xff1a;https://www.bootcss.com/ Bootstrap5文档&#xff1a;https://v5.bootcss.com/docs/getting-started/…

40 深度学习(四):卷积神经网络|深度可分离卷积|colab和kaggle的基础使用

文章目录 卷积神经网络为什么要卷积卷积的具体流程池化tensorflow代码 深度可分离卷积原理介绍计算量对比代码参数计算例子 colab 和 kagglecolabkaggle如何在colab上使用kaggle的数据 卷积神经网络 卷积神经网络的基本结构 1&#xff1a; (卷积层(可选)池化层) * N全连接层 *…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建

营销模式 通用版本&#xff08;标准多商户入驻二级分销体系满减、满送、优惠券、组合销售、平台礼包等营销活动&#xff09; 直播、短视频带货版本&#xff08;标准多商户入驻直播、短视频带货二级分销体系满减、满送、优惠券、组合销售、平台礼包等营销活动&#xff09; 特殊营…