DNS的主要作用是将域名转换为相应的IP地址,那么为什么要成为应用层协议呢?

我认为DNS是应用层协议,因为例如,如果我想要创建TCP连接,我需要第4层中的目标IP地址,
我正确吗?还有另一个答案吗?

谢谢!

评论

@sergeyrar总结了这种情况(基本上,DNS在TCP + UDP之上,因此在简化的Internet堆栈上,即使经常从视图中隐藏它也是一种应用程序协议),但是为什么对您来说这很重要?上下文是什么?纯粹是理论上的问题吗?另外,DNS不仅将域名转换为相应的IP地址,而且范围更广。

#1 楼

DNS是应用程序层协议,因为DNS查询和应答是应用程序级通信。应用程序层仅了解DNS数据包中的查询和应答部分。
因此应用程序层DNS查询/应答封装在第4层udp中,然后封装在第3层IP ...中,依此类推。

评论


DNS使用UDP和TCP(是的,我在这里重复一遍)。

–帕特里克·梅夫克(Patrick Mevzek)
18-2-28在15:42

它仅用于区域传输的TCP,对吗?但正常的查询/答案将是udp。

–abdul_razak
18-2-28在15:49

不,这不是真的。 TCP也可以用于“常规”查询。请参阅上面@RonMaupin引用的RFC,例如,请参见其他问题:serverfault.com/questions/404840/…

–帕特里克·梅夫克(Patrick Mevzek)
18-2-28在15:50

#2 楼

物理,数据链路,网络或传输层的协议不使用名称。只有应用程序需要使用名称,因此DNS是应用程序层协议,因为它允许应用程序将名称转换为网络地址。

#3 楼


我认为DNS是应用层协议,因为如果对于
示例,我想创建TCP连接,则需要第4层中的目标ip
地址,对吗?


IP是第3层协议。

DNS只是将主机名转换为IP地址的服务,您需要这样做,因为人类比数字更容易记住名称。

因此,一旦输入网站名称,您的浏览器客户端就会有一些API要求操作系统向输入的名称发出DNS请求。

DNS请求会传输到驻留在Internet上的特定DNS服务器IP地址(您手动配置的地址或通过DHCP更新收到的地址)。
让该服务器知道您特别想要的服务(因为该服务器也可能是HTTP服务器)例如),您还需要指定一个端口号,DNS使用UDP端口53。因此,它必须是应用层协议。

如果您的DNS服务器将始终位于您的本地子网上,您可以使用第4层协议来实现此目的(服务器将通过专用于该服务的唯一多播IP地址来识别传入请求-例如与OSPF相同的机制)。 br />

评论


否决我的人,请提出您的观点!很想听听您的见解。

–manish ma
18-2-28在14:22

DNS使用UDP和TCP!

–帕特里克·梅夫克(Patrick Mevzek)
18年2月28日在15:34

我认为有人真的不同意DNS是应用层协议,因为所有答案都被否决了。

–罗恩·莫潘♦
18年2月28日在15:34

@PatrickMevzek是正确的,尽管许多实施尚未赶上RFC 5966 TCP上的DNS传输-实施要求:“因此,本文档更新了核心DNS协议规范,因此对TCP的支持自此成为完整DNS协议的必要部分实施。”

–罗恩·莫潘♦
18年2月28日在15:37

@RonMaupin这将成为现在实现实现的罕见情况(无论如何,这都是DNSSEC所需要的),或者您是否有一些特定的想法?它只是留下了太多的错误信息,网络无缘无故地盲目地过滤了TCP / 53(仅仅是因为他们在某处读到只有AXFR才需要这样做,这是错误的)。进行RFC是为了有一种方法可以显示一个文档,说该文档现在应该在上方,否则人们将通过指向前一个文档来宽恕自己。

–帕特里克·梅夫克(Patrick Mevzek)
18-2-28在15:40