127.0.0.1 and 0.0.0.0

今天在服务器测试django项目,直接使用的默认命令 python manage.py runserver 8000 启动的,然后项目就会启动在 127.0.0.1:8000 端口上。此时我想使用 ECS 服务器IP访问8000端口,查看运行情况结果访问失败。本来以为是阿里服务器安全规则导致,我重新更新了规则,放开了8000端口结果开始不行。后来才想到,可能是启动IP的问题,导致外界无法访问。

127.0.0.1

所有以127开头的IP均为回环地址,即我们在主机上发送给127IP的内容都会被主机自己接收,根本发不出去,同样外界也无法通过此IP访问到自己。当我们的项目启动IP为127.0.0.1:8000,则此IP仅能被当前主机访问,外界无法通过8000端口访问。

正常的数据会类型下面路径传输:

1
2
3
graph LR

数据包 --> IP层 --> 链路层 --> 外部网络

但是回环地址的数据无法抵达链路层就被IP层获取,返回当前主机指定端口:

1
2
3
graph LR

数据包 --> IP层 --> |拦截|本机8000端口

0.0.0.0

0.0.0.0并不是一个真实的IP地址,它表示本机的所有IPV4的地址,监听0.0.0.0的端口,就是监听本机的所有IP的端口。当服务启动在0.0.0.0:8000时,就相当于服务器IP的8000端口启动了此服务,此时外界可以通过服务器IP:8000端口访问启动的项目。