UDP的不可靠体现在哪里?
都知道UDP是不可靠的,TCP是可靠的,那问题来了,UDP的不可靠体现在哪里?
UDP的首部有检验和,若检验和出错接收方会舍弃该包
UDP的首部的目的端口错误,接收方会通过ICMP告知发送方
以上可以看到其实UDP也对接受的报文进行了一定的检查,并不是无脑接收。
同时我参考了segmentfault里面其他关于UDP和TCP的答案,感觉上UDP的不可靠是体现在发送方只管发送,对方有没有收到(例如网络拥塞,这个包丢掉了,或者检验和出错被接收方扔掉了),我都不管。
请问这样的理解有错吗?
其次,如果这样的理解是正确的,那么想RIP采用UDP我可以理解,因为其实相对高频的交换信息,其中一次报文丢失了影响不大,可是为什么DNS也是采用UDP呢?假如带有域名对应的真实地址的报文丢失,发送方就不知道域名对应的IP地址,继而就无法访问网络了啊?
谢谢各位解答
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DNS是一个查询非常频繁,量很大,并且每个查询都是很短的连接的协议,在这个情况下如果采用TCP会放大TCP的缺点,比如说维护一个连接的开销很大,握手对于一个这么高频繁的服务来说纯粹在浪费时间和流量
UDP实际上是把可靠性的检查转交给用户了(这里的用户也就是更高层的协议)
它确实没有内建可靠性检查,但不代表你自己不可以实现一个保障机制,客户端DNS调用失败完全可以重试,还可以fallback到候选服务器的方式来规避这个问题(一个不行,那就换一个嘛,你看DNS服务器一般都会配置两个,Linux甚至允许你配置更多的dns服务器)