加载中…
个人资料
一网无前
一网无前
  • 博客等级:
  • 博客积分:0
  • 博客访问:281,611
  • 关注人气:27
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

老沈再改教科书:DNS的TCP 53号端口究竟什么时候会用到

(2017-05-29 18:41:58)
标签:

dns的tcp端口应用

tcp53端口

dns的53端口

dns的tc标志位

dns包大小

分类: 网络技术
DNS的TCP 53号端口服务到底在什么场景下会用到?
绝大多数运维老鸟们定然不屑!“TCP 53号端口只有在DNS服务之间做区域传输同步的时候用到,用户查询服务是不会用到的”——教科书上这么写的,没错,老沈TCP/IP详解课程上课时也是这么说的。
是的,一直以来老沈也是这么认为的,DNS在用户查询服务时用的是UDP的53端口,TCP的53端口是主辅DNS之间同步和传输数据才用到的。
然而老沈今天遇到的问题和随之展开的一系列数据分析将这一“常识性”观点彻底推翻,因此,才写下本文。(要知道老沈太忙,不是自己都觉得很重要的问题是不会轻易写博文的),下面展开:
一、问题
近日出于加固校园网内网安全的考虑,网络中心在数据中心出入口全面升级ACL,做法是封死所有不需要为用户提供服务的通信端口,策略之一就是对DNS服务器的访问控制,只放行到DNS服务器UDP的53号端口的访问,其它端口一律封闭。
发现和分析:
1、策略部署了两天,初看没有什么问题,校内用户上网一切正常......
2、28日夜接到用户反映,上网是正常的,但是在某些场景下图片显示不全,这里的场景是手机端腾讯新闻APP,用手机浏览腾讯新闻APP时总有部分图片显示不出来,而且这些图片是腾讯新闻首页的缩略图或者栏目列表缩略图,新闻正文页的图片是没有问题的。而电脑端则一切正常。
3、初步考虑分析,老沈未太在意,因为学校这么大,只有1个用户反映这个问题,估计是用户端自己的设备问题,比如说是用户自己的手机问题、无线路由器问题,考虑到近来广西电信省网也出过几次问题考虑也可能是运营商问题。
4、29日下午上网,老沈发现自己手机浏览腾讯新闻出现同一问题,预感到事情没有那么简单,开始查摆分析。
二、分析和结论
先放结论和故障解决方法:
被ACL拦截的DNS的TCP 53号端口在这个场景中需要用来与用户建立面向连接的DNS请求应答服务,因此在ACL中放行用户对DNS服务器的TCP 53号端口访问后,问题立马解决。
下面来详细分析,从头说起:
1、UDP协议或程序设计中的包大小问题:
我们常说以太网MTU为1500字节,是的,所以UDP报文的理论最大值为1480(在没有使用IP选项字段时,1500减去IP头20个字节),然而UDP协议走的报文大小MAX值真的能按照1480来设计吗?
答案是否定的,TCP报文可以按1480的最大值来走,UDP则不行。
局域网内没有问题,但是Internet上的标准MTU值为576字节,如果设计的协议要走INTERNET,那么就得考虑了。
如果协议和程序按照1480设计,对TCP是没有问题的,即使在过INTERNET时遇到MTU小于1500的场景,那么被分片,到目标端重组,这除了会增加理论上的延迟和性能损耗外,不会有连通性问题,关键点在于TCP有重传机制,如果某一分片丢失,可以重传来保证可靠性。
那么对于UDP呢,不像TCP一样有重传保障机制,如果1480的UDP报文在过INTERNET时被分片,且分片有丢失情况,那么问题是严重的,目标端无法重组数据包也无法有效与服务端确认和重传,那么损失的就不仅仅是延迟和性能了,可能会导致服务不可用。 
因此UDP协议应用在被设计时,数据包大小会被限制在internet标准MTU 576字节以下(有效数据则只有576-20-8=548),DNS协议就是如此,这也是为什么我们看一些防火墙会将大于512字节的DNS UDP包视为攻击。因此DNS UDP包大小的实际MAX值只有512字节。
2、那么DNS域名服务有超过512字节的应答报文服务场景吗?答案是有的,或许以前少见,但现在却不少了。
例如我们上面谈到的问题场景,就是典型情况,客户端请求的腾讯新闻APP主页或栏目页DNS解析请求,服务器要回答的内容很多,一个最多512字节的DNS UDP 应答包无法提供全部查询解答。这时就需要用到DNS的TCP 53号端口来为用户提供查询服务了。
原理:当客户端发出DNS查询请求,从服务器收到的响应报文中的TC(删减标志)比特被置为1时,表示应答总长度超过512字节,只返回前512个字节,这时DNS就需要使用TCP重发原来的查询请求。
3、具体是什么样的,看下面的数据抓包分析过程,老沈通过360软件在笔记本上创建了一个共享wifi,让手机通过该wifi上网,然后在笔记本上抓包,获得全过程DNS报文。
先上总图(图1):
老沈再改教科书:DNS的TCP <wbr>53号端口究竟什么时候会用到

看图说话:

图1中标1处:用户向DNS服务器发出DNS解析请求

图1中标2处:服务器返回解析结果,包大小已封顶达552字节,同时解析结果中,DNS的TC标志位置一,告诉用户这是一个被裁减的不完整应答(如下图2)

图2:老沈再改教科书:DNS的TCP <wbr>53号端口究竟什么时候会用到

继续,在收到这个DNS应答后,用户将向DNS服务器的TCP 53号端口发起TCP连接,所以图1中标3-5处为TCP三次握手过程。

图1标6处,三次握手结束后,客户端向DNS的TCP 53号正式发出DNS解析请求。请求包如下(图3

图3:

老沈再改教科书:DNS的TCP <wbr>53号端口究竟什么时候会用到

看到了吗,这是TCP 的 53号端口,不是UDP。

下面图4是服务器回复的查询结果。

图4:

老沈再改教科书:DNS的TCP <wbr>53号端口究竟什么时候会用到

OK,再回看一下图1标8处,这个TCP的解析响应包体积为642字节,已经超出了DNS UDP包的承载范围。

以上就是问题解决全文。你我共勉!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有