关于网络的层依赖性

时间:2013-08-01 19:23:43

标签: networking layer

我对网络层有疑问,即:

众所周知,在层体系结构中,N + 2层应仅依赖于N + 1层,而对N层一无所知。例如,在典型的应用程序中,Web层应该只依赖于业务逻辑层,而不是数据访问层

当谈到计算机网络时,情况似乎有所不同。在应用层,程序不仅要知道传输层(TCP端口),还要知道网络层(IP地址)

这让我很困惑,你怎么看待这个?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

通常你是对的。遗憾的是,网络中各层之间的边界有点模糊,不仅仅是因为我们有一个未使用的标准(OSI)和事实上的标准,它没有强制执行你提到的想法,而且因为协议通常不严格绑定到一个层但是可以做更多的东西。在OSI模型之前和标准化之前开发了大量协议,然后进行一些彻底的改变已经太晚了。因此,有些协议被认为是在两层(或两层)之间,如MPLS,ARP等。协议基于另一个协议,它位于同一层,就像在IP之上运行的OSPF一样,即使它们也是如此被认为是在L3上。

你提到的是另一个例子。原因是寻址不是在最上层(应用层)上进行,而是在网络层(对于主机/网络适配器)和传输层(对于进程/应用程序)进行。因此,您需要知道能够寻址远程应用程序的IP地址和端口号(实际上是协议)。这就是网络套接字作为应用程序和网络之间的网关(或API)的用武之地。因此,即使你在技术上正确地违反分层模型的原则,你也不会在L3或L4上做任何事情(但你可以;))。您不需要对数据包进行分段,处理重新传输或担心错误更正等,您只需在创建套接字时传递所需的地址信息。

TCP / IP更倾向于实施的可行性,其中OSI更关注标准然后执行该标准。这有坏的和好的方面。如果您很好地使用该功能,并且由于您没有严格遵守某些规范,您可以更有效地执行某些操作...或者无法正常执行,则自由实现协议的能力可能是一个优势。混合“责任”的缺点是显而易见的,很好的例子是像H.323这样的协议,它将IP地址嵌入到用户的有效负载中,所以如果你想做NAT,你需要检查有效负载,更改IP地址,重新计算校验和,以及这样的东西,而不是仅仅处理网络层上的翻译。

为什么东西仍然像这样?可能是因为没有简单的方法可以改变任何因为需要更新的设备和协议,应用程序等的数量,这需要花费很多时间。看看已经存在超过15年的IPv6的采用速度。