【计算机网络】不同网段内主机如何通信

学习计算机网络如果只是被动的接受知识的话,不但枯燥,效率低下,而且理解也不够深。这里我推荐一款网络仿真软件cisco packet tracer。这款软件最有价值的地方在于用户可以通过软件来模拟真实的网络,能够零成本搭建一套计算机网络。我们可以边学网络边用这个软件来进行仿真,验证所学知识。

下载链接:https://www.netacad.com/courses/packet-tracer  学生版是免费的,学习的话足够了。

下面是软件主界面的截图 :

【计算机网络】不同网段内主机如何通信_第1张图片

让我们一步一步来学习,主机之间的通信过程。开始之前,大家应该建立一个分层的思想,这中思想贯穿了整个计算机体系,是一个非常重要的思想。我们在学习一层的时候,请务必不要纠结于它的底层的原理,只要知道在做什么,会用就行!!!

  • 我们看看同一网段内的主机是怎么通信的。

1. 假设我们有如下的一个子网:

【计算机网络】不同网段内主机如何通信_第2张图片

三个主机通过一个hub进行连接,我们知道hub是第一层(物理层)设备,所以它只具备无脑广播的功能。

此时,子网内的任何一个两个主机之间的通信都是通过广播的方式来进行,而且一次只能允许一台主机发送消息(冲突域),否则同一条线路可能同时传输两个信号,会相互干扰。这种通信方式效率非常低,因此hub现在已经很少使用了。

2. 把上图中的hub换成switch:

Switch是第二层网络设备(数据链路层),它具备了数据单播的能力,因为switch具有自学习能力(其实就是维护一个mac-address-table),保存了跟它连接的设备的mac地址与端口的映射关系。

【计算机网络】不同网段内主机如何通信_第3张图片

数据链路层的数据包格式如下:

 它包含了目标mac和源mac。当数据包从一台主机(MAC地址为X)发送另一台主机(MAC地址为Y)时,数据包先发送交换机上,交换机在mac-address-table更新X和端口的映射。然后查询Y是否在表中,如果存在则将数据转发到该端口;如果不存在则广播到所有端口上,Y主机收到以后返回一个数据包到交换机,交换机更新Y的映射关系。这样下载X再给Y发送数据的时候,就不需要广播了。

如果一个网段内主机非常多,这个表可能会是TB级别的,不易扩展和维护。那我们可以采用这样一个办法,那就是将多个主机组成一个子网,这个子网共用一个逻辑地址(其实就是IP地址),子网的网络设备只需要维护子网内的主机就行了。然后将许多子网连接起来组成一个更大的子网,这样可以一直扩展下去,理论上就可以容纳无穷多台主机了。如下图:

【计算机网络】不同网段内主机如何通信_第4张图片

有了IP地址以后,我们边可以将数据包先发送到目标主机所在的子网,剩下的可以依据上面的原理就可以发送到目标主机了。

注:先看看IP数据包的大概格式。可以看到数据格式跟数据的流动方式密切相关的。数据从主机A的应用层依次往下进行封装,在后再路由器先解封,在重新封装,最后发到目标主机进行解封,所以才有了上面的数据格式 

【计算机网络】不同网段内主机如何通信_第5张图片

3. 在同一子网中,两个主机要通过IP地址进行通信,过程是怎样的呢?

ping命令为例,当我们用PC0 ping PC1时,数据包发送过程如下图所示:

【计算机网络】不同网段内主机如何通信_第6张图片

总结一下,每次同一子网内主机之间要通信之前,源主机都要查询目标ip是否在自己的mac-ip映射表中,如果不存在就要通过arp协议来寻找目标主机的mac地址,找到目标主机的mac之后,源主机会将目标主机的mac-ip添加到映射表中,然后就可以开始点对点发送数据了。

下面来看看不同网段之间主机之间的通信过程。

假设我们有如下的网络拓扑结构:

【计算机网络】不同网段内主机如何通信_第7张图片

我们要跟目标主机通信,就必须知道目标主机的ip和mac地址。如果源主机与目标主机不属于同一子网,那么目标mac地址为默认网关的mac地址。随后数据被发送到默认网关,发送的方式参考上面同一子网内主机的通信(因为默认网关与源主机必定是在同一个子网中的)。默认网关收到后,将目标mac地址设置为下一跳的路由器的mac地址(找不到下一跳的mac地址就使用arp协议,广播到所有子网设备)。在这一过程中目标IP和源IP始终不变,只有目的mac地址不断变化。

为什么要同时使用mac地址和ip地址?

不同的地址作用于不同的层,mac作用于数据链路层,ip作用于网络层;数据包中,“mac地址包在ip地址之外面” ,每当一个数据包被解析时,总是mac地址先被解析到。如果数据包的mac地址跟当前设备的mac地址不符,则直接丢弃,反之会继续向上层发送,这样能够提高效率。所以可以这样理解,ip地址是逻辑地址,它可以计算网络的最短路径,为数据包指明了下一个应该去的设备,将下一个设备的mac地址设为目的mac地址,从而使得该数据包能够被送到那个路由器。

总结起来可以这么理解,ip地址为数据包去向指明了方向,下一个站是哪里;而mac地址有点类似于一个跑腿的,能够将数据包运送到指定的设备。因此,可以看到在整个传输过程中目的ip始终不变,应为它表明了数据包的终点,每次到达一个路由器,都会计算出下一步怎么走最优,一旦找到了下一个目标路由器,则将目的mac设为那个路由器的mac,至于怎么到达,就不是ip地址需要操心的了,而是由数据链路层和物理层负责。

 

 

你可能感兴趣的:(【计算机网络】不同网段内主机如何通信)