IP 的地理位置是怎么回事
回顾笔记的时候看到了这篇文章45 周岁、IPIP 的七年之痒与最坏打算,想起了 关于 IP 地理位置的一些知识,看起来很简单的一个功能,竟然能成就一个公司,所以还值得聊聊。
QQ 的珊瑚虫版本
大概在20年前,那个时候QQ还是现在微信的江湖地位,拥有一个QQ号都是一件值得骄傲的事情,因为这意味这你联网了。QQ号是否靓眼体现在QQ号是几位上,比如是7位,6位还是5位,记得那个时候申请的QQ号多数都是9位了,所以位数意味着你的号很老也很值钱。我现在还有一个8位的QQ靓号,大概就是那个时候一个同学给的。
除了QQ号外,上网聊QQ就想知道对方在哪里,而这一般很难,即使对方告诉了你,你也不一定确认这就是对的,因为那个时候流行一句话:你不知道电脑的那一端是人还是一只狗。所以珊瑚虫版本的QQ可以显示对方的IP地址就很准确的拿捏了这一点,很多人因为这个而安装了这个版本。需要说明的是QQ珊瑚虫版并不是QQ官方推出的,为此腾讯还起诉了QQ珊瑚虫版本的开发作者,具体事件介绍可以看这里。
whois 查询
whois 是用来查询域名的 IP 地址及其所有者的网络协议,根据 INNA 的分配,TCP/UDP 端口号 43 作为 whois 查询使用,具体可以参考 RFC3912。现在 whois 也泛指通过域名或者 ip 查到的所有相关注册信息。
whois.ipcn.org
whois.ipcn.org是这些年一直用的一个whois查询,具体说是查一下访问该页面所使用的IP地址以及其网络提供商信息,虽然慢了一些但是一直都是可用的,目前还没有找到其他类似的免费服务。其他的网站不是域名太长输入太麻烦,就是广告太多导致加载速度很慢,还有需要登录才可以使用的。(就在写这些文字的时候,为了验证一下whois.ipcn.org又用了一下,竟然连不上了,这不禁夸啊)
whois 和 DNS 的关系
dns 和 whois 功能上有些类似,但其实有很大的不同。dns 是一种互联网基础服务,提供从域名到 IP 地址映射的查询,为后续的网络连接提供网络层信息,毕竟网络数据包几乎都是需要 IP 地址的,dns 查询可以是直接的也可以是递归的,根据命中结果不同查询的流程也不同。whois 只是提供一种域名注册信息的查询,且大部分不直接提供 IP 地址映射结果,而是提供 dns 服务器地址。
IP 地理位置是怎么回事
说了那么多,IP 地理位置到底是怎么回事。在介绍计算机网络的各种书籍和文章中,总是把 IP 地址比喻成门牌号,这里其实不太准确,因为理论上 IP 地址只是一个标识,并没有地理位置信息,理论上你可以使用的 IP 地址,其他任何人也可以使用,并没有人限制你,但实际上并不能这么做,又是怎么回事呢?
这就涉及到整个互联网的基础设计了。因为在 IP 地址最开始出现的时候被设计为 32 位,并且被分为 4 个部分每个 8 位即 1 个字节。那个时候互联网上的设备并没有这么多,所以根据首字节的不同被分为了不同段,这么做的好处是按网络需求的大小分配不同的段,可以大大节省路由转发设备的路由表大小,降低对于网络设备的要求。随着网络规模的逐渐增大,人能通过 CIDR,NAT 等多种方式优化 IP 地址的使用,所以 IPv4 枯竭讨论了这么多年,IPv6 也没有完全取代 IPv4,而是有很长的路要走。
IPv4 地址按照段分配的方式,还简化了终端及其连接的网关设备的实现,比如对于一个子网 192.168.100.0/24-192.168.100.255/24,只需要一个网关就可以转发所有其他终端设备网络报文。所以在 IP 地址段被分配之后,这个 IP 地址段就被划定为在一定范围内使用了,所以有了地理位置的含义。事情看似到此为止,但也还不完全是,试想一个网络运营商申请了很多 IP 地址段,那么他把哪个网段用在哪里其实还不是确定的,因为他可能在很多省市,甚至地区和国家都有互联网业务,那么如何确定 IP 地址的具体位置呢,也就涉及到很细节的网络技术,比如路由的宣告,IP 网段的分配,动态的网络变化监控等等, 这其实也是 ipip.net 这类服务提供商要具体做的事情,在其官网描述其技术优势的原话是:
基于各电信运营商以及网络服务的 BGP/ASN 数据而分析处理而得来的 IP 库
BGP是什么,ASN是什么,具有一定网络协议领域开发经验的人应该有所了解,这些也是当今互联网的基础设施。
ipip.net
国内的很多网站近几年都支持查看用户IP地址所在地的功能,可以具体到省市一级,主流的微博,知乎,微信公众号等社区都支持了这个功能,这也给基于IP地址的位置查询提供了一些发展机会。国内的ipip.net在这里领域比较专业,他们还提供了免费查询自己IP地址的一个服务,具体看这里MyIp, 这对于一些通过NAT方式上网的用户,有时候还是有一些用处的,其实现在手机上网几乎都是NAT方式,不管是4G还是5G,家里的宽带上网或者WIFI,其实也是一样的。注意这里提供的是Linux下的使用方法,你也可以在Windows下安装curl(https://curl.se/windows/)后使用该功能,当然你还可以直接访问链接http://myip.ipip.net/查看结果信息 。
总的来说,通过IP地址查询具体的地理位置信息,并不像想象的那么简单,作为网络领域的工程师,还是得适当了解一些这方面的技术和应用的。