C语言 网络编程(三)UDP 协议

简介: UDP(用户数据报协议)是一种无需建立连接的通信协议,适用于高效率的数据传输,但不保证数据的可靠性。其特点是无连接、尽力交付且面向报文,具备较高的实时性。UDP广泛应用于视频会议、实时多媒体通信、直播及DNS查询等场景,并被许多即时通讯软件和服务(如MSN/QQ/Skype、流媒体、VoIP等)采用进行实时数据传输。UDP报文由首部和数据部分组成,首部包含源端口、目的端口、长度和校验和字段。相比TCP,UDP具有更高的传输效率和更低的资源消耗。

UDP

介绍

UDP(User Datagram Protocol) : ⽤户数据报协议,是不可靠的⽆连接的协议。在数据发送前,因为不
需要进⾏连接,所以可⽤于进⾏⾼效率的传输。但不保证数据的可靠性。

特点

  • UDP 是⽆连接的协议。
  • UDP 使⽤尽最⼤努⼒交付,不保证数据可靠。
  • UDP 是⾯向报⽂的。
  • UDP 通信的实时性较⾼。

应用场景

  • 视频会议
  • 实时多媒体通信
  • 直播
  • 发送⼩尺⼨数据(如对 DNS 服务器进⾏ IP 地址查询时)
  • 在接收到数据,给出应答较困难的⽹络中使⽤ UDP。(如:⽆线⽹络)
  • MSN/QQ/Skype 等即时通讯软件的点对点⽂本通讯以及⾳视频通讯通常采⽤ UDP 协
  • 流媒体、VOD、VoIP、IPTV 等⽹络多媒体服务中通常采⽤ UDP ⽅式进⾏实时数据传

UDP传输

img_78.png

UDP报文格式

⽤户数据报 UDP 由两个部分组成:⾸部 + 数据部分。⾸部部分很简单,只有 8 个字节,由四个字段组成,每个字段的⻓度都是两个字节。
img_79.png

字段涵义:

  • 源端口号:需要对⽅回信时选⽤,不需要时全部置 0.
  • 目的端口号:接收⽅的端口号。在终点交付报⽂的时候需要⽤到。
  • ⻓度:UDP 的数据报的⻓度(包括⾸部和数据)其最⼩值为 8(只有⾸部)
  • 校验和:检测 UDP 数据报在传输中是否有错,有错则丢弃。

特点:

tcp 协议是⾯向连接、可靠、字节流

udp 协议是⽆连接、不可靠、数据报⽂字段

性能:

tcp 协议传输效率慢,所需要资源多

udp 协议传输效率快,所需要资源少

应⽤常⽤:

tcp 协议常⽤于⽂件,邮件传输

udp 协议常⽤于语⾳,视频,直播等实时性要求较⾼的场所

相关文章
|
12天前
|
网络协议 Unix C语言
C语言 网络编程(十六)广播和组播
广播和组播是网络通信的重要方式。广播允许一台主机向子网内所有主机发送数据包,常用于局域网内的消息传播;组播则将数据包发送给特定的一组主机,适用于视频会议等应用场景。广播地址如 `192.168.1.255` 用于同一子网的所有主机。组播地址如 `224.0.0.0` 至 `239.255.255.255` 标识特定主机群。C语言示例展示了如何通过 UDP 实现广播和组播通信。此外,UNIX域套接字用于同一机器上进程间的高效通信。
|
12天前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
|
12天前
|
网络协议 C语言
C语言 网络编程(十三)并发的TCP服务端-以进程完成功能
这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
|
12天前
|
网络协议 C语言
C语言 网络编程(十四)并发的TCP服务端-以线程完成功能
这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。
|
12天前
|
网络协议 C语言
C语言 网络编程(十二)TCP通信创建-粘包
TCP通信中的“粘包”现象指的是由于协议特性,发送方的数据包被拆分并在接收方按序组装,导致多个数据包粘连或单个数据包分割。为避免粘包,可采用定长数据包或先传送数据长度再传送数据的方式。示例代码展示了通过在发送前添加数据长度信息,并在接收时先读取长度后读取数据的具体实现方法。此方案适用于长度不固定的数据传输场景。
|
9天前
|
网络协议
网络协议概览:HTTP、UDP、TCP与IP
理解这些基本的网络协议对于任何网络专业人员都是至关重要的,它们不仅是网络通信的基础,也是构建更复杂网络服务和应用的基石。网络技术的不断发展可能会带来新的协议和标准,但这些基本协议的核心概念和原理将继续是理解和创新网络技术的关键。
24 0
|
24天前
|
消息中间件 网络协议 算法
UDP 和 TCP 哪个更好?
【8月更文挑战第23天】
69 0
|
2月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
262 7
|
28天前
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
40 1
|
30天前
|
缓存 网络协议 算法
TCP、UDP是如何流量、拥塞控制的?今天一口气讲透!
TCP、UDP是如何流量、拥塞控制的?今天一口气讲透!