2013-08-01 52 views
1

层关系,我有一个关于网络层的问题,那就是:有关网络

大家都知道,在层架构,N + 2层应该只依赖于N + 1层上,而对此一无所知N层。例如,在典型应用中,网络层应该只依赖于商业逻辑层上,而不是数据访问层

,当涉及到计算机网络,事情似乎有所不同。在应用层,程序必须知道不仅传历程层(TCP端口),也是网络层(IP地址)

这让我困惑,你怎么看?

感谢您的帮助。

+0

不幸的是生活并不是真的那样。例如,TCP/IP以多种方式违反了该原则。 OSI堆栈试图不去,但今天它在哪里? – EJP

回答

2

通常你是对的。不幸的是,网络中的图层之间的边界有点模糊,这不仅仅是因为我们有一个未使用的标准(OSI)和事实上的标准,它不强制您提到的想法,而且还因为协议通常不会严格地绑定到一个图层但可以对其中的一个做更多的事情。在OSI模型之前和标准化之前已经开发出了大量的协议,然后对一些根本性的改变已经太晚了。所以有些协议被认为是在两层之间(或者在两层之间),比如MPLS,ARP等。而且基于另一个协议的协议也是在同一层,就像OSPF一样在IP之上运行,即使它们被认为是在L3上。

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

TCP/IP是对实施的可行性,其中OSI更关心的标准则该标准的实施更加注重。这是糟糕和好的一面。自由实施协议的能力可以是一个优势,如果你使用这种能力很好,并且由于你没有严格地约束某些规范,你可以更高效地做一些事情......或者是故事失败。混合“责任”的缺点是显而易见的,例如H.323等协议将IP地址嵌入到用户的有效负载中,所以如果您想要执行NAT,您需要检查有效负载,更改IP地址,重新计算校验和以及像这样的东西,而不是仅仅处理网络层上的翻译。

为什么东西还是这样吗?可能是因为没有简单的方法来改变任何这种情况,因为需要更新的设备和协议,应用程序等数量庞大,这需要花费很多时间。只要看看采用IPv6的速度已经超过15年了。

+0

非常感谢。你解释得很清楚,不仅回答我的问题,而且还解决一些基本的想法。 – michael