关于IP网段间互访的问题—路由是根本

2024-04-30 14:08

本文主要是介绍关于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网络和物理的链路层网络的关系除了承载与被承载之外其实并不大,也就是说并不是一个物理网络的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  172.16.0.5,肯定通了。
因此可以看出逻辑网络是否连通和物理网络的结构没有关系,只和路由有关,即使刚才那个arp引起的逻辑网络不通的问题也和路由有关,只要有路由,一切自由连通,如果物理网络是不同的网络,比如不同的以太网,那么道理一样,只不过情况更复杂罢了,本质还是创建路由。既然可以为网卡指定ip地址,那么可不可以说ip属于网卡呢?不能,网卡只是传输媒介罢了,ip是属于主机的,ip是提供给应用的一个逻辑概念,并不是网卡的内秉属性,还是以卡车为例,车上的货物是物主的而不是卡车的,以人的职位为例,职位是属于国家机器的而不是属于人的,人只是它的执行代理,这个人不干了还可以换人,但是该职位永远属于国家机器。一个古老的问题就是路由器和交换机的区别,按照这种逻辑网络和物理网络的理解,路由器就是指示ip数据如何走的机器,交换机指导物理数据帧怎么走,它只提供物理连接的两点之间的物理传输机制,其实路由器就是一个逻辑上的交换机,它的层次更高罢了。如果把路由当作寻址来理解的话,物理网络也有一个路由机制,交换机中也有一个“路由表”,那就是交换机学习到的mac地址和端口的映射关系。虽然路由需要人为指定,但是有一种路由确是在为网卡指定ip时自动生成的,这就是链路层发现的路由,该路由指导了和指定ip为一个网段的数据包该怎么走。规范将这个“显然”的事实作为一条自动路由生成了,规范将ip地址存在相同部分的主机作为一个ip网段,一般的,导线直接相联的两个网口是一个网段的,事实上这已经成了约定,于是协议就会认为这个网口的那一端一定和本网口指定的ip是一个网段的,于是就有了链路层自动发现的路由一说,含义就是:到和本网口同一ip网段的数据一定从本网口出去!这初看起来就是事实,难道不是吗?我们不都是这么配置网络的吗?很不幸,这不是事实。看看我刚才举的那个例子吧,那么混乱的配置,几乎没有在同一网段的地址,竟然ping通了!这就印证了另一个真正的事实,就是ip网络的连通在于路由而不是别的,协议自动生成的那条链路层路由其实是为了方便而不是真的必要,比如把上述混乱配置的例子中的链路层自动路由删除,照样可以ping通,其实那种混乱的配置下,我们根本就不用自动的链路层路由,那条路由是为常规配置准备的。仔细看看链路层路由,它实际上是借用了物理网络的方便,因为常规上尽量把一个ip逻辑网段映射到一个物理网段,所以可以借用这个常规的假设,因此叫做链路层路由。真正纯粹意义的ip逻辑网和物理网是没有关系的,不应该有上述的网段一致映射,但是规范中建议了那种映射。上面的混乱配置的例子才是真正的理论上的ip逻辑网络,可是很不实用,但是对于理解概念十分有用。

这篇关于关于IP网段间互访的问题—路由是根本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949074

相关文章

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言