UDP的不可靠体现在哪里?

都知道UDP是不可靠的,TCP是可靠的,那问题来了,UDP的不可靠体现在哪里?

  • UDP的首部有检验和,若检验和出错接收方会舍弃该包

  • UDP的首部的目的端口错误,接收方会通过ICMP告知发送方

以上可以看到其实UDP也对接受的报文进行了一定的检查,并不是无脑接收。

同时我参考了segmentfault里面其他关于UDP和TCP的答案,感觉上UDP的不可靠是体现在发送方只管发送,对方有没有收到(例如网络拥塞,这个包丢掉了,或者检验和出错被接收方扔掉了),我都不管。

  1. 请问这样的理解有错吗?

  2. 其次,如果这样的理解是正确的,那么想RIP采用UDP我可以理解,因为其实相对高频的交换信息,其中一次报文丢失了影响不大,可是为什么DNS也是采用UDP呢?假如带有域名对应的真实地址的报文丢失,发送方就不知道域名对应的IP地址,继而就无法访问网络了啊?

谢谢各位解答

阅读 5.9k
1 个回答

DNS是一个查询非常频繁,量很大,并且每个查询都是很短的连接的协议,在这个情况下如果采用TCP会放大TCP的缺点,比如说维护一个连接的开销很大,握手对于一个这么高频繁的服务来说纯粹在浪费时间和流量

UDP实际上是把可靠性的检查转交给用户了(这里的用户也就是更高层的协议)
它确实没有内建可靠性检查,但不代表你自己不可以实现一个保障机制,客户端DNS调用失败完全可以重试,还可以fallback到候选服务器的方式来规避这个问题(一个不行,那就换一个嘛,你看DNS服务器一般都会配置两个,Linux甚至允许你配置更多的dns服务器)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进