局域网如何连通ip地址和网关ip不在同一个地址的主机

[toc]

问题描述

这神奇的问题源自大学同学老王遇到的一个客户机房组网方案:


级联路由器.jpg

可以看到井上的操作机(PC)的所用ip跟其配置的默认网关亦即路由器(172.16.16.1/16)不在同一个网段,该PC在可以上外网。
但把井下工控机(EPC)按照图上配置也接在该路由器以后,PC ping不通EPC了。

要搞清这个问题产生的原因,首先得搞清楚ping协议(ICMP)是在干什么,怎么干的。这就又牵扯到ARP协议和路由相关知识。


ARP协议

主要原理:

层二协议,当本机ARP表里查不到所需要寻址的ip对应的MAC地址时,会用ip层二广播包(层二目的地址填成全F)向网络发请求,等具有该ip的设备回复,回复包里会有该设备的MAC地址,如此便知道了哪个ip对应的是哪个MAC地址,该对应关系会被发送方和被请求方放入ARP缓存表。

相关机制:
ARP监听及处理:

每个设备都需要处理收到的ARP广播包,如果该包的目的ip是自己,则以对应的ARP响应包作回复,同时更新arp缓存表;否则直接丢弃。

ARP缓存表:

即ARP缓存(ARP Cache),基本每个以太网设备都会维护一张ARP表,用来存放IP地址和MAC地址的关联信息。该表通常是动态更新的,每一对学习到的映射关系都有一个老化时间,通常是20分钟。
通过配置,也可以让一些表项变成静态的。

其他特性:

ARP代理:服务器功能,可使ARP广播跨越子网
免费ARP:探测是否存在ip地址冲突

报文格式
ARP报文

ICMP协议

ICMP是一个网络层协议,它不像ARP包一样对于上层来说是自动进行的,而是需要在应用里手动把它发出去。
ICMP协议的功能

ICMP协议的功能主要有:
  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因
  3. 其他诊断查询
ping命令

功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
实现方式
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

traceroute命令

功能
traceroute也是基于ICMP协议实现的,可以打印出可执行程序主机,一直到目标主机之前经历多少路由器。
实现方式:待补充


路由

直连路由

路由器接口所连接的子网的路由方式称为直连路由。
具体说就是一个路由器上会有一到多个接口地址,对应不同的口不同的网段。路由器到每个接口地址以及对应子网的路由叫直连路由,不需要学习,开机就会有。

非直连路由
  • 静态路由:使用命令在路由器上配置的路由信息。
  • 动态路由:通过路由协议从别的路由器学到的路由信息。
路由表

家用路由器

家用路由器的lan口和wan口的区别主要是二层和三层接口的区别。lan口之间的关系是层二交换机接口,wan口是直接配得有IP的层三接口。

LAN-WAN级联

常规用法,相当于一个路由器接口之下连了几个交换机口。


家用路由器LAN-WAN级联
LAN-LAN级联

路由器当层二交换机使用,所有口都在同一局域网内。


家用路由器LAN-LAN级联

局域网包转发过程

1 若两者在同一网段,就会直接把包发向目标IP,这时要做:
1.1 查本地arp缓存,看看是否有IP和Mac的对应表.
1.1.1 有,直接向网络上发包,包中包括原mac及目标mac。
1.1.2 若没有,则向网络发arp广播,用来查找与目标IP对应的mac地址(ARP发送的是广播数据,电缆上的每个以太网接口都要接收广播的数据帧)。
1.1.2.1 如果查到了,则向网络发包。
1.1.2.2 没查到,则不通讯。
2 若两者不在同一网段,则把包发到网关上(前提是路由表里配了默认网关),然后网关继续1---2这一过程。


好了协议简单回顾一遍了,下面开始分析问题:

局域网内不同子网间为什么不能互相访问

先看一个比较常见的双子网局域网


双子网局域网

router虽然只画了一个,但从网关接口可以看出这是一个双网关组网。

  • 我们知道PC到网关之间配了默认路由之后,PC不知道该发到哪里的包都是一律发到网关的;每个网关也知道自己所在子网的下的每台PC接的是哪个口(通过网关ARP缓存),所以PC和网关之间的路由不存在问题。

  • pc0和pc1之间通不通的关键,主要看两个网关上的路由表怎么配的,互相之间的路由通不通。如果不通,一般加一条静态路由就好了。

  • 最常见的配置情况是两个网关中一个是光猫,有指向外网的路由;另一台网关将此外网网关作为自己的默认网关,这样两台网关下的pc就都能上外网。
    • 我遇到的情况是外网网关上没有针对B子网配什么路由,只是注意了一下子网范围不要冲突,B子网里的电脑就都能上网了。这可能是因为外网网关上有去B子网的路由,知道要去B子网得通过网关B。
    • 但是此时网关B上往往没有到A子网的路由

你可能感兴趣的:(局域网如何连通ip地址和网关ip不在同一个地址的主机)