• 传输层协议 UDP


    一、UDP 协议段格式

    1. 源端口号:该字段是一个16 位的字段,表示发送方应用程序的端口号。

    2. 目的端口号:该字段与源端口类似,它也是一个16 位的字段,表示接收方应用程序的端口号。

    3. 长度:该字段指示UDP数据报文的总长度,包括 UDP 头部和数据部分。它是一个 16 位的字段,最小值为8 字节(UDP头部的大小),最大值为 65535 字节,也就是说一个 UDP 数据报的最大长度是 64 kb。

    4. 校验和:该字段用于校验 UDP 数据报文的完整性。校验和是一个 16 位的字段,由发送方计算得出,并且接收方会使用该字段进行校验。校验和的计算涉及到整个 UDP 数据报文(包括 UDP 头部和数据部分),以便检测任何数据的改动或传输中的错误。

    5. 数据:该字段存储了一个完整的应用层数据报。它的长度可以从长度字段中推导出来。数据部分可以为空,也可以包含任意长度的数据。

    二、再谈 UDP 特点

    无连接:UDP是一种无连接的协议。这意味着在数据传输之前,发送方和接收方之间不需要建立连接。每个UDP数据报文都是独立的,它们之间没有关联。因此,UDP通信具有低延迟和较少的开销。

    不可靠:UDP不提供数据传输的可靠性。它没有重传机制或错误恢复机制,也不对数据包的丢失、重复、乱序进行处理。如果使用UDP进行数据传输,可能会出现丢包、丢失或损坏数据的情况。因此,UDP主要适用于对实时性要求高,但对数据可靠性要求相对较低的应用,如音视频传输和实时游戏。

    面向数据报:UDP是一种面向数据报的协议。每个UDP数据包被视为一个独立的数据报文,有自己的起始地址和目标地址,并独立于其他数据报文。UDP不对数据流进行拆分或重组,保持了数据包的完整性。如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次,每次接收10个字节。

    全双工:UDP的 socket 既能读,也能写,支持双向通信。

    UDP 缓冲区:UDP只有接收缓冲区,没有发送缓冲区。UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。

    大小受限:UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是 64KB(包括UDP首部和数据)

    三、下期预告

    既然 UDP 不可靠,并且长度受限,那么如果需要可靠传输,并且传输长度大于64K的数据时我们该如何处理呢?这里就需要引入另一个更强大的传输层协议 TCP ,关于 TCP 我们下期详细介绍。敬请期待!

  • 相关阅读:
    java基于SpringBoot的病房信息管理系统
    SpringBoot3基础用法
    vue-lazyload图片懒加载
    解决git@github.com: Permission denied (publickey)
    LeetCode刷题笔记【29】:动态规划专题-1(斐波那契数、爬楼梯、使用最小花费爬楼梯)
    神经网络 样本不平衡,神经网络结果不稳定
    HTTP 跨域名请求(CORS)
    C#底层库--数据库访问帮助类(MySQL版)
    嵌入式分享合集103
    独立站卖家如何使用 WhatsApp Business API 建立有意义的客户关系?
  • 原文地址:https://blog.csdn.net/LEE180501/article/details/133235431