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

UDP数据报结构分析(面试重点)

        在传输层中有UDP和TCP两个重要的协议,下面将针对UDP数据报的结构进行分析

UDP结构图示

 UDP报头结构的分析

        UDP报头有4个属性,分别是源端口,目的端口,UDP报文长度,校验和,它们都占16位2个字节,所以取值范围是0-65535

        一.源端口

                源端口表示发送数据时,发送方的端口号,由于占16位2个字节,所以取值范围是0-65535,所以一个合法的端口号,有效范围就是0-65535不能再大了(实际上0是不使用的),

                知名端口号

                        在1-1024这个范围的端口号,系统赋予了特定的含义,一般也不建议使用,这些端口号已经给一些名气比较大的服务器提前安排好了(坐飞机的头等舱一样)

        二.目的端口号

                目的端口号表示发送数据时,接收方的端口号,其余的特点和源端口号相同

        三.UDP报文长度

                表示UDP数据报的长度,由于占用两个字节,所以也表示一个UDP数据报能传输的数据是有限制的,限制在大约64kb的数据,所以当我们要传输的数据大于64kb时就不建议用UDP协议的方式来传输数据了,建议采用TCP协议的方式传输,因为TCP数据报传输数据是不限制大小的

        四.校验和

                当我们在进行网络传输数据的过程中,本质上就是光信号/电信号/电磁波的数据传输,很可能就会受到外界的干扰,数据可能会出错,比如,本来你要传输的数据是0变成了1,本来是1变成了0(发生了比特翻转),此时数据就出错了,所以接收方在收到数据了以后就需要先确认一下,这个数据是否是一个错误的数据,校验和就是简单有效的方式

                校验和的工作原理

        校验和会把UDP数据报中的每一个字节,都依次进行累加,把累加的结果,保存在两个字节的变量中,加着加着可能就溢出了,但溢出也无所谓,将所有的字节都加了一遍,最终就获得了校验和

        在传输数据的时候,就会把原始数据和校验和一起传递过去,接收方收到数据,同样也收到了发送方送过来的校验和,接收方按同样的方式再算一遍,获得了新的校验和,将新的校验和与旧的校验和进行对比,如果相同就说明数据正确,反之则不正确,要重新发送数据

        此时可能会有一些高手想到,就算校验和相同也可能传输的数据是错误的,因为二进制数据可能会有一个位置从0变为了1,另一个位置从1变为了0,这样算出来的校验和还是相同的,但传输的数据是错误的

        确实会有这样的情况,但这只能算是一个误差,误差是不可避免的,因为本来出现比特翻转就是一个小概率事件,而发生两次比特翻转并且还刚好抵消,这更是非常小的概率了,所以我们只将这种情况看作是一个误差。

http://www.lryc.cn/news/132250.html

相关文章:

  • 【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)二(113)
  • C++进阶 类型转换
  • Idea中隐藏指定文件或指定类型文件
  • 第2步---MySQL卸载和图形化工具展示
  • 原型和原型链
  • 解决ios隔空播放音频到macos没有声音的问题
  • LTPP在线开发平台【使用教程】
  • 0818 新增码表 git拉取代码
  • AI 绘画Stable Diffusion 研究(十)sd图生图功能详解-精美二维码的制作
  • C# File.ReadAllLines()报错
  • LeetCode 1162. As Far from Land as Possible【多源BFS】中等
  • 【算法】二分查找(整数二分和浮点数二分)
  • git压缩/合并多次commit提交为1次commit提交
  • 【3519DV500】AI算法承载硬件平台_2.5T算力+AI ISP图像处理_超感光视频硬件方案开发
  • Linux系统基础服务启动的方法
  • STM32 FLASH 读写数据
  • excel功能区(ribbonx)编程笔记--1 初识功能区
  • 电脑远程接入软件可以进行文件传输吗?快解析内网穿透
  • react-native-webview使用postMessage后H5不能监听问题(iOS和安卓的兼容问题)
  • 通过LD_PRELOAD绕过disable_functions
  • Python批量爬虫下载文件——把Excel中的超链接快速变成网址
  • Crimson:高性能,高扩展的新一代 Ceph OSD
  • 【websocket】websocket-client 与 websockets
  • Qt快速学习(一)--对象,信号和槽
  • Qt6之如何为QDialog添加最大化和最小化按钮
  • 攻防世界-warmup
  • 02__models
  • MyBatis入门配置及CURD实现
  • 《游戏编程模式》学习笔记(五)原型模式 Prototype Pattern
  • ansible案列之LNMP分布式剧本