现在流行什么语言建设网站,北京手机网站设计,网站一年域名费用多少钱,最专业的佛山网站建设价格一、前言之前在聊到 App 网络优化时#xff0c;聊到通过 HTTPDNS 替换掉传统的 DNS 解析#xff0c;来达到网络优化的效果。其中提到 DNS 解析#xff0c;是支持 UDP 和 TCP 双协议的。但是细心的朋友通过 wireshark、sniffer、tcpdump 等抓包工具分析#xff0c;会发现基本… 一、前言之前在聊到 App 网络优化时聊到通过 HTTPDNS 替换掉传统的 DNS 解析来达到网络优化的效果。其中提到 DNS 解析是支持 UDP 和 TCP 双协议的。但是细心的朋友通过 wireshark、sniffer、tcpdump 等抓包工具分析会发现基本上所有客户端发起 DNS 查询的场景下都只使用到了 UDP 协议。那在 DNS 中TCP 协议在什么场景下才会用到呢今天我们就来聊聊DNS 的 TCP 的使用场景。二、DNS2.1 什么是 DNS先来简单了解一下 DNS。在网络的世界中每个有效的域名背后都有为其提供服务的服务器而我们网络通信的首要条件就是知道服务器的 IP 地址。但是记住域名(网址)肯定是比记住 IP 地址简单。如果有某种方法可以通过域名查到其提供服务的服务器 IP 地址那就非常方便了。这里就需要用到 DNS 服务器以及 DNS 解析。DNS(Domain Name System)它的作用就是根据域名查出对应的 IP 地址它是 HTTP 协议的前提。只有将域名正确的解析成 IP 地址后后面的 HTTP 流程才可以继续进行下去。DNS 同时占用了 UDP 和 TCP 的 53 端口但是大多数情况下DNS 查询都只使用到了 UDP而 TCP 只在一些特殊情况下才会被使用到。简单来说DNS 使用 TCP 的情况只有两种DNS 查询响应报文大于 512 字节时。DNS 主、辅助服务器之间进行区域传送时。使用 TCP 的场景基本上就是以上两种场景当然如果客户端主动发起一个 TCP 的 DNS 查询也会使用 TCP 协议这就不在讨论的范围内了。2.2 DNS 响应报文大于 512 字节说到 DNS 响应报文先来看看 DNS 数据包的结构对于 DNS 来说请求报文和响应报文的结构是一样的。这其中我们主要关注 Flags 这个标志位的结构。在 Flags 中每个字段都有其自己的含义在这里我们做重关注 QR 和 TC 两个字段。QR 是一个 Bit用于标识当前是查询报文(0)还是响应报文(1)。TC 也是一个 Bit当它的值为 1 时表示当前响应报文总长度已经超过 512 字节所以做了截断处理只返回前 512 个字节。当遇到这种情况时DNS 解析器会使用 TCP 来重发原来的查询请求UDP 要求相应报文在 512 字节以内而 TCP 则没有此限制TCP 能用多个报文段来传送任意长度的用户数据。DNS 查询是一个过程复杂但是结果简单的过程。通常返回的数据不会大于 512 字节这也就是为什么我们通过抓包的手段得到的结果都是 DNS 在使用 UDP 协议。需要注意的是在实际使用中很多 DNS 服务器在进行配置的时候就把 TCP 查询包的方式关闭仅支持 UDP 查询包。2.3 DNS 主、辅助服务器的区域传送DNS 服务器在设计时就要求一定要是高可用、高并发和分布式的服务器它被分为多个层次结构分别是根 DNS 服务器、顶级域 DNS 服务器、权威 DNS 服务器。这三类 DNS 服务器组成一种类似树的结构。在这个树中一个独立管理的 DNS 子树称为一个区域(zone)。一个 DNS 服务器负责管理一个或多个区域为了满足高可用一个区域的管理者必须为该区域提供一个主 DNS 服务器和至少一个辅助 DNS 服务器。主 DNS 服务器和辅助 DNS 服务器必须是独立和冗余的以便当某个 DNS 服务器发生故障时不会影响该区域的 DNS 查询。既然 DNS 服务器有主和辅助之分那必然面临了数据同步的情况我们将辅助服务器从主服务器同步信息的动作称为区域传送而在触发区域传送试使用的就是 TCP 协议。触发 DNS 区域传送的情况有两种新上线一台辅助服务器会从主服务器执行区域传送进行同步数据。辅助服务器会定时(通常是 3 小时)向主服务器查询以便了解到主服务器的数据是否发生变动如果变动也会触发一次区域传送。区域传送会使用 TCP 协议一方面是为了保证数据的可靠另一方面此时传送的数据也远比一个查询或响应大的多。三、小结时刻到此我们就了解清楚了虽然 DNS 服务器支持 TCP 和 UDP 双协议但是通常我们在做 DNS 查询的时候也只用到了 UDP 协议。TCP 只有在以下两种情况下才会被使用到DNS 响应报文大于 512 字节通过 TC 标记为截断是才会使用 TCP 重新查询一遍。DNS 主服务器和辅助服务器之间进行区域传送时为了保证稳定以及传输数据太大的原因也会使用 TCP 协议传输。DNS 查询和响应通常都在广域网上通信对于 DNS 客户端保证好的重传和超时机制就显得尤为重要了。reference《TCP/IP 详解卷一》14.8 用 UDP 还是 TCPhttp://www.xumenger.com/dns-udp-tcp-20180604本文对你有帮助吗留言、点赞、转发是最大的支持谢谢「联机圆桌」?推荐我的知识星球一年 50 个优质问题上桌联机学习。公众号后台回复成长『成长』将会得到我准备的学习资料也能回复『加群』一起学习进步你还能回复『提问』向我发起提问。推荐阅读关于字符编码你需要知道的都在这里 | 图解HTTP 范围请求 | Java 异常处理 | 安卓防止用户关闭动画导致动画失效 | Git 找回遗失的代码 | 阿里的 Alpha 助力 App 启动速度优化