OSI 中的数据转发过程
书接上回,上次简单的了解了OSI以及各个层次的作用。这次我们了解一下,数据是如何在OSI各个层次之间穿梭,又是如何在网络中传递的。
一、 封装:
我们还是将应用层、表示层、会话层看成一个整体,合并为应用层看待。当数据又应用程序产生之后,面临的问题是什么呢?是传递给谁?如何传递?目标在哪里?这几个问题当中的哪一个呢?举个简单的例子,我们在天猫买了东西,接下来,你会担心对方不知道东西借给谁吗?会担心对方不知道您的收货地址吗?估计不会的,因此,应用层数据产生后,接下来的问题就是确定数据该以何种方式进行转发和控制,这也就是传输层的基本作用了。
传输层提供了多种传输方式,其中TCP和UDP是最常用的,当数据需要保证传递的完整性,有序性或者简单来讲是可靠性的时候,就需要TCP这种协议去为应用程序服务,而面对多种应用程序,TCP如何区分数据是那个应用的呢?总不能把QQ的数据交给优酷打开吧。于是定义了提供TCP或者UDP 与应用程序对接的接口,即端口。同时,应用程序,会通过增加一些说明性的,控制性的内容在数据的前面,即增加头部给数据,此过程就是封装。这时,封装之后的数据就成为了一个分段。
同理,数据经过每一层,向下传递的时候,都会告诉下面一层需要进行何种操作,也就是要进行封装,直到数据成为比特。因此上一层对下一层的控制,体现在封装的内容当中。
二、网关和下一跳
由于网络层进行了网络划分,而路由器则是连接不同网络的边界。因此,对于内部网络而言,路由器则是连接内网与外网的边界,即网关。
网络中,路由器互相连接构成网络拓扑,犹如将不同网络连接而成的地图。因此要实现此地图中任意两点之间的通信,就必须要让图中每个路由器了解完整的网络信息,这就是路由表。因此,不同网络间通信,需网关路由器根据路由表进行路径的选择,然后通过合理的路由器接口将数据转发出去,将数据转发到转发路径中的下一个路由器或者接收者。
我们出行之时,欲达某地,需要在某地换乘公交或者地铁,换乘点就相当于我们的路由器,同时这个换乘点就是到达目标的下一站。从常识来判断,这个换乘点可以是距离起点最近的一站,也可以是距离终点最近的一站,只要是路径上的站点都可以称之为下一站。网络中,数据转发路径上的路由器,依理,亦可以作为转发的下一站路径,称之为下一跳路由器。下一跳也可以是距离起点最近的下一跳,即直连下一跳;同时也可以是转发路径中其他节点路由器,即非直连下一跳。由此观之,网关实际上就是直连的下一跳路由器,网络层是一跳一跳的经过路由器的选择而进行数据转发的。
三、地址解析协议
数据的转发无非是子网内通信,或者不同子网间通信两种情况。
数据的转发最终归结于从接口发出,从接口接收。所以,数据转发发生的时候,确定数据发送的接口以及接收的接口就非常重要。此时就需要地址解析协议了。
子网内部通信双方,处于同一个广播域,若要确认对方接收信息的接口,可直接通过广播进行询问。毕竟对方和我在同一个小区,我只需要在小区内呐喊,确定对方在几号楼几楼就可以了。
不同子网通信,如何确定目标的接口?首先,使用广播直接询问对方地址肯定不合适,因为双方并不在同一广播域。ARP提供了另一种方式---代理ARP。简而言之,就是让处于边界的路由器代替目标响应ARP应答,从而由路由器作为代理,将数据转发至目标。此种做法存在安全隐患,因此通常会将代理ARP功能关闭。此时,若想要实现对于外部数据的访问,就需要指明网关,或者指定下一跳转发地址,让网关或下一跳路由器接收数据的接口代替目标响应一跳跳转发至目标。
原文地址:http://blog.51cto.com/ligtt/2311896