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,这样算出来的校验和还是相同的,但传输的数据是错误的

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

相关推荐
treesforest1 小时前
IP定位技术在网络犯罪侦查中的应用与价值
网络·网络协议·tcp/ip·网络安全·ip归属地查询·反欺诈
外滩运维专家1 小时前
HTTPS 证书报错排查手册:6 个高频错误码及解决方法
网络协议·http·https
起司喵喵2 小时前
通过Certbot自动申请更新HTTPS网站的SSL证书
网络协议·https·ssl
鲜花飘飘扬5 小时前
HTTP请求头中表示代理IP地址的属性及获取情况
网络协议·tcp/ip·http
kyriewen5 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
Revolution616 小时前
React 组件重新渲染时,到底重新执行了什么
前端·react.js·面试
Revolution618 小时前
第一次运行 Node.js:终端里的 JavaScript 怎样执行
后端·面试·node.js
paopaokaka_luck9 小时前
基于springboot3+vue3的智能文库平台(AI智能搜索、AI智能汇总、实时在线状态展示、多格式文档预览与富文本编辑、Echarts图形化分析)
前端·网络·spring boot·网络协议·echarts
进击的程序猿~9 小时前
Go 并发底层原理面试学习指南
开发语言·面试·golang
wdfk_prog9 小时前
嵌入式面试真题学习笔记系列
笔记·学习·面试