UDP!!!
- 一 : 传输层的协议:
- 二 : UDP
- 2.1 UDP长度
- 2.2 UDP校验和
- 2.2.1 : 为什么会出现传输出错的情况??
- 2.2.3: 对数据进行校验的方式
- CRC
- md5
- 三 : UDP的适用场景
一 : 传输层的协议:
传输层的协议有UDP,TCP
UDP:无连接,不可靠传输,面向数据报,全双工
TCP:有连接,可靠传输,面向字节流,全双工
二 : UDP
对于UDP协议来说,应用层数据到达UDP之后,就会给应用层数据报前面拼接上UDP报头
UDP数据报 = UDP报头 + UDP载荷
2.1 UDP长度
UDP 长度描述了整个UDP数据报(报头+载荷),占多少个字节 .
通过UDP长度,就可以知道载荷一共是多少字节.
UDP长度占两个字节,能表示的范围是0-65535,也就是最多是64KB,
因此,在使用UDP开发程序,就会有很大的制约,要确保传输的单个数据报,不能超过64KB
但UDP有限制,为什么发明UDP的大佬,不对UDP做出升级呢?
最初UDP诞生于上个世纪70年代,当时设计成2个字节64KB,是比较充裕的.
但升级报头,不是技术上的难题,更多的上政治上的难题.
比如 : 单个主机升级,是没有意义的,需要通信双方同时升级,否则可能会解析错误.
由于UDP是系统内核实现的,假如全世界都是用同一个操作系统,升级的成本相对来说会小一点.但市面上存在各种各样的操作系统,如果某个操作系统升级了,其他系统没有升级,意味着这个升级的系统和其他系统不能兼容了 ,站在普通用户的角度,就是这个升级的系统不好,不能和别的系统UDP通信,可能这个升级的操作系统就会因此失去一些市场份额.
2.2 UDP校验和
数据在网络传输过程中,是可能会"出错"的.
比如:发送方发送的数据是 : 010101
接收方收到的数据是 : 011101
2.2.1 : 为什么会出现传输出错的情况??
因为这些二进制数据,在传输的过程中是通过电信号/光信号/电磁波进行传输的.
就有可能受到外界环境的干扰.
比如:电信号表示 0 , 1 ,低电平表示 0, 高电平表示1 ,此时传输的过程中,遇到一一个变化的磁场,此时就可能把本来的低电平变成高电平/高电平变成低电平
2.2.3: 对数据进行校验的方式
在UDP中,校验和只能做到发现是否有错,而不能纠错.
校验和就是拿着数据/数据的一部分 进行一系列计算,得到结果.如果数据部分发生改变,此时得到的结果就会不一样
A : 发送方
根据发送的内容得到一个校验和.
B:接收方
校验和出错/数据内容出错,最终B这边感受到的都是算出来的校验和2 和收到的校验和不一致,B只要发现两个校验和对不上,就会把这个数据丢弃掉
CRC
CRC是一个简单粗暴的计算校验和的方式,循环冗余校验
设定2个字节的变量,把数据的每个字节取出来,往这边变量上累加,如果结果溢出,超过2个字节,溢出部分就会舍弃
md5
md5 的特点:
(1) 定长 : 无论输入的内容是多长,得到的结果,一定是固定长度的;
(2)分散 : 输入的内容只要改变一点点,最终结果差异都会很大.(比特翻转,往往只是变化了一点点)
因为分散特性,非常适合做字符串 hash 算法
(3)不可逆 : 通过原数据,计算 md5 ,成本很低,但通过 md5 ,还原成原来的数据,成本很高,仅仅理论上可行)
用于加密的领域
使用 md5 的场景,就没想着要解密.
三 : UDP的适用场景
UDP现在最主要的用途,就是应用于性能要求比较高(传输快),但对于可靠性要求不高的场景.
比如 : 分布式系统中,多个服务器之间的网络通信(多个机器在同一个机房里,网络结构简单,带宽充裕,也不太容易出现丢包的情况)