Linux下同一网段内的IP中两台主机通信不经过路由器(ARP)(转)
答案一:同一网段A与B通信,不需要路由器介入。
A直接广播ARP request 到广播域,B处于同一广播域,可以接收到ARP request,B用单播方式直接告诉A自己的MAC B 地址。A收到B的ARP reply,将 MAC B ----10.1.1.3 缓存在ARP Table,既然知道B的二层、三层地址,可以完成 Ethernet Frame 的封装,从接口发送出去,可以长驱直入到达B,B也以同样的原理发回返程的Ethernet Frame。
答案二:A使用自己物理接口的网络掩码255.255.255.0,与自己的IP 10.1.1.2 做 【按位与】操作,计算出自己网段地址为10.1.1.0,再用自己的掩码和 B的IP 10.1.1.3 做【按位与】操作,计算出B的网段地址为10.1.1.0,由于A与B的网段地址完全相同,可以认为是同一网段。
答案三:路由器可能看到A与B的通信,也可能看不到A与B的通信,这取决于他们之间是交换机、还是HUB互联。
1)A、B、路由器三者采用二层交换机互联,如图一所示:
<img data-rawwidth="677" data-rawheight="356" src="https://pic3.zhimg.com/50/0dc89a1bc237c10756b5ebbc0d91d658_hd.jpg" class="origin_image zh-lightbox-thumb" width="677" data-original="https://pic3.zhimg.com/0dc89a1bc237c10756b5ebbc0d91d658_r.jpg">

A 的ARP request 到达 switch,switch 学习到A的 MAC A,并将A连接交换机的Port Number 和 MAC A 映射起来,我们称之为MAC Address Table:
Port 2/2 ----- MAC A
当B的ARP Reply 到达switch,switch 也用类似的方法将B的 Port Number 和MAC B 映射起来,看起来如下图
Port 2/3 ----- MAC B
当A发给B的 Ethernet Frame 到达switch,switch发现Frame 's Destination MAC = MAC B,查询一下MAC Address Table,找到这个表相:
Port 2/3 ----- MAC B
于是就从 Port 2/3 发送出去,Port2/3 是直连B的,所以只有B才可以收到此 Frame,路由器无法收到。
2)A、B、路由器三者采用HUB互联,如图二所示:

A 与B之间的所有通信,包括ARP、A与B之间Frame 都被HUB以广播方式,发给广播域里每一个主机或路由器,所以路由器可以看到A与B的通信,路由器所要做的工作很简单,默默地丢( silently discard)。
3)A、B、路由器三者采用具有三层功能的switch互联,如图三所示:

switch 采用 SVI ( Software Virtual Interface ) 10.1.1.1 做A、B的缺省网关。这种和图一类似,三层switch 的SVI 接口不能接收到A与B之间的用户数据流量。
VLAN知识:
VLAN,Virtual Local Area Network, 虚拟局域网。如果没有VLAN,二层交换机所有的端口都在一个广播域,网络里通过二层互联的交换机全部处于一个广播域;假设switch 有48 个端口,有100台switch,那将有4800个端口,如果都连上主机,意味着有4800 host 处于同一个广播域,任何一个host 发广播消息,如 ARP 请求,4800 host都会接收,只有一个host 会发 ARP reply,其它都会被丢弃。造成的后果就是网络很嘈杂,网络充斥着广播消息,不仅浪费带宽,还浪费host CPU 资源。
另外大家处在一个二层域,不利于安全控制;比如公司有很多部门,有HR,财务,研发等部门,财务部门不希望和其他部门处于一个广播域,想有自己独立的广播域,如果用独立的switch 只给财务部门用,用路由器把这个switch隔离起来也可以,但不够灵活。财务部门可能工作在多个楼层,每个楼层财务人员可能只有几个人,不能充分利用48口交换机端口。
于是就有了VLAN这个利器,可以在一台交换机上划分多个VLAN,每个VLAN是一个独立的广播域,只有属于这个VLAN的交换机端口才可以收到属于这个VLAN的广播。比如HR VLAN,Finance VLAN,DEV VLAN,Finance 员工被分到Finance VLAN,于是Finance部门就不会收到 其它两个VLAN的广播。
配置了VLAN的switch,通常会动态生成一个SVI接口,Software Virtual Interface,这是一个软件虚拟接口,你可以把它看做位于switch 上的一个 host,它有自己的三层IP,也有自己的MAC,也有自己的端口号(内部端口号),SVI 既然属于VLAN这个广播域,可以收到ARP,可以做这个VLAN的缺省网关。
家庭网关,俗称无线路由器,它的WAN口通常用来PPPoE 拨号,运营商可以动态分配一个公网IP,绑定在此WAN口;通常还有4个LAN口,这4个LAN就是一个小 switch,同样也有一个SVI接口,SVI接口的IP就是无线路由器的缺省网关,比如 192.168.1.1 或10.1.1.1 , 同样SVI也有自己的MAC地址。
家庭网关还有DHCP 功能,可以给电脑或手机动态分配IP地址 + 缺省网关 + DNS server,再次提醒,缺省网关就是SVI的IP地址。
家庭网关 还具有NAT功能,私网和公网的转换,具体含义可以参考我别的文章,不再阐述。
家庭网关,还具有无线AP功能,可以验证用户,绑定用户,分配IP地址,加密/解密 用户数据流量。
普通的无线路由器没有VLAN的设置,如果想弄,cisco 无线路由器应该有这些功能,可以分 Man VLAN , Woman VLAN ,这样男人打游戏,女人看视频,互不干扰。
参考:
https://www.zhihu.com/question/41496681(以上内容转自此篇文章)
Linux下同一网段内的IP中两台主机通信不经过路由器(ARP)(转)的更多相关文章
- 网络中两台主机的通信过程(TCP)
两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...
- Cisco Packet Tracer中两台电脑通信设置
Cisco Packet Tracer是网络初学者仿真模拟网络环境的必备工具.今天我们来模拟下两台电脑之间的通信. Cisco Packet Tracer版本6.2.0 一.添加设备 1.这里添加一个 ...
- Linux中两台主机配置互信关系
服务名:sshd 客户端配置文件:/etc/ssh/ssh_config 服务端配置文件:/etc/ssh/sshd_config sshd服务需要重启才会生效 service sshd restar ...
- php计算网段内所有IP,分配子网段
由于最近业务需要,写了个获取网段内所有IP的函数,以及分配可用子网段的函数 /** * 根据网段获取计算所有IP * @param string $segment 网段 '139.217.0.1/24 ...
- 【Linux学习笔记】用nc实现两台主机间的文件传输(不需要输密码)
通常,可以用scp完成两台主机间的文件传输任务,但在主机间未建立信任关系的情况下,scp每次都需要输入密码,用起来感觉不是很方便,之前这篇笔记介绍过不用输入密码执行脚本或传输文件的方法,但对于一些临时 ...
- stp域中两台switch互联接口出现两口均为root口 并且在现有stp区域中无法确定根桥设备位置;分析其原因并赋予解决办法
stp域中两台switch互联接口出现两口均为root口 并且在现有stp区域中无法确定根桥设备位置:分析其原因并赋予解决办法 1.于上图描述了案例中当前组网环境的各交换机位置与stp状态情况 : ...
- linux 查看网段内所有IP
如有转载,不胜荣幸.http://www.cnblogs.com/aaron-agu/ 方法一: nmap –nsP 192.168.1.0/24 #从192.168.1.0到192.168.1.25 ...
- Backbox Linux简介与配置内网IP
总体说起来,Backbox内置的工具什么的,并不是很多,但是它集成了一些用起来很棒的工具. 比如:Beef.Sqlmap.wpscan.zenmap.msf.w3af.dns嗅探等一系列工具,传说中的 ...
- Linux两台主机之间建立信任(ssh免密码)
背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系. 在整理之前,我先说下ssh免密码的要点 : 你想免密 ...
随机推荐
- IE6-IE9不支持table.innerHTML的解决方法--终极解决办法
一.把要转译的内容放到其他属性中,例如“tt” <p class="feedback_answer_content" tt='${feedInfo.feedback_answ ...
- 当while read line 遇到 ssh
问题:while read line 中使用ssh只能读取一行? #!/bin/sh while read line do echo $line ssh root@$line "echo 1 ...
- Go语言入门之指针的使用
指针的使用: package main import "fmt" func zhi(){ a:= var b *int=&a //声明指针并赋值 *b=3 //改变内存地址 ...
- cocos2dx 开发配置的一些环境变量(mac/linux)
通常开发需要配置一些环境变量,下面把我电脑的部分配置分析一下. 1.android开发配置,ndk,sdk,ant 2.cocos2dx开发配置,cocos2d-x export COCOS2DX_R ...
- Loadrunner中cookie解释与用法
loadrunner对于cookie的处理loadrunner中与cookie处理相关的常用函数如下: web_add_cookie():添加新的cookie或者修改已经存在的cookie web_r ...
- Linux内核编译安装
1. .config 复制一份当前系统编译时的配置,在/usr/src目录下 $ ls /usr/src/ linux-headers-4.10.0-35 linux-headers-4.8.0-36 ...
- jquery.autocomplete修改 实现键盘上下键 自动填充
根据需求要实现通过键盘上下移动,获得联想菜单中的值,如同google baidu的查询功能. 在网上找了很久没有找到可以实现该功能的插件,无奈只能自己动手改代码.找到js中的KEY.DOWN 和 KE ...
- phpstorm使用和配置技巧
1. 使用phpstorm的过程中,有时光标不小心变成了方块状,怎么修复回来呢? 见下图,去掉“Use block caret” 前面的对勾即可. 2.多项目并存的问题 PhpStorm或 WebSt ...
- scrapy抓取拉勾网职位信息(七)——数据存储(MongoDB,Mysql,本地CSV)
上一篇完成了随机UA和随机代理的设置,让爬虫能更稳定的运行,本篇将爬取好的数据进行存储,包括本地文件,关系型数据库(以Mysql为例),非关系型数据库(以MongoDB为例). 实际上我们在编写爬虫r ...
- crontab定时运行python脚本访问MySQL遇到问题
最近写了一个python脚本来定时备份MySQL数据库.具体实现如下: 1)python脚本中使用os.system("mysqldump -h127.0.0.1 -uroot -ppass ...