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

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

相关推荐
cuisidong199734 分钟前
机器学习100道经典面试题库(二)
人工智能·机器学习·面试
UestcXiye3 小时前
《TCP/IP网络编程》学习笔记 | Chapter 12:I/O 复用
c++·网络协议·计算机网络·ip·tcp
风启新尘3 小时前
Charles抓https包-配置系统证书(雷电)
网络协议·http·https
誓约酱4 小时前
Linux 下网络套接字(Socket) 与udp和tcp 相关接口
linux·网络·c++·tcp/ip·udp
前端李易安5 小时前
HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?
前端·网络协议·http
hgdlip5 小时前
网络IP地址会经常换吗?深入解析与实操指南
网络·网络协议·tcp/ip·网络ip地址
ZachOn1y5 小时前
计算机网络:运输层 —— TCP 的拥塞控制
网络·网络协议·tcp/ip·计算机网络·tcp·拥塞控制
亮~5 小时前
力扣(leetcode)面试经典150题——27. 移除元素
算法·leetcode·面试
GISer_Jing7 小时前
React面试高频核心问题
前端·react.js·面试
小技与小术8 小时前
MySQL面试之底层架构与库表设计
mysql·面试