网络界流行一种说法:不同网段主机不能直接通信。今天我们就来让两台不同网段的主机直连能够通信,并做详细详细解释。

这里插讲一个技术:免费ARP——Gratuitous ARP。翻译也许不准确。
Gratuitous ARP包含的重要信息:
sender MAC:发送者的MAC地址;
sender IP:发送者的IP地址;
target MAC:00:00:00:00:00:00;
target Ip:发送者的IP地址;
Gratuitous主要有两个作用:
          一是主动通告自己的MAC地址。一般用于热备份系统中,比如冗余网关,当主设备发生故障,备用设备立即接管主设备,并向广播域发送Gratuitous ARP,通知所有主机网关IP对应的MAC为备份设备的MAC,这样网络中其他设备就会把流量转向备份设备。
         二是用于IP冲突检测。当一个主机A的网络接口刚UP的时候,会发送Gratuitous ARP。ARP target IP字段为自己的IP,target MAC字段全0,如果该网段中有其他主机B的IP与之相同,主机B会用自己的MAC填充单播应答ARP sender MAC字段,然后将该ARP单播应答发往主机A。主机A接收任何一个ARP的单播应答则认为产生了IP冲突。值得注意的是:当网络中其他主机收到主机A发出的Gratuitous ARP后,并不会把该ARP中包含的sender ip与sender mac加入本地ARP缓存。
         注意:主机不会将Gratuitous ARP中的sender MAC和sender IP加入本地ARP缓存。
 

下面开始试验。
============================================================================================================
试验一:
PC1的配置:
IP:192.168.1.200
mask:255.255.255.0
getway:不配
PC2的配置:
IP:1.1.1.1
mask:255.255.255.0
getway:不配
当PC2刚启动的时候会发送3个Gratuitous ARP广播包来检测是否存在IP冲突。PC1收到PC2的ARP广播,但并不将PC1的主机IP和MAC加进自己ARP缓存中。
我们在PC2上ping PC1的IP(ping 192.168.1.200)。
PC2首先将目标IP 192.168.1.200与自己路由表比对,在本地路由表中找不到相关路由,原因是没有配置网关,从而没有默认路由。PC2直接将该ICMP包丢弃。
============================================================================================================
试验二:
PC1的配置:
IP:192.168.1.200
mask:255.255.255.0
getway:不配
PC2的配置:
IP:1.1.1.1
mask:255.255.255.0
getway:192.168.1.200 //注意:与实验一不同的地方。
当PC2刚启动的时候会发送3个Gratuitous ARP广播包来检测是否存在IP冲突。PC1收到PC2的ARP广播,但并不将PC2的主机IP和MAC加进自己ARP缓存中。
我们在PC2上ping PC1的IP(ping 192.168.1.200)。
PC2首先将目标IP 192.168.1.200与自己路由表比对,在本地路由表中找了到一条默认路由:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.1.200          1.1.1.1     10
该路由条目的下一条(网关)为192.168.1.200,于是PC2查看本机ARP表缓存是否存在网关的ARP条目,但并没有找到相应网关条目,所以PC2发出寻找网关的的ARP广播。PC1收到该ARP广播查询包,于是PC1向PC2发送ARP应答的单播包,这个应答包中的sender mac就是PC1的MAC地址。PC2收到PC1的应答包后,提取sender ip和sender mac值,加入本地ARP缓存。这样PC2就知道了网关MAC地址。(注意我们要到达的目标IP为192.168.1.200,网关IP也为192.168.1.200。但我尽量用“网关”这个词语,就是要请大家留意PC2发送ARP包的目的不是寻找PING包的目的地址,而是寻找网关地址。这里查找网关的步骤属于OSI 2层通信。)
于是PC2在PING包,即ICMP包数据段的前部加上IP报头,IP报头的Distination IP:192.168.1.200,source ip:1.1.1.1,再在IP报头前部封装以太网帧头,Distination mac:网关192.168.1.200的MAC(从ARP缓存中提取),sorce mac为PC2 1.1.1.1接口MAC。于是PC2拿到这封装好了的ICMP包,交给1.1.1.1接口,就这样,PC2将ICMP包顺利传递到了网关。(注意本步骤同样用“网关”这个词。该过程属OSI 3层通信)。
PC1收到该ICMP包,提取IP报头的Distination ip 192.168.1.200与自己IP比对,发现刚好匹配。PC1认为该ICMP是给自己的。于是PC1就准备给PC2一个ICMP应答。
PC1再次分析ICMP包,从IP报头的source ip字段提取出1.1.1.1,再从以太网帧头中提取sender mac:PC2的MAC,将PC2的IP和PC2的MAC加进自己ARP缓存中。
PC1拿1.1.1.1与自己路由表比对,找不到相应路由(原因在于PC1没有配置网关)。最后PC1将放弃对PC2进行ICMP应答。
============================================================================================================
试验三:
PC1的配置:
IP:192.168.1.200
mask:255.255.255.0
getway:1.1.1.1  //注意:与实验二不同的地方。
PC2的配置:
IP:1.1.1.1
mask:255.255.255.0
getway:192.168.1.200
当PC2刚启动的时候会发送3个Gratuitous ARP广播包来检测是否存在IP冲突。PC1收到PC2的ARP广播,但并不将PC2的主机IP和MAC加进自己ARP缓存中。
我们在PC2上ping PC1的IP(ping 192.168.1.200)。
PC2首先将目标IP 192.168.1.200与自己路由表比对,在本地路由表中找了到一条默认路由:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.1.200          1.1.1.1     10
该路由条目的下一条(网关)为192.168.1.200,于是PC2查看本机ARP表缓存是否存在网关的ARP条目,但并没有找到相应网关条目,所有PC2发出寻找网关的的ARP广播。PC1收到该ARP广播查询包,于是PC1向PC2发送ARP应答的单播包,这个应答包中的sender mac就是PC1的MAC地址。PC2收到PC1的应答包后,提取sender ip和sender mac值,加入本地ARP缓存。这样PC2就知道了网关MAC地址。(注意我们要到达的目标IP为192.168.1.200,网关IP也为192.168.1.200。但我尽量用“网关”这个词语,就是要请大家留意PC2发送ARP包的目的不是寻找PING包的目的地址,而是寻找网关地址。这里查找网关的步骤属于OSI 2层通信。)
于是PC2在PING包,即ICMP包数据段前部加上IP报头,IP报头的Distination IP:192.168.1.200,source ip:1.1.1.1(路由条目的interface字段提取),再在IP报头前部封装以太网帧头,Distination mac:网关192.168.1.200的MAC(从ARP缓存中提取),sorce mac为路由条目的interface字段提取的1.1.1.1接口MAC。于是PC2拿到这封装好了的ICMP包,交给路由条目中interface字段指定的接口1.1.1.1,就这样,PC2将ICMP包顺利传递到了网关。(注意本步骤我同样用“网关”这个词。该过程属OSI 3层通信)。
PC1收到该ICMP包,从IP报头的source ip字段提取出1.1.1.1,再从以太网帧头中提取sender mac:PC2的MAC,将PC2的IP和PC2的MAC加进自己ARP缓存中。
PC1再次分析ICMP包,提取IP报头的Distination ip 192.168.1.200与自己IP比对,发现刚好匹配。PC1认为该ICMP请求包是给自己的。于是PC1就准备给PC2一个ICMP应答。(上诉步骤与实验二步骤相同)
于是PC1在ICMP应答包的数据段前部加上IP报头,IP报头的Distination IP:从PC2 ICMP请求包IP报头source ip字段提取;
PC1将从PC2 ICMP请求包IP报头source ip字段提取到的1.1.1.1与自己路由表比对,找到一条默认路由:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0          1.1.1.1   192.168.1.200       20
该路由下一条(网关)为1.1.1.1。于是PC1查看本机ARP缓存是否存在网关的ARP条目。
Interface: 192.168.1.200 --- 0x30003
  Internet Address      Physical Address      Type
  1.1.1.1               00-0c-29-c3-0d-92     dynamic
在ARP缓存中找到了相应条目。于是PC1提取(网关)对应的MAC作为ICMP应答包以太网帧帧头的Distination mac。再从路由条目interface字段192.168.1.200对应自己网卡的mac作为ICMP应答包帧头的source mac。于是PC1拿这个封装好的ICMP应答包,交给路由条目中interface字段指定的接口192.168.1.1。就这样PC1将ICMP应答包顺利传递到了网关。(注意用词也是“网关”。该过程也属于OSI 3层通信)。
PC2收到ICMP应答包,提取IP报头的Distination ip 1.1.1.1与自己IP比对,发现刚好匹配。
到此一次完整的PING过程就完成,PC1 ping PC2 成功!。
================重要结论:两台不同网段的主机直连能够通信。=================================

下面简要总结实验一、实验二部能通信得原因:
实验一:
两主机都没网关:PC2找不到目标IP路由——双向不通。
实验二:
PC1没有网管,PC2有网关:PC2将数据包成功发往PC1,但PC找不到到达PC2的路由——单通。
实验三:
两主机网关为对端主机IP:——双向互通。
====================================================================================
        在CISCO环境中,比如用CISCO路由器通过配置no ip routing来模拟PC直连,配置不同网段IP后,发现能通信的现象我还不知道怎么解释,也许CISCO有它自己的检测机制。
        有网友提出是设备刚启动后发送的Gratuitous ARP所致,但本文已经阐明主机不会将Gratuitous ARP中的sender MAC和sender IP加入本地ARP缓存。再者,设备通信第一步检查的是路由表,而不是ARP缓存。所以我认为Gratuitous ARP所致的原因是不合理的。希望有朋友能提出拟独到的见解,共同探讨。

转载于:https://blog.51cto.com/hanbing/534855

两不同网段主机直连通信过程的建立(3个实验详细分析)相关推荐

  1. h3c交换机怎么设置虚拟服务器,H3C交换机配置 | 如何实现两个网段主机与外部通信...

    一.配置方法步骤 1. Switch的配置 # 配置VLAN接口1的主IP地址和从IP地址. system-view [Switch] interface vlan-interface 1 [Swit ...

  2. 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理

    一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...

  3. 两台计算机直连通信过程,教大家两台电脑网线直连传输的技巧

    我们总有需要把一台电脑的资料传输到另一台电脑的时候,其实我们可以让两台电脑共享局域网,通过网线直连来达到传输的目的,下面来看看小编是怎么操作的吧. 1.设置电脑IP,首先打开下图界面,点击本地连接. ...

  4. 主机直连通信(扫盲贴)

    两台PC机网线直连通信,对于初学者来说可能会很疑惑为什么能通信,或者为什么不能通信:其实主要是对主机通信原理不了解:刚好前几天遇到个网线直连的问题,顺便就写个blog,属于扫盲帖,老司机可以直接跳过. ...

  5. eNSP:实现不同网段主机之间的通信(直连路由)

    直连路由,顾名思义,就是两台主机直接和路由器相连.我们要实现PC1和PC2之间的通信,具体配置步骤如下: interface GigabitEthernet 0/0/1 #在路由器R1中我们进入0/0 ...

  6. 计算机网络两台主机互相通信过程概览

    两台主机互通过程: 地面:物理层信息 路 :数据链路层 使物理层更好的传输 车 :网络层 实现异构网络的互联 货物:传输层 实现不同主机的进程之间的通讯(TCP) 楼:应用层 为应用进程提供服务 TC ...

  7. 同网段不同网段主机间通信原理

       在当今的以太网络通信中,在IP数据包中有两个必不可少的地址,那就是IP地址和网卡地址(即MAC地址),在数据包中,无论是IP地址还是MAC地址,都有源地址和目标地址,因为通信是双方的,所以就必须 ...

  8. 同网段及跨网段主机间通信原理

    在当今的以太网络通信中,在 IP 数据包中有两个必不可少的地址,那就是 IP 地址和网卡地址(即 MAC 地址),在数据包中,无论是 IP 地址还是 MAC 地址,都有源地址和目标地址,因为通信是双方 ...

  9. 5000字加21图文 | 抓包带你体验同网段的通信过程,这些细节很关键

    作者:一天,公众号:网络之路博客(ID:NetworkBlog).让你的网络之路不在孤单,一起学习,一起成长. 填坑的开始 在第二篇的时候以及第五篇都提到过,在通信过程中,A发送数据包给B,三层需要封 ...

最新文章

  1. linux系统版本间的区别是什么?内核又是什么
  2. Servlet / Tomcat / Spring 之间的关系
  3. pcl 平面分割 RANSAC
  4. 买股票的最佳时机(六种题解dp)
  5. header python 环境信息_Python开发必备:如何建立一个完美的项目工程环境
  6. ubuntu检查端口是否开启_Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息...
  7. ansible自动化部署
  8. TensorFlow(九)eval函数
  9. jq select操作全集
  10. Codevs2157 配对
  11. 基于HtmlParser的网络爬虫
  12. linux下使用odbc连接mysql_Linux环境下通过ODBC访问MSSql Server
  13. centos 7 firefox启用java_一文详解各种花里胡哨的Java调试技巧,多图预警,记得收藏...
  14. Android 消息处理源代码分析(1)
  15. 顺丰正式杀入外卖领域;中国移动推出 5G 消息 App;GCC 10.1 发布 | 极客头条
  16. ubuntu16.04+opencv3.1配置
  17. android多指触控失效,安卓--多指触控
  18. centos ssh免密登录 多台互相免密登录
  19. 行人重识别通用数据集及介绍
  20. 爱思助手安卓能用吗_专业的苹果越狱工具:爱思助手!

热门文章

  1. java怎么解决重复支付问题_支付系统设计中,如何防止重复支付?
  2. python中的gui界面编程_python应用系列教程——python的GUI界面编程Tkinter全解
  3. vue子组件调用父组件内的方法
  4. Effective C++ -- 零散知识点整理
  5. vs配置不依赖其他包路径
  6. 【Linux】41. grep结合awk -F 获取文件中的关键内容
  7. 机器学习系列(1)_逻辑回归初步
  8. Cookie、Session、Token那点事儿
  9. 基于 Java NIO 实现简单的 HTTP 服务器
  10. Java动态编程初探——Javassist