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

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

相关推荐
Lee川4 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川7 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i9 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有10 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有10 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫11 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫11 小时前
Handler基本概念
面试
Wect11 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼12 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼12 小时前
Next.js 企业级落地
前端·javascript·面试