自学内容网 自学内容网

UDP协议

我们已经知道 UDP 具有无连接,不可靠传输,面向数据报,全双工的特点,接下来就来具体看看 UDP 协议报文结构。

 UDP 协议属于内核协议栈,在底层 UDP 的报头是一个 C 语言的位段类型的结构体:

struct udphdr {
    __be16    source;     // 源端口号
    __be16    dest;       // 目标端口号
    __be16    len;        // UDP数据包长度(包括头部)
    __sum16   check;      // 校验和
};

由上图可知,UDP 报头长度一共为8字节(32个比特位),其中源端口、目的端口、UDP 长度、UDP 校验和分别是2字节(16个比特位)大小。

♩.16位源端口:占用2个字节,用于标识发送方应用程序的端口号。

♩.16位目的端口:占用2个字节,用于标识接收方应用程序的端口号。

♩.16为UDP长度:占用2个字节,表示UDP头部和数据的总长度。

由于只有两个字节大小,这说明 UDP 报文的最大长度不超过 2^16 = 65535 个字节(64KB)大小,即接收的应用层数据载荷大小不能超过64KB大小,若要传输大于64KB大小的数据,通常的做法是将数据分割成多个小于或等于64KB的数据包进行发送或者使用其他传输层协议(如:TCP 协议)。

♩.16位校验和:占用2个字节,用于检测数据在传输过程中是否出现错误。

由于网络通信过程中光、电信号可能会受到电场、磁场、高能射线等的影响,这些干扰可能会使光、电信号出现比特翻转的现象(二进制位0变成1,1变成0)的现象。所以在 UDP 协议中,校验和可以一定程度上确保数据报在传输过程中没有被破坏或篡改。

校验和的具体用法是:当发送方发送一个 UDP 数据包时,它会计算数据包的校验和并将其添加到报头中。接收方收到数据包后,会重新计算校验和并与报头中的校验和进行比较。如果两者匹配,则认为数据包没有损坏;如果不匹配,则认为数据包可能已被破坏或篡改,并丢弃该数据包。

常见的校验和算法有:

♩.CRC(循环冗余校验):CRC 是一种用于检测数据传输或存储时可能出现的错误的技术。它通过将数据块与一个特定的多项式进行模2除法,并将余数附加到数据块的末尾来生成校验码。接收方可以使用相同的多项式重新计算校验码,并将其与接收到的校验码进行比较,以确定数据是否在传输过程中发生了错误。

♩.MD5:MD5 是一种广泛使用的加密哈希函数,它可以将任意长度的数据转换为固定长度(通常为32位)的哈希值。接收方可以再次使用 MD5 重新计算校验码,并将其与接收到的校验码进行比较,以确定数据是否在传输过程中发生了错误。

♩.SHA1:SHA1 也是一种加密哈希函数,它可以将任意长度的数据转换为固定长度(通常为40位)的哈希值,与MD5类似。


原文地址:https://blog.csdn.net/qq_61872165/article/details/142300977

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!