接下来准备简单探讨一下关于UDP套接字编程.
UDP头部
UDP是面向报文.
UDP的头部是固定8字节, 分别是 : 源端口, 目的端口, 长度, 检验和.
校验和是用来保证数据的安全.
UDP协议
UDP是一种无连接的传输层协议, 提供面向事务的简单不可靠信息传送服务, 适合于一次传输少量数据; 在网络环境较差的情况下, UDP协议数据包丢失会比较严重.
不可靠 :
- 不提供报文到达确认
- 数据排序
- 流量控制
- 拥塞控制
UDP的优势 :
-
它不属于连接型协议, 因而具有资源消耗小, 处理速度快.
-
UDP 数据传输过程中延迟小、数据传输效率高传输效率很快. 当然可以在应用层对UDP实现可靠传输.
-
吞吐量不受拥挤控制算法的调节
-
UDP使用尽最大努力交付.
既然UDP并不可靠, 那什么时候会用这种不可靠协议呢? UDP在DNS
, TFTP
, SNMP
中都用到过.
前面在分析TCP缓冲区的时候也提到过. UDP没有发送缓冲区只有接收缓冲区, 如果对端的接收缓冲区满了则其他数据也将被直接丢弃.
TCP与UDP
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同.
TCP协议中包含了专门的传递保证机制, 当数据接收方收到发送方传来的信息时, 会自动向发送方发出确认消息; 发送方只有在接收到该确认消息之后才继续传送其它信息, 否则将一直等待直到收到确认信息为止.
UDP协议并不提供数据传送的保证机制. 如果在从发送方到接收方的传递过程中出现数据报的丢失, 协议本身并不能做出任何检测或提示.
同样TCP是字节流, 通信的发送端的写次数和接收端的读次数是没有次数之间的联系的; 而UDP是面向报文的, 通信的发送端的写次数和接收端的读次数是必须相同的, 如果数据没有读完也必须丢弃.
小结
简单的罗列了UDP协议的重要知识点, 接下来就要开始从编程的角度来验证和实现UDP通信了.
- UDP不可靠, 无连接
- 只有接收缓冲区