• 全面解析UDP协议(特点、报文格式、UDP和TCP的区别)


    了解UDP(User Datagram Protocol)

    UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

    特点

    • 无连接:UDP通信不需要建立连接,直接发送数据报。
    • 不可靠:UDP通信不保证数据的可靠性和顺序性,数据报可能会丢失或乱序。
    • 高效性:UDP通信没有TCP的连接建立和断开的开销,传输速度较快。

    UDP报文格式分析

    +-------------------+
    |      源端口号      |     2字节
    +-------------------+
    |     目的端口号     |     2字节
    +-------------------+
    |       长度        |     2字节
    +-------------------+
    |      校验和       |     2字节
    +-------------------+
    |       数据        |     可变长度
    +-------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 源端口号:指示发送方的应用程序使用的端口号。
    • 目的端口号:指示接收方的应用程序使用的端口号。
    • 长度:指示整个UDP报文的长度,包括头部和数据部分。
    • 校验和:用于检测UDP报文在传输过程中是否发生错误。校验和由发送方计算并附加在报文中,接收方可以使用校验和来验证报文的完整性。
    • 数据:实际传输的应用层数据。UDP协议本身并不对数据大小进行限制,它只是提供了一个封装和传输数据的机制。实际上,UDP报文可以携带的数据大小取决于底层网络的最大传输单元(MTU)以及应用程序的需求。 一般来说,IPv4网络的MTU通常为1500字节,而IPv6网络的MTU通常为1280字节。因此,如果数据部分超过了MTU的大小,UDP报文可能会被分片成多个IP包进行传输。这可能导致数据传输的效率降低和重组的开销增加。

    应用场景

    由于使用UDP协议消耗系统资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输。例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

    UDP和TCP的区别

    1. 可靠性:

      • TCP(传输控制协议)是一种可靠的协议,它提供了数据传输的可靠性保证。TCP使用序列号、确认应答和重传机制来确保数据的可靠传输,保证数据按照正确的顺序到达目的地。
      • UDP(用户数据报协议)是一种无连接的协议,它不提供可靠性保证。UDP发送数据时不进行确认应答、重传或者顺序控制,因此数据可能会丢失、重复或者乱序,但是UDP的传输速度较快。
    2. 连接性:

      • TCP是面向连接的协议,它在通信双方建立连接后才能进行数据传输。TCP使用三次握手来建立连接,四次挥手来关闭连接。
      • UDP是无连接的协议,每个UDP数据报都是独立的,发送方和接收方之间没有建立持久的连接。
    3. 传输效率:

      • TCP的可靠性保证和连接管理机制会增加一定的开销,使得TCP传输的效率相对较低。
      • UDP没有可靠性保证和连接管理的开销,因此传输效率较高。
    4. 适用场景:

      • TCP适用于对数据可靠性要求较高的应用场景,如文件传输、网页浏览、电子邮件等。
      • UDP适用于对实时性要求较高的应用场景,如音频、视频流传输、实时游戏等。

    Java中的UDP通信

    • UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
    • Java提供了DatagramSocket类作为基于UDP协议的Socket(嵌套字)
  • 相关阅读:
    统一潮流控制器 (UPFC) 的应用,以增强电力系统中的电压稳定性(Matlab代码实现)
    C# 成为2023年度编程语言之王
    Java数组
    前端基础向--从项目入手封装公共组件
    计网:UDP TCP比较 +两者转换UDPtunnel工具
    读取 yaml 文件
    代码随想录二刷7.22|977.有序数组的平方
    平面设计实验三 手机海报与选区操作
    贪心算法(算法竞赛、蓝桥杯)--修理牛棚
    算法基础入门 - 2.栈、队列、链表
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133607192