通过ip地址访问网站
在浏览器地址栏里敲下一串数字,通过比如 220.181.38.148,地址回车,访问百度的网站首页就跳出来了。这串数字就是通过 IP 地址。它跟域名一样能带你到想去的地址地方,只是访问大多数人习惯了记名字,懒得记数字。网站
IP 地址的通过本质是网络设备的门牌号。IPv4 地址是地址 32 位二进制数,写成十进制就是访问四组 0 到 255 之间的数字,中间用点隔开。网站全球大约有 43 亿个 IPv4 地址,通过早就分完了。地址你家里的访问路由器、手机、电脑,连上网的时候都会拿到一个 IP,有的是运营商动态分配的,每次拨号可能都不一样。
直接拿 IP 访问网站,最直接的好处是绕开 DNS 解析。域名系统把 www.example.com 翻译成 IP 地址,这个过程通常几十毫秒,但偶尔会出问题。DNS 被污染、解析服务器宕机、本地缓存过期,都会导致域名打不开。这时候如果你知道目标网站的 IP,直接输进去,往往能通。
我遇到过好几次这种情况。有一回某个技术文档站点突然访问不了,ping 域名没反应,但之前记录过它的 IP,直接访问 IP 就正常打开了。原因后来查出来是 DNS 服务商那边出了故障。这种时候,IP 地址就是一条备用通道。
不过,直接用 IP 访问也有明显的坑。一个 IP 上可能跑了上百个网站,服务器靠 HTTP 请求头里的 Host 字段来区分你要访问哪一个。你用 IP 发请求,Host 头里填的就是那个 IP,服务器不知道你真正想要哪个站点,可能返回默认页面,也可能直接报错。很多虚拟主机就是这么干的。所以你会发现,拿 IP 访问某些网站,出来的页面完全不对,或者是一个空白页,甚至 404。
HTTPS 的情况更麻烦。SSL 证书是绑定域名的,你用 IP 访问,证书校验大概率过不去,浏览器会弹出一个红色警告页,告诉你连接不安全。有些站点配置了 IP 证书,但那属于少数。大部分情况下,强行用 IP 走 HTTPS,体验很差。
那什么时候适合直接用 IP?内网服务是最典型的场景。公司内部的 Git 服务器、测试环境、监控面板,经常就是一组 IP 加端口,没人会专门给它们配域名。还有 API 调试的时候,用 IP 能排除 DNS 干扰,快速判断问题出在网络层还是应用层。
另外,改 hosts 文件也是一种折中方案。把域名和 IP 的对应关系写死在本地,既保留了域名的便利,又绕开了公共 DNS。做开发或者临时切换环境的时候,这招很好用。Windows 在 C:\Windows\System32\drivers\etc\hosts,macOS 和 Linux 在 /etc/hosts。
查一个域名的 IP 很简单。命令行里 ping 或者 nslookup 就能看到。但要注意,大型网站通常有多个 IP,分布在不同机房,你 ping 到的只是离你最近的那一个。而且很多站点前面挂了 CDN,你拿到的 IP 其实是 CDN 边缘节点的,不是源站。想找源站 IP 是另一回事,跟直接访问的关系不大了。
IPv6 在这一点上稍微不一样。地址长度 128 位,写出来是一串十六进制,比如 2400:cb00::1。在浏览器里访问 IPv6 地址需要用方括号包起来,像 http://[2400:cb00::1]。用起来比 IPv4 麻烦,但地址空间大到几乎用不完,每个设备都能分到独立的公网地址,理论上以后直连会更容易。
说到底,IP 地址访问网站是一种底层手段。日常上网用域名就够了,省事。但当你需要排查问题、绕过障碍、或者访问那些根本没有域名的服务时,知道怎么用 IP 直连,是一项实用的基本功。