【网络原理】| 应用层协议与传输层协议 (UDP)

news/2024/5/18 13:16:52 标签: 1024程序员节, java, 网络, udp, 网络协议

🎗️ 主页:小夜时雨
🎗️ 专栏:javaEE初阶
🎗️ 乾坤未定,你我皆黑马

目录

  • 一、应用层协议
  • 二、传输层协议(UDP协议)

一、应用层协议

应用层是和代码直接相关的一层,决定了数据要传输什么,怎么去使用这些数据等问题。
应用层这里,虽然存在一些现有的协议(比如HTTP),但是也有很多的情况,需要我们去自定义一些协议,这里的自定协议就是约定应层数据报的数据格式。

  • 如何约定格式?
  1. 确定要传输哪些信息。(根据需求)

比如一个外卖程序,我们需要传输以下的信息。

  • 请求 : 用户id ;用户的位置等
  • 响应 : 若干个商家信息 ; 每个商家信息:商家的名字 ; 图片 ; 评分 ; 类型等

在这里插入图片描述
2. 确定数据按照什么样的格式来组织的
一个简单的方案就是按照分隔符进行组织数据,如下图:

在实际的开发中,还有一些现成的格式,是可以直接使用的

  • xml格式

这种格式主要是通过标签的形式来组织数据,具体如下图:
在这里插入图片描述
其中 html 可以看作是 xml 的特殊情况

  • json 格式

json 是使用 {} 来作为标识的
在这里插入图片描述

二、传输层协议(UDP协议)

学习协议的一个重要环节:认识 协议的报文格式

UDP的报文格式:
在这里插入图片描述
在这里插入图片描述

  • UDP的特点
  1. 无连接
    知道对端的 ip 和 端口号就可以进行通信,不需要建立连接
  2. 不可靠
    没有任何的安全机制,即是 发送端发送数据报之后,如果因为某些原因,接收端没有收到来自发送端的数据,UDP协议层也不会给发送端返回任何的错误提示信息
  3. 面向数据报
    应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并
  4. 全双工
    UDP只有接收缓冲区,没有发送缓存区

UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议
进行后续的传输动作;

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃;

UDP的 socket 既能读,也能写,这个概念叫做全双工

  • 源端口和目的端口

两者描述了数据从哪里来以及到哪里去,ip 地址用来区分是哪一个主机,一个主机上有多个应用程序,运用端口号来区分出具体的程序。

  • 报文长度

表示了 UDP 数据报的长度,2个字节,能表示的最大长度是65535即是64KB,所以传输一个UDP 数据报的最大长度就是64KB

若是传输比较大的数据,怎么解决?

  1. 将数据拆分成多个部分,使用多个 UDP 数据报进行传输,类似于多次搬东西,但是比较复杂
  2. 直接使用 TCP 协议,TCP对数据长度没有限制
  • 校验和

意义: 用来判断当前传输的数据是否发生错误
校验和往往就是去内容或者是内容的一部分,通过一些算法或者数学公式,进行一些变换得到一个数值。
如果内容发生了改变,则校验和也就会发生了变化,也就可以感知到传输出错

  • 扩展问题

经典面试题:

  1. UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传输,应该如何设计?
  2. UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?

以上两个问题答案类似,都可以参考TCP的可靠性机制在应用层实现类似的逻辑:
例如:
引入序列号,保证数据顺序;
引入确认应答,确保对端收到了数据;
引入超时重传,如果隔一段时间没有应答,就重发数据;

🎗️🎗️🎗️ 好啦,到这里有关 应用层协议与传输层协议 (UDP) 的分享就没了,如果感觉做的还不错的话可以点个赞,关注一下,你的支持就是我继续下去的动力,蟹蟹大家了,我们下期分享传输层协议 (TCP),拜拜~ ☆*: .。. o(≧▽≦)o .。.:*☆


http://www.niftyadmin.cn/n/5121169.html

相关文章

在Linux上实现ECAT主站

在Linux上实现ECAT主站 引言介绍EtherCATSOEM 使用下载ECAT主站编译 引言 EtherCAT由一个主站设备和多个从站设备组成。主站设备使用标准的以太网控制器,具有良好的兼容性,任何具有网络接口卡的计算机和具有以太网控制的嵌入式设备都可以作为EtherCAT的…

一颗老鼠屎同事的坏味道(持续更新,欢迎补充)

代码的坏味道VS老鼠屎的坏味道 一颗老鼠屎,如何坏了一锅粥浅谈老鼠屎如何晋升 罗列老鼠屎的坏味道(持续更新) 一颗老鼠屎,如何坏了一锅粥 不知道你身边是否与这样的同事?代码写的很垃圾,不会封装&#xff…

极智项目 | 实战静默活体人脸检测

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍 实战静默活体人脸检测。 本文介绍的 实战静默活体人脸检测,提供完整的可以一键执行的项目工程源码,获取方式有两个&#xff1a…

如何选用团队协作办公软件?

在如今的企业中,团队协作软件已经成为了必不可少的工作工具。它们能有效地提高企业的工作效率,有助于提高团队间的信息共享和沟通。恰当的团队协作软件不仅能让团队成员享受到更好的工作体验,也能够提升企业的竞争力。那么,如果您…

【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)

Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT 写在最前面背景介绍自动程序修复流程Process of APR (automated program repair)1、漏洞程序2、漏洞定位模块3、补丁生成4、补丁验证 (可以学习的PPT设计)经典的…

洲际酒店及度假村焕新开拓,缔造难以忘怀的非凡时刻

以数字创新技术,持续打造别开生面的奢华旅居体验 2023年10月18日,上海 - 近日,洲际酒店集团旗下奢华精品酒店品牌——洲际酒店及度假村宣布将在全球范围内启动品牌焕新计划,揭开激动人心的发展新篇章。多年来,品牌持续…

iOS .a类型静态库使用终端进行拆解和合并生成

项目中会用到许多第三方的.a类型的静态库,有时候会有一些静态库回包含相同文件而产生冲突,我们就需要对这个库进行去重的一个操作。一般有哪些文件冲突了,xcode报错都会有详细的提示。我们可以将这两个库合并,也可以其中一方中的文…

vue钩子函数以及例子

Vue.js 是一个基于组件化的前端框架,它提供了一些钩子函数,用于控制组件在不同阶段的行为和处理。以下是 Vue.js 常用的钩子函数以及它们的作用和示例: beforeCreate:在实例被创建之前调用。此时组件的数据、方法等还没有被初始化…