之所以IP网段间可以互相访问,完全靠的就是路由,因此路由是IP通信的根本,ip是机器可以进行通信的资格证书,而路由决定该机器的数据可以到哪以及如何到。没有路由就不可能有IP网络,IP其实就是一个标号,而IP路由就是精心设计的基于这种标号的寻址机制。这种逻辑上的解决方案使整个世界连接在了一起从而成为一个整体,前面说过,ip提供了一个逻辑的物理层,而传输层就是逻辑上的链路层,那么整个ip网络就是一个逻辑网络,这个逻辑网络丝毫不会在意下面的物理网络,也就是说不会在意下面的链路层和物理层。逻辑网络和下面的物理网络比如以太网建立关系的时候就是给网卡分配ip地址的时候,毕竟ip网络只是一个逻辑意义上的网络,想要实际传输数据还是要靠物理网络承载,将ip地址分配给网卡就是表示需要这个网卡作为ip数据传输的载体,就是需要这个网卡传输到这个ip的或者从这个ip发出的数据,网卡只是一个承载层,当然可以承载多个ip的数据,就好比一辆卡车可以装载多种货物一样,一个人也可以身兼数职,这里人是物理概念,而职位是逻辑概念,职位给了一个人,这个人只是这个这个职位行为的执行者,具体如何执行还要看职位本身的指示,因此将ip地址给了网卡,网卡不知道如何传输ip数据,网卡的作用再次重申,就是一个承载方,它只提供物理连接的两点的传输机制而已,记住是物理相连的两点,如果想让一切工作起来,那么就要靠路由,路由就是IP逻辑网络这个“职位”的规则,它指示如何传输数据。
原则上你可以给一块网卡分配任意数量的IP,然后为这些ip地址指定路由就可以了,在这块网卡上你只能指示往哪个目的ip地址的数据往哪个网口走,给这块网卡分配多个ip地址意味着这些ip可以被寻到,也就是说有数据是以这些ip地址为目的的,因此你必须保证在别的机器或者路由器上配置指向这些ip的路由,只有这样,数据才能有去有回来往畅通,每个路由记录会指示数据怎么走,走的时候还是要一步一步走的,一步一步走就是通过底层的物理承载网络走的。只要你指定了路由,那么数据就可以通信,逻辑ip网络和物理的链路层网络的关系除了承载与被承载之外其实并不大,也就是说并不是一个物理网络的ip地址也必须是一个网段的,只要有路由就可以。举个例子:
将一台单网卡的linux机器M1的eth0配置如下两个ip(ip addr add):
eth0:
inet 192.168.0.152/24 brd 192.168.0.255 scope global eth0
inet 172.16.0.5/32 scope global eth0
然后将另一台单网卡的linux机器M2的eth0配置如下的一个ip:
eth0:
inet 10.2.2.5/24 brd 10.2.2.255 scope global eth0
保证两台机器在一个物理以太网即可,然后在M2上ping 192.168.0.152不通,ping 172.16.0.5也不通,难道是因为一个物理网络的ip也必须在一个逻辑网段吗?根本不是那回事,记住,ip逻辑网络中最重要的是路由,只要有路由就能通,和物理网络没有关系,于是为M2配置如下的路由:
172.16.0.5/32 dev eth0 scope link
这条路由的意义是往ip地址172.16.0.5/24的数据请走eth0,现在再试试ping 172.16.0.5,还是不行,是不是有啥问题了呢?一点问题也没有,首先先说说物理网络的行为,ip逻辑网络与物理网络还有一个相联系的地方就是 arp机制,如果路由配置好了,那么在路由的指导下进行实际传输,但是实际传输是在物理网络进行的,因此必须要有物理地址,这就是arp的作用,以太物理网络是广播网络,因此肯定可以随意传输数据的,我们不是已经有了去往目的地址172.16.0.5的路由了吗?那么在访问172.16.0.5之前首先需要172.16.0.5的mac物理地址,因为我们是在一个物理网络内的,因此M2的网卡就开始了询问:“谁的ip地址是172.16.0.5,请把你的 mac地址告诉我,我的地址是10.2.2.5。”然后把这条arp询问广播出去,因为是广播所有的机器都接收到这个询问,M1拥有172.16.0.5,因此M1做出回答,然后将它的mac地址打包发给10.2.2.5,可是出事了,它并不知道怎么到10.2.2.5啊,于是mac 地址便送不到10.2.2.5,于是直接阻碍了物理传输,于是就ping不通了,现在已经找到问题了,于是解决问题,就是很简单的给M1配置上到 10.2.2.5的路由:
10.2.2.5/32 dev eth0 scope link
原则上你可以给一块网卡分配任意数量的IP,然后为这些ip地址指定路由就可以了,在这块网卡上你只能指示往哪个目的ip地址的数据往哪个网口走,给这块网卡分配多个ip地址意味着这些ip可以被寻到,也就是说有数据是以这些ip地址为目的的,因此你必须保证在别的机器或者路由器上配置指向这些ip的路由,只有这样,数据才能有去有回来往畅通,每个路由记录会指示数据怎么走,走的时候还是要一步一步走的,一步一步走就是通过底层的物理承载网络走的。只要你指定了路由,那么数据就可以通信,逻辑ip网络和物理的链路层网络的关系除了承载与被承载之外其实并不大,也就是说并不是一个物理网络的ip地址也必须是一个网段的,只要有路由就可以。举个例子:
将一台单网卡的linux机器M1的eth0配置如下两个ip(ip addr add):
eth0:
inet 192.168.0.152/24 brd 192.168.0.255 scope global eth0
inet 172.16.0.5/32 scope global eth0
然后将另一台单网卡的linux机器M2的eth0配置如下的一个ip:
eth0:
inet 10.2.2.5/24 brd 10.2.2.255 scope global eth0
保证两台机器在一个物理以太网即可,然后在M2上ping 192.168.0.152不通,ping 172.16.0.5也不通,难道是因为一个物理网络的ip也必须在一个逻辑网段吗?根本不是那回事,记住,ip逻辑网络中最重要的是路由,只要有路由就能通,和物理网络没有关系,于是为M2配置如下的路由:
172.16.0.5/32 dev eth0 scope link
这条路由的意义是往ip地址172.16.0.5/24的数据请走eth0,现在再试试ping 172.16.0.5,还是不行,是不是有啥问题了呢?一点问题也没有,首先先说说物理网络的行为,ip逻辑网络与物理网络还有一个相联系的地方就是 arp机制,如果路由配置好了,那么在路由的指导下进行实际传输,但是实际传输是在物理网络进行的,因此必须要有物理地址,这就是arp的作用,以太物理网络是广播网络,因此肯定可以随意传输数据的,我们不是已经有了去往目的地址172.16.0.5的路由了吗?那么在访问172.16.0.5之前首先需要172.16.0.5的mac物理地址,因为我们是在一个物理网络内的,因此M2的网卡就开始了询问:“谁的ip地址是172.16.0.5,请把你的 mac地址告诉我,我的地址是10.2.2.5。”然后把这条arp询问广播出去,因为是广播所有的机器都接收到这个询问,M1拥有172.16.0.5,因此M1做出回答,然后将它的mac地址打包发给10.2.2.5,可是出事了,它并不知道怎么到10.2.2.5啊,于是mac 地址便送不到10.2.2.5,于是直接阻碍了物理传输,于是就ping不通了,现在已经找到问题了,于是解决问题,就是很简单的给M1配置上到 10.2.2.5的路由:
10.2.2.5/32 dev eth0 scope link
做完了以后,再在M2上试试ping
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274016