localhost,和127.0.0.1和本机IP三者的区别?
本篇文章:
对于网络方面的知识,自己是一窍不通,于是打算开始学习网络,遇到了一个问题,如何区别 localhost,127.0.0.1 和本机IP这三者?于是,在百度上面学习了一番,写下这篇文章,记录下自己的学习成果。
---------------------------------------------------正文---------------------------------------------------
① 127.0.0.1:
一、什么是环回地址??与 127.0.0.1 的区别呢??
环回地址: 主机用于向自身发送通信的一个特殊地址(也就是一个特殊的目的地址)。
可以这么说:同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开 TCP/IP协议栈 的下层。(也就是说:不用再通过什么链路层,物理层,以太网传出去了,而是可以直接在自己的 网络层,运输层 进行处理了)
IPv4的环回地址为: 127.0.0.0 到127.255.255.255 都是环回地址(只是有两个特殊的保留),此地址中的任何地址都不会出现在网络中
网络号为127的地址 根本就不是一个网络地址(因为产生的 IP 数据报就不会到达外部网络接口中,是不离开主机的包)
当操作系统初始化本机的 TCP/IP 协议栈时,设置协议栈本身的 IP 地址为 127.0.0.1(保留地址),并注入路由表 。当IP层接收到目的地址为 127.0.0.1(准确的说是:网络号为 127 的 IP )的数据包时,不调用网卡驱动进行二次封装,而是立即转发到本机 IP 层进行处理,由于不涉及底层操作。因此,ping 127.0.0.1 一般作为测试本机 TCP/IP 协议栈正常与否的判断之一。
所以说:127.0.0.1 是保留地址之一,只是被经常的使用,来检验本机 TCP/IP 协议栈而已
如果我们可以 ping 通的话,就说明:本机的网卡和 IP 协议安装都没有问题。(跟我们当前主机有没有联网没有一点关系)
127.0.0.1 这个地址通常分配给 loopback 接口。loopback 是一个特殊的网络接口(可理解成虚拟网卡),用于本机中各个应用之间的网络交互。只要操作系统的网络组件是正常的,loopback 就能工作。Windows 中看不到这个接口,Linux 中这个接口叫 lo:
#ifconfig
eth0 Link encap:Ethernet hwaddr 00:00:00:00:00:00
inet addr :192.168.0.1 Bcase:192.168.0.255 Mask:255.255.255.0
......
lo Link encap:Local Loopback
inetaddr: 127.0.0.1 Mask: 255.0.0.0
......
② localhost
localhost: 首先是一个域名(如同:www.baidu.com ),也是本机地址,它可以被配置为任意的 IP 地址(也就是说,可以通过 hosts 这个文件进行更改的),不过通常情况下都指向:(如下)
IPv4: 指向 127.0.0.1
IPv6: 指向 [::1]
cmd 输入: ping localhost ,即可看到对应的主机地址
③ IP
“本机地址”并不是一个规范的名词。通常情况下,指的是“本机物理网卡所绑定的网络协议地址”。由于目前常用网络协议只剩下了 IPV4,IPX/Apple Tak 消失了,IPV6 还没普及,所以通常仅指 IP 地址甚至 ipv4 地址。一般情况下,不会把 127.0.0.1 当作本机地址。
本机地址是与具体的网络接口绑定的。比如以太网卡、无线网卡或者 PPP/PPPoE 拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。
局域网内可以设置固定的IP地址,也可以随机得到不同的IP地址,可以人为控制。
在互联网一般都是电信商随机分配一个IP,每次拨号的IP地址都是不同的,是不可控的。重新拨号上网或重启路由器,IP地址就会产生变化。
IP地址是可变的,电脑的MAC地址才是不变的。
- localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4) 和 ::1 (ipv6)
- 整个 127. 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有 TCP/IP 协议栈的设备基本上都有 localhost/127.0.0.1。
- 本机地址通常指的是绑定在物理或虚拟网络接口上的 IP 地址,可供其他设备访问到。
最后,从开发度来看
- localhost 是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先 gethostbyname 转成 IP 才能绑定。
- 127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。
参考链接:
https://blog.csdn.net/weixin_43970743/article/details/89670998
作者:文小白