实战网络编程系列-网络编程基础(二)

实战网络编程系列-网络编程基础(一)

1.3 网络上数据的传送过程

    互联网络的重要特征就是,它能由采用完全不同或不兼容技术的各种局域网和广域网组成。每台主机和其它每台主机都是物理相连的,但是如何使得某台源主机跨过所有这些不兼容的网络发送数据到另一台目的主机成为可能呢?

解决办法是有一个运行在每台主机和路由器上的协议软件,它消除了不同网络之间的差异。这个软件负责解释执行一种协议,控制主机和路由器协同工作来实现数据传输。这种协议必须提供两种基本能力:

1)命名方法。不同的局域网技术有不同和不兼容的方式来为主机分配地址。互联网络协议通过定义一种一致的主机地址格式,消除了这些差异。每台主机会被分配至少一个这种网络地址,这个地址唯一地标识了它。

2)传输机制。在电缆上的编码位和将这些位封装成帧方面,不同的网络互联技术有不同的和不兼容的方式。互联网络协议通过定义一种把数据位捆扎成不连续的组块——也就是包,从而消除了这些差异。一个包是由包和包体组成的,其中包头包括整个包的大小以及源主机和目的主机的地址,包体就是源主机发出的数据。

下图展示了一个主机和路由器如何使用互联网络协议在不兼容的局域网间传输数送的示例。

 实战网络编程系列-网络编程基础(二)_第1张图片

   PH: 互联网络包头; FH1 LAN1的帧头;FH2LAN2  的帧头。

 

这个互联网络示例由两个局域网通过一台路由器连接而成。一个客户端运行在主机A上,主机ALAN1相连,它发送了一串数据字节到运行在主机B上的服务器端,主机B则连接在LAN2上。这个过程有8个基本步骤:

1、  运行在主机A上的客户端进行了一个系统调用,从客户端的虚拟地址空间复制数据到内核缓冲区。

2、  主机A上的协议软件通过在数据前附加互联网络的包头和LAN1帧头,创建了一个LAN1帧。根据互联网络的包头寻址到主机BLAN1帧头寻址到路由器。然后它传输此帧到适配器。注意,LAN1帧的有效载荷是一个互联网络包,该包的有效载荷是实际的用户数据。这种封装是基本的网络互联方法之一。

3、  LAN1适配器复制该帧到网络上。

4、  当此帧到达路由器时,路由器的LAN1适配器从电缆上读取它,并把它传送到协议软件。

5、  路由器从互联网络包头中提取目的地址,并用它作为路由表的索引,确定向哪里转发这个包,在本例中是LAN2。路由器剥落旧的LAN1的帧头,加上寻址到主机B的新的LAN2帧头,并把得到的帧传送到适配器。

6、  路由器的LAN2适配器复制该帧到网络上。

7、  当此帧到达主机B时,它的适配器从电缆上读到此帧,并将它传送到协议软件中。

8、  最后,主机B上的协议软件剥落包头和帧头。当服务器进行一个读取这些数据的系统调用时,协议软件最终将得到数据复制到服务器的虚拟地址空间。

当然,这里我们掩盖了许多复杂的问题。如果不同的网络有不同的帧大小的最大值,该怎么办呢?路由器如何知道往哪里转发帧呢?当网络拓扑变化时,如何通知路由器?如果一个包丢失了又会如何呢?虽然如此,我们的示例抓住了互联网络的精髓,封装是关键。


 

你可能感兴趣的:(实战网络编程系列-网络编程基础(二))