一、UDP协议为什么不可靠?

UDP在传输数据之前不需要先建立连接,远地主机的运输层在接收到UDP报文后, 不需要确认,提供不可靠交付。

总结就以下四点:

不保证消息交付:不确认,不重传,无超时

不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞

不跟踪连接状态:不必建立连接或重启状态机

不进行拥塞控制:不内置客户端或网络反馈机制

二、DNS为什么要用UDP?

更准确地说,DNS既使用TCP又使用UDP。

当进行区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多,而TCP允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的TCP。

当客户端想DNS服务器查询域名(域名解析)的时候,一般返回的内容不会超过UDP报文的最大长度,即512字节,用UDP传输时,不需要创建连接,从而大大提高了响应速度,但这要求域名解析服务器和域名服务器都必须自己处理超时和重传从而保证可靠性。