网络编程之-UDP详解

news2025/1/6 9:20:59

在这里插入图片描述

🌈个人主页:努力学编程’
个人推荐
c语言从初阶到进阶
JavaEE详解
数据结构
学好数据结构,刷题刻不容缓:点击一起刷题
🌙心灵鸡汤总有人要赢,为什么不能是我呢
在这里插入图片描述

🏀🏀🏀UDP 协议

学习一个网络协议就是学习 数据格式 和 报文格式 .
在这里插入图片描述
UDP的数据格式:
在这里插入图片描述
对于UDP的报头来说,长度是固定的,一共是八个字节,这其中并没有分隔符,而是通过指定的数据长度进行数据的分割,后面是UDP的正文部分.

UDP的报文长度是: 报头长度+载荷长度.
其中UDP的数据的长度单位是字节,即UDP的报文长度:1024->整个UDP的长度就是1024字节.由于表示长度的最大空间是2个字节,所以数据的最大长度是65535大概是64KB,所以我们使用UDP传输数据量大的信心的时候,就会变得非常,麻烦!!!

同时大家需要注意,在网络通信中,最重要的有四个关键信息:
源IP 目的IP
源端口 目的端口

就相当于你要发快递,就需要发件人的电话,收件人的地址,发件人的地址,收件人的电话

这里举一个使用UDP的例子:
在搜狗浏览器早期的时候,我们使用它搜索一个关键信息(不孕不育)的时候,就会出现如下情况:
在这里插入图片描述
这个搜索的过程可以模拟为以下场景:
在这里插入图片描述
对于广告服务器和搜狗的入口服务器之间的网络通信使用的是UDP协议,因为UDP不用考虑稳定传输,所以数据量很少的时候使用起来是非常香的~随着信息的递增,逐渐一个数据包的长度都快超过64KB了,
此时使用UDP就要对数据发生截断,那么就有两种解决的方案:

  1. 将数据进行分段,每一段使用UDP进行传输,(这个方案不大可能行得通,因为对数据进行截断有非常大的风险,同时还要对数据进行正确的重组,成本很大)
  2. 干脆直接舍弃UDP,使用稳定TCP,这样不仅解决的数据量大的问题,而且TCP具有稳定传输的特性,也会使数据的安全性得到保证.

🏀🏀🏀校验和

在网络编程的时候,是非常容易出现错误的,信息在传播的时候,是以电信号,光信号,…传播的,但是电场和磁场本身就是相互影响的,有时会出现这种情况:“0->1 1->0”,我们称为"比特翻转"这点在地球上不明显,在太空中我们经常要考虑这个问题…

为了能够正确识别我们传播的信息是否是正确的,UDP引入了校验和,这里我们并不是将数据全部拷贝一份,而是记录一些关键的信息,而且如果发现数据是有问题的,我们也不会要求发送方重新发送数据,而是直接将数据丢弃掉.

就好比现在我非常饿,点了一份外卖,等到快递小哥送到以后,我立马打开外卖,发现我点的明明是"鱼香茄子" 送来的却是 “鱼香肉丝” 但是由于我非常饿,于是就直接干了~~
在这里插入图片描述

🏆🏆🏆检验和的基本原理

举个很简单的例子:
有一天俺妈让俺去买菜,在我去之前告诉我你去卖 "西红柿,鸡蛋,黄瓜,茄子 "接着补充道:“一共四个哦”

这里的一共四个,就类似于UDP中的校验和,它并不能准确的识别数据的正确与否,而是大概记录数据的特征,而且容易误判(比如我把"鸡蛋"买成了"鸭蛋")~

如果我们希望校验和可以更加严格的对比数据,就需要根据数据的内容,格式去设计校验和.

那么校验和到底是怎样计算的呢,原理如下:
在UDP中我们使用两个字节作为校验和,计算校验和的方式为CRC校验和
就是将数据报中的整个数据进行遍历,去除每个字节,加到一个 两个字节的变量中,数据量大的时候,可能会导致计算的校验和信息存储的变量溢出,不过没关系,我们并不关心数据是否溢出,而是观察数据在传输的过程中是否发生改变~~

在这里插入图片描述
接收方此时会将接收的信息按照相似的算法重新计算校验和,checksum2,如果此时有 checksum1==checksum2,那么就说明数据传输成功,否则则说明数据传输的时候发生了改变.

在日后我们工作的时候,其实我们计算校验和的方式,也有其他很多种比如:
MD5算法,这个算法本质上是字符串hash算法.感兴趣的话可以了解一下.

🏀🏀🏀UDP TCP特点总结

对于UDP来说具有以下特点:

  • 无连接:直到对方的IP和端口号即可,不需要建立连接
  • 不可靠:没有确认机制,没有重传机制,如果因为网络故障数据传输失败,UDP协议层也不会给应用层返回任何错误信息,
  • 面向数据报:不能够灵活的控制读写数据的次数和数量.

对于TCP来说:
它有确认应答机制,并且两方建立连接,面向字节流可以灵活的读取数据,即有保证数据可靠传输的机制(确认应答和超时重传)还有提高效率的机制(滑动窗口和捎带应答)

但是我们在传输少量且不那么重要的数据的时候,我们仍然优先考虑UDP因为他的速度真的很快!!!
在这里插入图片描述

🏀🏀🏀TCP状态转换汇总

在这里插入图片描述
建立链接的意义:

  1. 投石问路,确认当前信息路径是否畅通
  2. 协商参数,通信双方共同确认一些通信必备参数的数值.

🏆🏆🏆UDP是否也存在粘包问题

对于TCP我们知道由于它是面向字节流的,将接收到的数据全部存放到缓冲区中,但是我们对于数据有很多种的读取方式,所以很难正确读取数据,(在上一篇文章中已经详细讲解.有兴趣可以去看看)

那么UDP是否也存在这样的问题呢,首先UDP是面向数据报的,这样数据本身就具有明确的边界,站在UDP应用层的角度中,我们上文也提到了,UDP要么传输完整的报文,要么直接丢弃,不会出现 “半个” 的情况.

🏀🏀🏀异常情况

• 进程终⽌: 进程终⽌会释放⽂件描述符, 仍然可以发送FIN. 和正常关闭没有什么区别.
• 机器重启: 和进程终⽌的情况相同.
• 机器掉电/⽹线断开: 接收端认为连接还在, ⼀旦接收端有写⼊操作, 接收端发现连接已经不在了, 就
会进⾏reset. 即使没有写⼊操作, TCP⾃⼰也内置了⼀个保活定时器, 会定期询问对⽅是否还在. 如果
对⽅不在, 也会把连接释放.
另外, 应⽤层的某些协议, 也有⼀些这样的检测机制. 例如HTTP⻓连接中, 也会定期检测对⽅的状态. 例
如QQ, 在QQ断线之后, 也会定期尝试重新连接.

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

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

相关文章

2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享

期刊介绍 《Biomedical Signal Processing and Control 》期刊旨在为临床医学和生物科学中信号和图像的测量和分析研究提供一个跨学科的国际论坛。重点放在处理在临床诊断,患者监测和管理中使用的方法和设备的实际,应用为主导的研究的贡献。 生物医学信…

【大模型基础】P1 N-Gram 模型

目录 N-Gram 概述N-Gram 构建过程TokenN-Gram 实例第1步 构建实验语料库第2步 把句子分成 N 个 “Gram”第3步 计算每个 Bigram 在语料库中的词频第4步 计算出现的概率第5步 生成下一个词第6步:输入前缀,生成连续文本 上述实例完整代码N-Gram 的局限性 N…

一文理解粒子滤波

0. 粒子滤波流程 之前学习记录的文档,这里也拿出来分享一下~ 基本原理:随机选取预测域的 N NN 个点,称为粒子。以此计算出预测值,并算出在测量域的概率,即权重,加权平均就是最优估计。之后按权重比例&…

揭秘帕金森症幕后元凶:是哪些因素悄悄“震颤”了生活?

在这个快节奏的时代,健康成为了我们最宝贵的财富之一。然而,有一种名为“帕金森病”的神秘疾病,正悄悄影响着无数人的生活,让他们的日常充满了“不由自主”的颤抖。今天,就让我们一起揭开帕金森症的神秘面纱&#xff0…

【电路笔记】-同相运算放大器

同相运算放大器 文章目录 同相运算放大器1、概述2、理想的同相运算放大器3、实际同相运算放大器3.1 闭环增益3.2 输出阻抗3.3 输入阻抗4、同相运算放大器示例4.1 缓冲电路4.2 示例5、总结1、概述 施加到运算放大器的电压信号可以提供给其同相输入端 (+) 或反相输入端 (-)。 这…

ansible--role

简介 roles是ansible,playbooks的目录的组织结构,将代码或文件进行模块化,成为roles的文件目录组织结构。 易读,代码可冲哟美好,层次清晰 目录机构 mkdir roles/nginx/{files,handlers,tasks,templates,vars} -ptou…

LLM模型:代码讲解Transformer运行原理

视频讲解、获取源码:LLM模型:代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 训练保存模型文件 2 模型推理 3 推理代码 import torch import tiktoken from wutenglan_model import WutenglanModelimport pyttsx3# 设置设备为CUDA(如果…

javaWeb【day04】--(MavenSpringBootWeb入门)

01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后,我们即将开始学习后端Web开发技术。做为一名Java开发工程师,后端Web开发技术是我们学习的重点。 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于…

数据治理:企业数字化转型的关键环节

数据治理:企业数字化转型的关键环节 前言数据治理:企业数字化转型的关键环节 前言 在当今数字化时代,企业的发展与数据紧密相连。数据已成为企业的重要资产,而如何有效地治理数据,使其发挥最大价值,成为企…

Python安装llama库出错“metadata-generation-failed”

Python安装llama库出错“metadata-generation-failed” 1. 安装llama库时出错2. 定位问题1. 去官网下载llama包 2.修改配置文件2.1 解压文件2.2 修改配置文件 3. 本地安装文件 1. 安装llama库时出错 2. 定位问题 根据查到的资料,发现时llama包中的execfile函数已经…

旋翼无人机的应用场景和用途!!!

1. 航拍摄影 全景拍摄:旋翼无人机可以携带摄像装置进行大规模航拍,广泛应用于影视制作、广告拍摄、城市规划、房地产宣传等领域。其独特的视角和高度,能够拍摄到地面难以捕捉的壮丽景色,为观众带来震撼的视觉效果。 测绘与地理信…

USB通信协议基础概念

文章目录 一、什么是USB1. **标准化接口**2. **热插拔**3. **即插即用**4. **电源供给**5. **数据传输速度**6. **连接类型**7. **协议和功能** 二、USB的三个部分1. **USB Host(主机)**2. **USB Device(设备)**3. **USB Hub&…

Ubuntu 22.04 make menuconfig 失败原因

先 安装一些配置 linux下使用menuconfig需要安装如下库_menuconfig 安装-CSDN博客 然后 cd 到指定源代码 需要在内核文件目录下编译 Linux 内核源码(kernel source)路径_--kernel-source-path-CSDN博客 make menuconfig 又报错 说是gcc 12什么什么&…

Linux概述、远程连接、常用命令

Linux介绍 Linux操作系统介绍 Linux操作系统的特点 开源免费安全稳定可移植性好 Linux可以安装在不同的设备上 高性能 Linux的使用领域 应用服务器数据库服务器网络服务器虚拟化云计算嵌入式领域个人PC移动手机 Linux文件系统和目录 /:根目录,唯一/h…

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本 1.2 认识Nano版本 2 STM32F446U上移植RT-Thread 2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet 2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码 2.2.3.2 匹配端口 2.2.4 移植FinSH…

基于飞腾平台的Hive的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

Matplotlib 颜色设置详解

在使用matplotlib进行颜色绘制的时候,如绘制图表、背景色或者对文字设置的时候都可以配置颜色, 以下说明主流的三种颜色使用方法 颜色名称 可以是直接使用颜色名称的字符串对color进行赋值,包括可以使用首字母缩写或者完整拼写的形式,以下为部分颜色的书写形式 缩写版 • …

机器学习课程学习周报十一

机器学习课程学习周报十一 文章目录 机器学习课程学习周报十一摘要Abstract一、机器学习部分1.1 再探GAN的数学原理1.1.1 似然与概率1.1.2 GAN和最大似然估计1.1.3 最大后验概率 1.2 WGAN1.3 GAN的性能评估方法1.4 条件型生成 总结 摘要 本周的学习主要围绕生成对抗网络&#…

详细介绍msvcr120.dll文件以及修复msvcr120.dll丢失的几种方法

遇到“msvcr120.dll丢失”错误通常会在尝试运行某些程序时发生,这类错误提示“程序无法启动,因为您的计算机缺少msvcr120.dll文件。”这可能导致许多用户感到困扰和不便。有几个步骤可以帮助你轻松修复“msvcr120.dll丢失”错误,保证应用程序…

Linux新建虚拟机Ubuntu详解

1. 打开软件,点击新建虚拟机; 2. 选择典型; 3. 点击稍后安装操作系统后,点击下一步; 4. 选择客户机操作系统以及版本,这里我们选择Ubuntu 64位; 5. 给虚拟机命名以及新建文件夹存放虚拟机位置&…