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

传输层协议-UDP数据报

UDP协议的特点

            面向数据报,无连接,不可靠,全双工

面向数据报:是指该协议在传输数据的时候使用的是数据报;

无连接:指的是发送数据不需要两个进程连接在一起,类似生活中我们发送短信,只要直到对方的电话号码就看也发送短信;TCP就是有连接的,只有连接,双方才能交换数据,就像我们打电话,需要对方接通才能说话;

不可靠:指的是我们只管把数据发送出去,不管对方是否一定能接收到;

全双工:指的通信双方都能接收数据和发送数据,在该连接通路,能同时双向传输数据;相对的概念是半双工:能双向传输数据,但是不能同时;

学习一个协议,首先要了解该协议的报文格式,当应用层的数据到达传输层之后,如果使用的是UDP传输协议,就会在数据前加上一个UDP报头,构成一个UDP数据报;

这是一张UDP数据报的报文格式:

但实际真正的在网络传输的过程过的UDP报文格式是这样的:

源端口号   

两个字节,用于记录发生数据的进程的端口号

目的端口号

两个字节,用于记录数据接收方的进程的端口号

UDP长度

UDP长度=报头长度+载荷长度,由于只占两个字节,最大就是65536,单位是字节,也就是64KB;也就是说一个UDP数据报最大就是64KB;但载荷的大小接近64KB,甚至大于64KB,就是考虑数据的传输方式,保证数据传输;

注意事项:

如果数据超过64KB,就需要在应用层将数据进行分段传输,在接收方手动拼接

UDP检验和

用于判断数据传输过程是否发生错误。数据报的记录方式无非就是光信号或者电信号或者电磁波,无论是哪种传输方式,都有可能在传输的过程收到外界的影响导致数据改变,发生错误,最常见的就是发生的比特翻转,0变成1,1变成0,高电平变成低电平,低电平变成高电平,检验和在数据传输之前通过某种计算方法,用载荷数据参与运算,等待数据到达目的端口时,在重新以这种方式计算,将再次计算获得校验和与报头的校验和比较,如果不同,证明传输过程数据发生改变,反之成立;

校验和

第一层:能够判断是否发生错误;(代价低)

第二层:能够直到时哪一位发生了错误,并且能够进行纠错:(代价大,消耗大)

UDP校验和做到了第一步,使用的CRC循环冗余校验,用一个16个比特位的变量,将载荷的每个字节单独拿出来累加,溢出直接舍弃,得到最后的校验和;无论是发生前计算的校验和还是接收到计算的校验和,我们都不关心校验和的具体数值,只关心前后校验和是否相同;

除了CRC,还可以使用md5,md5最初是使用在字符串hash算法,如果key是字符串,通过md5计算,实现字符串映射到数组下标;

md5特点:无论数据多大,通过计算得到的校验和都是定长的,而且只要稍微改变一点,得到的数值就会发生很大的变化,使得能够更加精确快速的判断两个数据是否不同;

md5解密实际就是一个hash表记录了一些常用的字符串以及对应加密后的数值,解密实际就是查表,常用的很容易解密,不常用的就解密不了,md5适合用在只是加密,不解密的场景像银行的密码库记录的是你的密码加密后的数据,不是你真正的密码,每当你是输入密之后,就会通过md5加密计算,再和数据库中的数值比较;

UDP协议的主要用途

高性能传输,可靠性要求不高的场景。像分布式系统,多个服务器之间的通信,多个机器在同一个机房,网络结构简单,带宽充裕;


http://www.kler.cn/news/283867.html

相关文章:

  • 6 自研rgbd相机基于rk3566之深度计算库程序详解
  • 第一次用macos快速上手教程
  • 算法进阶篇 之 实用数据结构
  • 【图论简介】
  • 深入理解Python中的`super()`函数:如何调用父类的方法
  • 【数字IC】——逻辑综合,物理数据的读入
  • Vxe UI vue vxe-table 如何在表格中使用上传附件、上传图片
  • Linux下编译安装SuperLU
  • 应对Java虚拟机(JVM)负载突然增大的全面指南
  • Sentinel-1 Level 1数据处理的详细算法定义(七)
  • ARM/Linux嵌入式面经(三二):百度
  • 【区块链 + 司法存证】智慧审判留痕系统 | FISCO BCOS应用案例
  • 掀起社交娱乐新浪潮!AI如何应用到短视频APP?
  • Windows 局域网文件共享
  • js 如何获取文件名
  • 哈希(C语言)
  • 华为设备ENSP-AAA认证配置
  • Python | Leetcode Python题解之第386题字典序排数
  • FPGA 学习之路:挑战与策略
  • 磁盘I/O性能优化示例
  • Go 语言中的接口详解
  • Django 使用Apscheduler执行定时任务
  • vue nginx部署 配置 解决href = ‘/login路由‘ 跳转404问题
  • 代码随想录刷题day17丨654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
  • Java线程生命周期详解_(1)
  • 在 Maven 的 POM 文件中配置 npm 镜像源
  • SpringMVC处理流程介绍
  • 【HuggingFace Transformers】BertSelfOutput 和 BertOutput源码解析
  • 开源个人云存储管理专家:Cloudreve
  • 零基础入门转录组数据分析——单基因ROC分析