这两天查了一下,这个叫做“网络拓扑发现”;
但是看了一下是通过 SNMP 协议下的网络拓扑发现,我想问问如果对于陌生的互联网, SNMP 能实现吗?
是不是得通过 Ping 或者 Traceroute 测试才可以? 如果运营商禁止 ICMP 的话呢?
1
gamexg 2016-02-20 17:48:57 +08:00 1
|
2
anonymoustian OP @gamexg 能再详细点吗
|
3
lhbc 2016-02-20 18:36:06 +08:00 via Android 1
看高春辉写的几篇文章
|
4
redsonic 2016-02-20 19:25:47 +08:00 1
实际上是不可能知道的。就算是 bgp 也只是以 AS 为最小粒度,还是太粗了, ebgp 发出的大部分都是汇聚路由。
icmp 探测是不靠谱的, bgp 靠谱(不然就压根不通)但很粗略。事实上别说全网,就是国内的一个 ISP 的路由或拓扑信息也很难内部找个人说的清。 |
5
wdlth 2016-02-20 19:39:53 +08:00 1
网络路由就像地图导航,只能覆盖到一定规模,能查询道路怎么走,但是看不到的地方就不容易了解了。
举个极端点的例子,像 8.8.8.8 那种 AnyCast 的,全网的路由走到 Google 网络后就看不到 Google 内部拓扑了。 |
6
TrustyWolf 2016-02-20 21:04:20 +08:00 1
首先提醒一下楼主,路由和网络拓扑是完全不同的概念。
公网路由器,特别是大型运营商的边界路由器,都会存有全网的路由。 这些路由是可以查看的,比如 University of Oregon 的 Route Views Project 。 没记错的话目前公网上全部的 IPv4 路由条目大概在 50W-100W 条之间。 然而,除了自身 AS 内部的路由,来自其他网络的路由基本都是汇总路由。 路由的汇总可能是自动的,也可能是手工指定的。 华为和思科等网络设备厂商的认证考试中这些内容都有涉及。 也就是说,其他网络中具体的网络拓扑边界路由器是不可能全部知道的。 设想一下如果全部知道,需要多大的存储空间! 那么,在企业内部中的管理中,如果不知道网络的拓扑,管理会很不方便。 思科使用 Cisco Discovery Protocol (CDP)协议来获取网络拓扑信息。 CDP 协议就是基于 SNMP 的,但只能在思科设备之间使用。 另外,处于安全考虑, ICMP 的回包功能也是可以手动关闭的。 这样你就会发现 trace 中的某些节点显示的是点.点.点... 特别是在 MPLS 网络中,运营商内部故意隐藏拓扑的做法很常见。 So ,结论是,不可能知道全网的拓扑信息。 |
7
jasontse 2016-02-20 21:14:35 +08:00 via iPad 1
@TrustyWolf
没那么夸张,目前全网 IPv4 路由条目 58 万。 |
8
izoabr 2016-02-21 10:49:40 +08:00 via iPhone
也可以通过 snmp 去获取每个设备,每个接口的 arp 邻居信息,然后自己去算拓扑。
不过要求不能有断点,有断点就没法生成一张完整的拓扑,就会好几张拓扑,也可能会有孤立设备。 |
9
anonymoustian OP @izoabr 但是通过 SNMP 获取的设备,如果不是内部的呢? 比如说我要去探测公网上的其他路由器的邻居信息?
|
10
izoabr 2016-02-21 16:48:46 +08:00
@anonymoustian 那没办法,设备你没有相应管理权的话,你看得信息不全面是正常的。
不然什么都透明了,对安全也是一个隐患。 |
11
julyclyde 2016-02-22 21:57:28 +08:00
看着像文科考了计算机专业研究生
|
12
esxivistawrt 2016-02-23 21:08:20 +08:00
|