Linux跨网段通信小实验
一、实验场景。
实验准备,Linux主机4台。分别是主机A,路由主机R1,路由主机R2,主机 C,主机A的ip是192.168.56.66/24,且只有一块网卡eth0;路由主机R1有两块网卡eth0和主机A在同一网段其ip地址是192.168.56.100/24,eth1的ip地址是172.16.56.223/16;主机R2有两块网卡eth0和主机C在同一网段其地址为10.0.0.25/8,eth1同R1在同一网段其地址为,172.16.56.200/16,主机C只有一块网卡eth0其地址为10.0.0.18/8
实验目的,实现主机A和主机C互相通信。模拟Linux主机通信原理,深入了解通信过程。

以上就是本次实验的拓扑图(图画的有点丑,看得懂就行,哈哈哈)
接下来开始试验。
1,从上面的拓扑图我们可以看出有3个网络,为了不让其他网络影响本次实验,我们在vmware里面增加3条虚拟网络

添加好虚拟网络后,现在准备4台主机,并配置好其相应的ip




说明:配置ip这里都是centos的系统,编辑其相应的文件/etc/sysconfig/network-scripts/ifcfg-eth0 或者eth1 ,然后重启网络服务就可以了。
2.开启r1,r2的转发,以及配置器路由

说明:因为A主机和R1在同一个网段,我们这里就不需要再配置到A主机的路由,只需要配置主机R1到C的路由,并指向R2为网关,也就是说要访问主机C 就必须通过R1的路由告诉报文要去找R2。开启R1的转发是因为,当报文到达R1的时候,它会检查数据报文是否是自己的,如果不是它默认会丢弃的,开启转发就表示不是本机的数据报文,它将转发到其他主机。这样配置后从A的报文理论上可以到达R2,如果打开R2的转发,报文将会到达C,但是从C回来的报文走到R2的时候,因为R2里面没有配置到A的路由,所以回来的报文还不能够到达A,接下来配置R2的路由。

说明:配置R2的路由的作用是当访问C主机的时候,C主机回应回来的报文,在经过R2是会查看R2的路由,这样从C回来的报文才能够顺利到达A
3,验证从ApingC

从CpingA

4,扩展
1.查看到达目标网络所经过的路由

说明:可以得之到达10.0.0.18 从本机经过了2个路由才到达。
2,删除同网段的路由是否能够通讯?

说明:这里要把默认路由也要删除,因为删除同网段的路由后,它默认会走默认路由,这样就可以看出删除了同网段的路由后,本机上不能和本网段的其他主机通信。
3,在r1上配置一个不是同网段的地址,主机A是否能够与之通讯?


说明:是可以通讯的,因为在Linux里ip是属于主机,不是属于某块网卡,只要主机A有到达主机R1的路由,就可以和R1上的所有ip通讯。这里主机A是走的默认路由
4,将R1的转发关了,数据报文还能到达C吗?


说明:是不可以的,因为当主机R1收到来自A主机的报文时,它会检查是不是它的,如果不是,它将会丢弃,不予回应,这里我们可以在R1上抓包就明白了

说明:可以看出在R1上是收到了A主机的发往C的报文,但是R1并没有给出回应。

说明:当我们打开R1的转发时,就可以看到从C回应A的数据报文,当然A主机上也会收到相应的回应报文。
5,在C上抓包看源ip和目标ip,源MAC和目标MAC的变化

说明:源ip是主机A的地址,目标ip是主机C的地址
主机A的MAC

主机C的MAC

主机R2的MAC

说明:通过上面的抓包,我们可以知道源ip和目标ip在以太网帧结构中是不会变化的,因为ip是在以太网上层internel协议的内容,但是源mac会变的。这是因为mac地址是Ethernet协议的内容,也可以得出在数据链路层通讯以太网协议是通过ARP mac地址通信的,在到达C主机的报文源MAC都是R2的MAC地址,也就是说在通讯的时候,以太网帧的结构中,源ip和目标ip是不会变化的,源mac会记录上一个发送数据报文的设备的MAC。
从上面的实验我们可以看出从A到C我们经过了两个路由;一个主机想要和另一个主机通讯,在通讯前主机会先查看自己的路由表,如果本机没有到达目标主机的路由时,本机的数据报文是不能发送到目标主机的;要让一个主机转发另一个主机的报文时,我们必须开启转发才行,否则不予转发;路由配置所指定的网关必须是本机能够到达的地址(也就是本机路由表有到达网关的路由),否则配置的路由无意义。同一网段的主机通讯,也必须配置路由,当然这个路由一般我们不用管,因为配置了其ip后,路由表就会默认生成相应的路由信息。如果没有路由,同一网段的主机也是无法通信的;在Linux里ip地址是属于主机不属于某一个网卡,所以只要有能够到达主机的地址,我们也可以将报文送到主机的另外一个地址。
Linux跨网段通信小实验的更多相关文章
- linux模拟实现主机跨路由通信
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...
- ARP跨网段广播
如果源主机和目的主机不在同一网段,ARP请求的广播帧无法穿过路由器,源主机如何与目标主机实现通信? 补充一下问题,避免因问题不完整而出现误解. ---------------------------- ...
- Linux 双网卡双网段通信
/********************************************************************************* * Linux 双网卡双网段通信 ...
- kafka集群跨双网段及多网段通信问题解决
一.问题场景: 实际生产环境总存在很多kafka集群跨网段的问题.kafka集群可能存在多个网卡,对应多个网段.不同网段之间需要同时与集群通信,即跨网段生产消费问题. 二.解决方法:自定义listen ...
- Linux学习-LVS跨网段DR模型和FWM多服务绑定
一.实验环境 系统:CentOS7.6 主机:5台 (虚拟机) 客户端1台:172.16.236.134/24 (NAT网卡),网关指向 172.16.236.185/24(路由服务器) 路由服务器1 ...
- linux 单机跨进程通信
一般来说通过网络通信(比如tcp,udp)或者共享内存的方式肯定可以实现跨进程通信,但现在这里要说的是比较偏但实用的几个方法:利用unix域通信(普通网络连接),利用unix域通信(socketpai ...
- elasticsearch 跨网段组集群
elasticsearch 是非常流行的全文搜索引擎,但网上的教程多是初次使用,并没有一些高级用法demo.这次遇到需要跨网段组网问题,自己摸索了文档很久,发现确实可行,于是着手做了个实验,最终实验成 ...
- linux同步与通信
这几天读完了UNP v2,对进程间通信与同步的方式有所了解,现对主要的知识点总结如下: 根据出现的历史,先有的管道,FIFO,信号,然后是systemV IPC,再是后来的Poxis IPC,syst ...
随机推荐
- python selenium句柄操作
一.获取当前窗口句柄 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别. 2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换.但是脚本没长眼 ...
- PHP array_splice
1.函数的作用:数组中元素的删除和替代 2.函数的参数: @params array &$array @params int $offset @params int $l ...
- EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理
原文:What Is EXC_BAD_ACCESS and How to Debug It 有时候,你会遇到由EXC_BAD_ACCESS造成的崩溃. 这篇文章会告诉你什么是EXC_BAD_ACCES ...
- 关于while和do while 的个人理解
先上代码 int x=425; System.out.println("循环开始,我的初始值为:x="+x); //425 do { System.out.println(&quo ...
- 百万年薪python之路 -- 软件的开发规范
一. 软件的开发规范 什么是开发规范?为什么要有开发规范呢? 你现在包括之前写的一些程序,所谓的'项目',都是在一个py文件下完成的,代码量撑死也就几百行,你认为没问题,挺好.但是真正的后端开发的项目 ...
- Intellij idea 一个窗口打开多模块并添加依赖
打开多模块 ctrl+alt+shift+s 或者file->project sturcture 选择modules 添加 选择要添加的模块 选择从现有模块添加,不要选择从现在代码创建模块 添加 ...
- justjavac(迷渡)知乎live--<<前端工程师的入门与进阶>>听讲总结
知乎听讲总结 知乎live----jjc<前端工程师的入门进阶> git地址 内容 前端的基础知识,计算机专业基础知识感觉还行.前端后台都有做过,现在觉得自己要深入.但是只看框架源码和自己 ...
- unity 序列帧播放
[SerializeField] private Image m_ScreenImage; //序列帧播放的image [SerializeField] ; // 一秒播放的帧数 [Serialize ...
- vue-cli 如何使用vue-awesome?
font-awesome 有很多图标字体可供使用,那么,如何在vue中使用呢? 进入重点... 1.安装vue-awesome npm insatll vue-awesome 2.在main.js 注 ...
- SpringBoot接管SpringMvc
SpringBoot接管SpringMvc Spring Web MVC framework(通常简称为“Spring MVC”)是一个丰富的“model 视图控制器”web framework. S ...