Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 关于网络的层依赖_Networking_Layer - Fatal编程技术网

Networking 关于网络的层依赖

Networking 关于网络的层依赖,networking,layer,Networking,Layer,我有一个关于网络层的问题,那就是: 众所周知,在分层体系结构中,N+2层应该只依赖于N+1层,而对N层一无所知。例如,在典型的应用程序中,web层应该只依赖于业务逻辑层,而不依赖于数据访问层 谈到计算机网络,情况似乎有所不同。在应用层,程序不仅要知道传输层(TCP端口),还要知道网络层(IP地址) 这让我很困惑,你怎么看 谢谢你的帮助。通常你是对的。不幸的是,网络中各层之间的边界有点模糊,这不仅是因为我们有一个未使用的标准(OSI)和事实上的标准,该标准没有强制执行您提到的想法,而且还因为协议通

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

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

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

这让我很困惑,你怎么看


谢谢你的帮助。

通常你是对的。不幸的是,网络中各层之间的边界有点模糊,这不仅是因为我们有一个未使用的标准(OSI)和事实上的标准,该标准没有强制执行您提到的想法,而且还因为协议通常不严格绑定到一个层,而是可以在多个层上执行操作。大量的协议是在OSI模型和标准化之前开发的,现在进行一些根本性的改变已经太晚了。因此,有一些协议被认为是在两层之间(或两层上),比如MPLS、ARP等,还有一些协议是基于同一层上的另一个协议,比如运行在IP之上的OSPF,即使它们被认为是在L3上

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

TCP/IP更倾向于实现的可行性,OSI更关心标准,而不是该标准的实现。这有好的一面也有坏的一面。自由实现协议的能力是一个优势,如果你能很好地使用这种能力,并且由于你没有严格地受某些规范的约束,你可以更有效地做一些事情。。。或者以史诗般的方式失败。混合“责任”的缺点是显而易见的,很好的例子是像H.323这样的协议,它将IP地址嵌入用户的负载中,所以如果你想进行NAT,例如,你需要检查负载、更改IP地址、重新计算校验和等等,而不是仅仅在网络层处理转换


为什么东西还是这样?可能是因为,由于需要更新的设备、协议、应用程序等的数量太多,所以没有简单的方法来改变这些,这需要花费大量的时间。看看采用IPv6的速度吧,它已经存在了15年多了。

不幸的是,生活并非如此。例如,TCP/IP在几个方面违反了这一原则。OSI堆栈试图不这样做,但它今天在哪里?非常感谢。你解释得很清楚,不仅回答了我的问题,而且解决了一些基本问题。