当前位置: 首页 > ai >正文

从外卖APP到网络协议:深入解析UDP及应用层协议

目录

  • 1. 应用层和传输层
      • 1.1 开发中常见的自定义协议格式
  • 2. UDP
      • 2.1 源端口号及目的端口号
      • 2.2 UDP报文长度
      • 2.3 UDP校验和(checksum)
  • 3. 基于UDP的应用层协议

关注我,学习更多企业开发和面试内容~

在这里插入图片描述

1. 应用层和传输层

应用层和程序员接触最密切,应用程序?该层很多协议都是程序员自定义的,也有现成的应用层协议,如HTTP协议(超文本传输协议),后面讲。

【例子】 点外卖,首先会看到商家列表,这就涉及到程序和服务器之间的网络通信交互。
协议:以","为分隔符。
请求:用户信息,位置信息。如构造一个“1000,100,32”的字符串。
响应:商家列表,包含:名称,图片,简介,评分。如“麻辣烫,图片地址,好吃,4.8”。

自定义协议只要客户端和服务器能对应上即可。

上述通过文本方式构造的协议,很粗糙,实际开发中很少这么干,下面介绍。

1.1 开发中常见的自定义协议格式

  1. xml(很少用)

通过标签来组织数据,很少用于网络通信,但其他地方会用。与html不同,xml的标签是自定义的。
在这里插入图片描述

【优势】数据可读性高。

【劣势】写起来繁琐,传输时占用的网络带宽多。

  1. json(很流行)

通过键值对结构来组织数据,当下最流行的组织数据的格式。键值对之间用",“分隔,键和值用”:",键是String类型,值可以是数字,字符串,数组,也可以是json等等。
在这里插入图片描述
【优势】数据可读性高。

【劣势】传输时占用的网络带宽多。除非是对性能要求很高的场景,其余很多地方都用json。

  1. protobuffer(pb)

使用二进制的方式来组织数据,可以保证带宽占用最低(相当于把要传递的信息按二进制压缩了)
【优势】占用宽带最低,传输效率最高,适合于对性能要求高的场景。

【劣势】可读性不高(二进制肉眼看不懂),一定程序影响开发效率。(相对于计算机的执行效率,程序员的开发效率更重要)

传输层是面试的考点,也是工作中经常用的。主要的协议有UDP和TCP,还有其他的协议,先学习UDP。


2. UDP

学习一个协议,最主要就是理解协议的报文格式。

【教材】在这里插入图片描述

【我的画图】报头和载荷之间可以认为是一个"字符串拼接"(当然这里是二进制数据)。
在这里插入图片描述

RFC标准文档明确规定了UDP格式,上述图中,UDP报头分成4个部分,每个部分2个字节(16位的数据,表示的范围是0-65535,也就是64kb)。

2.1 源端口号及目的端口号

UDP报文不携带源IP及目的IP(他们不在传输层,而是在网络层)。


2.2 UDP报文长度

UDP数据报占两个字节,最长就是64kb。

若两个字节的长度不够用,能不能改成4个字节?
不能,不是技术上的问题,而是一旦升级通信双方都要升级,一旦一方不愿意,通信就进行不了。


2.3 UDP校验和(checksum)

网络传输中,由于外场干扰,可能会让高电平变成低电平(或低变高),出现数据传输出错的情况。因此需要有办法识别出出错的数据,这个方法就是校验和。

在这里插入图片描述

校验和本质上就是一个字符串,原始数据相同得到的校验和一定相同,但校验和相同得到的原数据大概率相同(理论上会存在不相同的情况,实际概率很低,可以忽略不计)。

如何用校验和完成数据校验?

  1. 发送方把要发送的数据整理好(称为Data1),通过一定的算法计算出校验和checksum1。把Data1和checksum1一起通过网络发送出去。
  2. 接收方收到数据(称为Data2),收到数据checksum1。Data2可能和Data1不一样,接收方通过Data2按相同的算法计算,得到校验和checksum2。
  3. 对比checksum1和checksum2,相同则认为Data1和Data2大概率相同,若不同,则Data2和Data1一定不相同。

【检验和的原理】 计算校验和有很多算法,UDP使用的是CRC算法(循环冗余算法)。

  1. 把当前要计算校验和的数据,每个字节都进行累加,把结果保存到这个变量(2个字节)中,累加溢出也没关系。
  2. 如果中间某个数据出现传输错误,第二次计算校验和就会和第一次不同。
    但CRC这个算法不是特别靠谱,比如数据中前一个字节恰好少1,后一个字节恰好多1。

md5/sha1算法(两种算法差不多,只介绍md5)有一系列公式完成md5计算(怒需要考虑公式啥样),md5的值是一个16进制的数,需要知道md5特点。

【特点】

  1. 定长。无论原始数据多长,计算得到的md5都是固定长度(校验和本身没必要很长,不然不方便网络传输)。
  2. 分散。给定两个原始数据,哪怕绝大部分一样,只要有一个字节不同,得到的md5值都会差异很大。
  3. 不可逆。用原始数据计算md5非常容易,但用md5还原出原始数据很难,基本不可行。

3. 基于UDP的应用层协议

有一些应用层协议是基于UDP实现的,相较于UDP,很多时候会优先考虑TCP。

  1. NFS:网络文件系统
  2. TFTP:简单文件传输协议
  3. DHCP:动态主机配置协议
  4. BOOTP:启动协议(用于无盘设备启动)
  5. DNS:域名解析协议

此外,自定义的UDP程序也可以使用自定义的应用层协议。

http://www.xdnf.cn/news/9821.html

相关文章:

  • [python] argparse怎么指定bool类型?
  • ST-GCN
  • 外地车在北京进京证用完后该如何行驶
  • Free2AI:企业智能化转型的加速器
  • 第七十篇 从餐厅后厨到电影院选座:生活场景拆解Java并发编程核心
  • Unity3D多场景管理框架设计
  • 可靠数据传输原理
  • 3.mkdir新建目录命令与touch新建文件命令
  • Executors工具类的潜在问题
  • Java 面试实录:从Spring到微服务的技术探讨
  • 仿真每日一练 | ABAQUS显式动力学分析——小球跌落
  • JVM——SubstrateVM:AOT编译框架
  • RS232/485转Profinet网关通讯气体检漏仪案例分享
  • Swift 解锁 LeetCode 热门难题:不改数组也能找出重复数字?
  • Nacos 配置管理案例:nacos-spring-cloud-config-example详解
  • IPD的基础理论与框架——(四)矩阵型组织:打破部门壁垒,构建高效协同的底层
  • django项目开启debug页面操作有数据操作记录
  • 首发支持! 基于昇腾MindIE玩转InternVL3多模态理解最新模型
  • 工具识别系统Python+深度学习+人工智能+卷积神经网络算法+TensorFlow+图像识别
  • ppt一键制作:ai自动生成PPT,便捷高效超级精美!
  • 全志F1c200开发笔记——移植Debian文件系统
  • 彻底卸载安装的虚拟机VMware Workstation软件
  • 树莓派超全系列教程文档--(51)如何使用SSH登录树莓派
  • RFID综合项目实训 | 基于C#的一卡通管理系统
  • AI绘画提示词:从零开始掌握Prompt Engineering的艺术
  • 群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案
  • ST MCU CAN模块--TTCAN模式浅析
  • window 显示驱动开发-转换 Direct3D 固定函数状态(一)
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现自定义遥测?
  • Odoo 打印功能架构与工作流程深度剖析