14.8 用UDP还是用TCP
注意到D N S名字服务器使用的熟知端口号无论对 U D P还是T C P都是5 3。这意味着D N S均
支持U D P和T C P访问,但我们使用 t c p d u m p观察的所有例子都是采用 U D P。那么这两种协议
都在什么情况下采用以及采用的理由都是什么呢?
当名字解析器发出一个查询请求,并且返回响应中的 T C(删减标志)比特被设置为 1时,
它就意味着响应的长度超过了 5 1 2个字节,而仅返回前 5 1 2个字节。在遇到这种情况时,名字
解析器通常使用T C P重发原来的查询请求,它将允许返回的响应超过 5 1 2个字节(回想在11 . 1 0
节讨论的U D P数据报的最大长度)。既然T C P能将用户的数据流分为一些报文段,它就能用多
个报文段来传送任意长度的用户数据。
此外,当一个域的辅助名字服务器在启动时,将从该域的主名字服务器执行区域传送。
我们也说过辅助服务器将定时(通常是 3小时)向主服务器进行查询以便了解主服务器数据是
否发生变动。如果有变动,将执行一次区域传送。区域传送将使用 T C P,因为这里传送的数
据远比一个查询或响应多得多。
既然D N S主要使用U D P,无论是名字解析器还是名字服务器都必须自己处理超时和重传。
此外,不像其他的使用 U D P的I n t e r n e t应用(T F T P、B O O T P和S N M P),大部分操作集中在局
域网上,D N S查询和响应通常经过广域网。分组丢失率和往返时间的不确定性在广域网上比
局域网上更大。这样对于D N S客户程序,一个好的重传和超时程序就显得更重要了。
14.9 另一个例子
让我们通过另一个例子将已经介绍的许多 D N S特性作一个综合性回顾。先启动 Rlogin 客
户程序,然后连接到一个位于其他域的 R l o g i n服务器。图 1 4 - 1 6显示了发生的分组交换过程。
下面发生的11个步骤都假定客户和服务器的高速缓存中没有任何信息。
1) 客户程序启动后,调用它的名字解析器函数将我们键入的主机名转换为一个 I P地址。
一个A类型的查询请求被送往一个根服务器。
2) 由根服务器返回的响应中包含为该服务器所在域服务的名字服务器名。
3) 客户端的名字解析器将向该服务器的名字服务器重发上述 A类型查询,这个查询通常
是将期望递归标志设置为 1。
4) 返回的应答中包含R l o g i n服务器的 I P地址。
5) Rlogin客户和R l o g i n服务器建立一个T C P连接(第1 8章将提供该步骤的细节)。客户和
服务器的T C P模块间将交换3个分组。
下载