没有IP地址的主机如何保持IP层联通

在《两台不同网段的PC直连是否可以相互ping通》一文中,我有点像在玩旁门左道,本文中,我继续走火入魔。两台机器,M1和M2,各自有一个网卡eth0,配置如下:
M1的配置:
eth0上不配置任何IP地址。
M2的配置:
eth0上不配置任何IP地址。
....
爆炸,机器上都没有IP地址,通个毛线球啊!!
        我只是想在7年后进一步阐述一个常识,即能否互通,路由是根本。在7年前的2010年,我写了一篇文章《关于IP网段间互访的问题—路由是根本》,在前段时间,我写了一篇类似的《两台不同网段的PC直连是否可以相互ping通》,7年了,好似没有任何进步,除了文章排版好看了些,唉,也是沉醉,但不妨碍我更进一步。
        我依然想用M1的1.1.1.1来ping M2的2.2.2.2,但却不把这两个地址配置在M1和M2上,怎么办?很简单,配置路由即可。配置如下:
M1的配置:      
ip route add local 1.1.1.1/32 dev eth0
ip route add 2.2.2.2/32 dev eth0 scope link 或者 ip route add 2.2.2.2/32 via 2.2.2.2 dev eth0 onlink

M2的配置:
ip route add local 2.2.2.2/32 dev eth0
ip route add 1.1.1.1/32 dev eth0 scope link 或者 ip route add 1.1.1.1/32 via 2.2.2.2 dev eth0 onlink

试试看,在M1上来ping 2.2.2.2,尽情互通吧。
        看到了吧,没有配置任何IP地址,只配置了路由即可互通,以上配置中,local路由指示了本机接收哪些数据包,而onlink路由则可以直接arp目标。两条路由非常好理解。
        如果是转发设备,需不需要local路由呢?答案是需要的。也许你会问,作为转发设备,没有任何数据包要到本地啊,为什么还要local路由呢?这么理解是对的,然而你忽略了arp。
        不过如果你的链路层不是以太网,而是点到点的noarp链路的话,那么作为转发设备而言,local路由则不再需要。
--------------------
看了这个例子之后,也许你会问,那么IP地址的意义何在?说实话,IP地址的意义仅两点:
1.标识节点。
2.帮配置该IP的节点生成几条路由项:
2.1.标识自身的local路由;
2.2.标识子网的广播路由;
2.3.标识链路的链路层路由,即scope link路由;

看到了吗?如果说你不需要标识主机,只是为了通信,那么当你可以手工配置上述三种路由之后,也就根本不需要IP地址了。
--------------------
其实,IP路由这东西,没什么太多的知识在里面,关键看玩法。高端的玩法,可以搞搞算法,搞搞最短路径,生成树啥的,中端点的可以玩玩协议,BGP,IS-IS,OSPF啥的精通了也够装逼了,屌丝一点的,就像我这种,折腾下边缘点的东西,帮看到我文章的出点变态点的面试题,就很满足了。哈哈。
        说了这么多,路由是根本!没有显示bind的TCP listener怎么知道bind哪个地址?靠路由。UDP报文怎么填充源地址?靠路由。ARP怎么处理?靠路由...

        温州皮鞋,下雨进水不会胖!奥康,意尔康,红蜻蜓,日泰,吉尔达,惠特,蜘蛛王,康奈,报喜鸟,这些温州皮鞋牌子,你们都懂吗?你们穿过吗?会穿吗?


补充:
在M1上,如果你如下敲入配置:
ip route add 20.2.2.2/32 via 4.4.4.4 dev eth0
将会怎样?很显然,会提示网络不可达。如何解决?首先你要知道为何网络不可达?很显然系统不知道4.4.4.4在哪里,而你既然想让4.4.4.4成为到达20.2.2.2的下一跳,那它一定在M1的链路上,那么好办,配一条到达4.4.4.4的link路由即可:
ip route add 4.4.4.4/32 dev eth0 scope link
接下来,继续配置ip route add 20.2.2.2/32 via 4.4.4.4 dev eth0,你将看到自己的微笑。
        想互通,路由是根本!

--------------------
7年前的《关于IP网段间互访的问题—路由是根本》有个评论,问了个问题:
arp不是直接调用链路层吗?对M1来说,就算不设置到M2的路由,也应该回答M2发出来的arp解析请求啊。但通过抓包看到M1的确没有回答,这是为什么呢?
直到几天前我才看到并给了回答,估计问问题的不会再看到了,所以我把我的回答贴出来:
将M1收到M2的arp请求的那个网卡的rp_filter配置成0就可以回复M2的arp请求了。

展开阅读全文

150讲轻松搞定Python网络爬虫

05-16
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。   从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值