Java EE|TCP/IP协议栈之传输层UDP协议详解

news2024/11/13 13:49:57

文章目录

    • 一、对UDP协议的感性认识
      • 简介
      • 主要特点
    • 二、UDP的报文结构
      • 协议端格式概览
      • 报文结构详解
        • 源端口
        • 目的端口
        • 16位UDP报文长度
        • 16位校验和
    • 参考

一、对UDP协议的感性认识

简介

UDP,是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI和TCP/IP协议族参考模型中的一种无连接的传输层模型。

UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。许多应用只支持UDP如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。**当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。**在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择。

主要特点

无连接、不可靠传输、面向数据报、全双工。

其中在之间的网络编程之套接字 UDP一文中,我已就UDP的无连接、面向数据包、全双工做了解释。所以这里我们需要重点解决的问题就是如何理解UDP的不可靠传输。

要想理解这个特点,我们就需要剖析好UDP的报文结构以及内部的一些原理。

二、UDP的报文结构

协议端格式概览

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M4KO04uJ-1676885461888)(F:\typora插图\image-20230220165606281.png)]

这里报头每个字段都是使用两个字节描述,也就是说UDP的报头是8个字节。

报文结构详解

源端口

我们已经知道一次完整的网络通信,有一个通信五元组:源ip、源端口、目的ip、目的端口、协议号(进程要封装、解析的数据报的数据格式)。

这里边,UDP的包头就体现了,源端口就是发送方的端口号。

目的端口

顾名思义,接收方的端口号。

16位UDP报文长度

这个字段表示的长度不是UDP载荷 的长度,而是整个UDP报文的长度。

216=65536,也就是说16位表示的范围是0~65535(长度是非负数),也就是说64kb(210=1kb,2^6*10kb=64kb)。但是我们日常生活的数据一般是很大的,如果来自上层即应用层的数据报,超过了64kb怎么办?

对此,我们有两种解决办法

1.我们首先要知道,应用层代码是程序员自己根据业务编写的。所以,我们可以在应用层的代码层面上,对应用层的数据进行手动分包,拆分成多个UDP数据包进行传输。

2.不使用UDP,使用TCP。TCP对数据报的长度没有限制。

很显然,我们自己手动分包会衍生出来很多问题,所以这种情况下,我们是不使用UDP的。

16位校验和

校验和的作用是为了验证传输的数据是否是正确的。

网络传输过程中,很可能会受到一些干扰,在这些干扰下,可能出现“比特翻转”的情况。(比特翻转即1变0,0变1).

为什么可能会收到一些干扰,因为最终这些信息都需要转换成光信号/电信号进行传输,很可能会受到一些物理环境影响,比如电场、磁场或者高能射线等。

一旦发生比特翻转,很可能带来致命的打击。

校验和就不能降低数据发生比特翻转的概率,但是它能够很大程度上告诉我们它已经翻转了,这个数据已经脏了,我们不能使用。

校验和是针对数据内容进行一些列的数学运算,得到一个比较短的结果。

如果传输前后数据内容一直,得到的校验结果一定;

如果数据变了,得到的校验结果大概率也变了。

注意:校验和一致,也不代表着中间没有发生比特翻转。理论上存在,但是工程上我们将这种特殊情况忽略不计。

以上便是关于校验和,我们需要重点理解的东西。下边我们简单说几个比较知名的计算校验和的算法。

1.CRC:循环冗余校验。特点是简单粗暴,但是校验效果不佳。每个字节循环累加,溢出的高位舍去。

2.MD5:有一系列公式进行复杂运算。特点是定长、冲突概率小、不可逆。这里的定长是指无论原始数据多长,得到的MD5值都是固定长(4/8Byte)。冲突概率小是因为原数据只要改变一个地方,MD5值都会变化很大,冲突的概率极小。不可逆是通过原始数据计算很容易,通过MD5还原成原始数据很难,理论上不可实现,计算量极大。

应用:校验和、作为哈希值的获取方式、加密

3.SHAI:与MD5类似,但是计算方法不同

参考

UDP简介

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

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

相关文章

Leetcode力扣秋招刷题路-0081

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 81. 搜索旋转排序数组 II 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 在传递给函数之前,nums 在预先未知的某个下标 k(0 &…

公安局靶场建设规划设计

随着我国国家安全形势的变化,公安工作也面临着越来越严峻的挑战。为了提高公安干警的专业技能和反恐能力,建设一座现代化的靶场已成为公安局的迫切需求。本文将介绍公安局靶场建设的重要性,靶场的规划与设计以及建设过程中需要注意的事项。 一…

Pyspark基础入门4_RDD转换算子

Pyspark 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hi…

Flex写法系列-Flex布局之基本语法

以前的传统布局,依赖盒装模型。即 display position float 属性。但是对于比较特殊的布局就不太容易实现,例如:垂直居中。下面主要介绍flex的基本语法,后续还有二期介绍Flex的写法。一、什么是Flex布局?Flex布局个人…

Vuex的创建和简单使用

Vuex 1.简介 1.1简介 1.框框里面才是Vuex state:状态数据action:处理异步mutations:处理同步,视图可以同步进行渲染1.2项目创建 1.vue create 名称 2.运行后 3.下载vuex。采用的是基于vue2的版本。 npm install vuex3 --save 4.vu…

Frequency Domain Model Augmentation for Adversarial Attack

原文:[2207.05382] Frequency Domain Model Augmentation for Adversarial Attack (arxiv.org)代码:https://github.com/yuyang-long/SSA.黑盒攻击替代模型与受攻击模型之间的差距通常较大,表现为攻击性能脆弱。基于同时攻击不同模型可以提高…

C++8:模拟实现list

目录 最基础的链表结构以及迭代器实现 链表节点结构 构造函数 push_back list的迭代器 增删查改功能实现 insert erase pop_front pop_back push_front clear 默认成员函数 析构函数 拷贝构造函数 赋值操作符重载 list的完善 const迭代器 赋值操作符重…

使用BP神经网络诊断恶性乳腺癌(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 1.1.算法简介 BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出&#xf…

c语言编程规范第三部分

3、头文件应向稳定的方向包含 头文件的包含关系是一种依赖,一般来说,应当让不稳定的模块依赖稳定的模块,从而当不稳定的模块发生变化时,不会影响(编译)稳定的模块。就我们的产品来说,依赖的方向…

数据复制 软件 SnapMirror:统一复制,更快恢复

数据复制 软件 SnapMirror:统一复制,更快恢复 预测未知领域是一项棘手的工作。让 SnapMirror 软件来处理则轻松得多。 通过数据的高可用性和快速数据复制,可即时访问业务关键型数据。放松一下,它会让你满意的。 为什么用 SnapMi…

3D目标检测(一)—— 基于Point-Based方法的PointNet系列

3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 目录 3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 前言 零、网络使用算法 …

AQS与Synchronized异曲同工的加锁流程

在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁。Synchronized是基于JVM实现,而ReentrantLock是基于Java代码层面实现的,底层是继承的AQS。 AQS全称…

c++函数对象(仿函数)、谓词、内建函数对象

1、函数对象 1.1 概念 重载函数调用操作符的类,这个类的对象就是函数对象,在使用这个函数对象对应使用重载的()符号时,行为类似于函数调用,因此这个函数也叫仿函数。 注意:函数对象&#xff0…

多个任务并行的时候,你是否总是会手忙脚乱?

很多重要事情之所以变得迫在眉睫,需要立刻处理、应付,是因为被延误或没有进行足够的预防和准备,筹划。 面对多个任务并行的时候,你是否总是会手忙脚乱? 在项目工作中,管理者每天要面对各种工作&#xff…

移动WEB开发二、流式布局

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

【Linux】线程函数和线程同步详细整理(金针菇般细)

目录 一,线程函数 1.获取当前线程ID 2.创建线程 3.退出线程 4.阻塞线程 5.分离线程 6.取消线程 7.线程比较 8.测试代码(线程函数总结) 二,线程同步 1.互斥锁 2.读写锁 3.条件变量 4.信号量 一,线程函数 …

【阿旭机器学习实战】【29】产品广告投放实战案例---线性回归

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。 目录问题描述数据处理过程及源码通过数据可视化分析数据训练线性回归模型可视化训练好的线性回归模型结果预测问题描述 你所在的公司在电视上做产…

mybatis狂神(附自学过程中疑问解决)

首先先附上mybatis的官方文本链接mybatis – MyBatis 3 | 简介一、Mybatis介绍MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来…

Comparator和Comparable的区别以及Collections.sort排序原理

一、概述 Comparable和Comparator都是两个接口,接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而Comparator既可以嵌…

非标题党:前端Vue React 项目编程规范化配置(大厂规范)

前端项目编程规范化配置 下述例子主要是从 代码规范化 以及 git 提交规范化 两方面进行配置。内容很多,请做好心理准备 一、代码检测工具 ESLint 在我们通过 vue create “项目名” 时,我们可以通过手动配置的方式,来配置 ESLint 来对代码进…