UDP的特点
- 面向非连接
- 不维护连接状态,支持同时向多个客户端传输相同的消息
- 数据包报头只有8个字节,额外开销较小
- 吞吐量只受限于数据生成速率、传输速率以及机器性能
- 尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
- 面向报文,不对应用程序提交的报文信息进行拆分或者合并
UDP 是面向无连接的通讯协议,UDP 报头由 4 个域组成,其中每个域各占用 2 个字节, 其中包括目的端口号和源端口号信息,数据报的长度域是指包括报头和数据部分在内的总字节数,校验值域来保证数据的安全。由于通讯不需要连接,所以可以实现广播发送。
UDP 通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
UDP 与 TCP 位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP 不被应用于那些使用虚电路的面向连接的服务,UDP 主要用于那些面向查询—-应答的服务,例如 NFS。相对于 FTP 或 Telnet,这些服务需要交换的信息量较小。使用 UDP 的服务包括 NTP(网络时间协议)和 DNS(DNS 也使用 TCP),包总量较少的通信(DNS、SNMP 等);2.视频、音频等多媒体通信(即时通信);3.限定于 LAN 等特定网络中的应用通信;4.广播通信(广播、多播)。
常用的 QQ,就是一个以 UDP 为主,TCP 为辅的通讯协议。
TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。
报文组成
- 源端口:源端口号,在需要对方回信时选用,不需要时可用全0。
- 目的端口:目的端口号,这在终点交付报文时必须要使用到。
- 长度: UDP用户数据包的长度,其最小值是8(仅有首部)。
- 校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃。
如果要你来设计一个 QQ,在网络协议上你会考虑如何设计?
登陆采用 TCP 协议和 HTTP 协议,你和好友之间发送消息,主要采用 UDP 协议,内网传
文件采用了 P2P 技术。总来的说:
- 登陆过程,客户端 client 采用 TCP 协议向服务器 server 发送信息,HTTP 协议下载信 息。登陆之后,会有一个 TCP 连接来保持在线状态。
- 和好友发消息,客户端 client 采用 UDP 协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息 送失败,并可重新发送。
- 如果是在内网里面的两个客户端传文件,QQ 采用的是 P2P 技术,不需要服务器中转。