四 网络编程 ———— UDP首部格式

接上一篇博客 Java (UDP/TCP 套接字)
文章目录UDP首部格式
UDP的特点
UDP传输的过程类似于寄信 , UDP是无连接面向数据报的 , 即使在传输过程中出现丢包 , UDP也不负责重发 , UDP是不会关注对端是否真的收到了传过去的数据 , 就算出现包的到达顺序出错也没不会纠正 。
1. 无连接2. 不可靠3.面向数据报4.全双工UDP首部格式
去除掉下图的数据的部分就是真正的UDP首部格式
UDP首部格式由 源端口号、目的端口号、UDP长度和校验和组成
源端口号 ( Port)
表示发送端端口号 , 字段长16位(两个字节)
目标端口号
表示接收端端口 , 字段长16位(两个字节)
包长度(UDP长度)缓冲区校验和
实际使用的校验和的算法有很多 , 其中比较常见的有crc和md5
CRC (循环冗余校验)
假设现在有一串数据 , 把它当成二进制数据 , 依次按照字节为单位 , 取出数据 , 然后把这些数据进行累加

四  网络编程 ———— UDP首部格式

文章插图
short sum;for (byte b : array) {sum += b;}//加着加着可能就溢出了 , 溢出的部分不要了
md5
md5也是一种算法 , md5应用的场景非常多 , 用来作为校验和 , 只是其中的一个 场景而已 , 本质上是一个“”非对称的哈希算法”
md5算法本质上就是针对数据进行一系列的数学变化
定长:无论输入的字符串是多长 , 得到的md5值都是固定长度 32位(4个字节)、64位(8个字节)、128位(16个字节)分散:只要输入的字符串 , 哪怕只是变化了一点点 , 得到的md5值都会差别巨大(这也是哈希算法的核心)不可逆:给定原串 , 很容易得到md5 , 但是给定md5值 , 理论上是无法恢复出原始的字符串的
因此很对地方都可以使用md5
作为hash算法作为校验和
【四网络编程 ———— UDP首部格式】因为md5的第二个特性 , 就是比较分散 , 数据变了一点 , 此时得到的md5值都差别很大 , 如果两个字符串 , md5值一致 , 这种概率是非常非常低的 , 比src要低很多 , 工程上就忽略不计了