localhost、127.0.0.1、 ::1 区别

注:本文为 “localhost、127.0.0.1、 ::1 区别” 相关文章合辑。


一文讲清楚 localhost 和 127.0.0.1 的区别

RUNOOB 教程 2024-06-21 11:28 福建

在进行网络和 Web 开发时,经常会用到 “localhost” 和 “127.0.0.1” ,它们在大多数情况下可以互换使用,但在概念上是不同的:

  • localhost 是本机域名。
  • 127.0.0.1 是本机 IP 地址。

localhost 通过系统的 host 文件会自动解析到 127.0.0.1。

localhost 和 127.0.0.1 都是用来访问本地计算机的名称和地址,它们之间有紧密的关系,但也有一些区别。

图片

1、localhost

localhost 是一个域名,它在大多数操作系统中被配置为指向本地计算机,我们在浏览器中输入 localhost 时,浏览器会将其解析为本地计算机的地址。

通常情况下,在操作系统的主机文件(如 /etc/hosts 或 C:\Windows\System32\drivers\etc\hosts)中,localhost 被定义为指向 127.0.0.1。

使用 localhost 进行网络通信时,操作系统会将其解析为 127.0.0.1。

图片

其实 localhost 就相当于一个域名,可以使用 ping 来查看域名对应的 IP 地址,例如 ping www.runoob.com 就会返回 www.runoob.com 域名指向的 IP:

图片

所以可以在命令行使用 ping localhost 命令来查看 localhost 指向的 IP 地址:

图片

2、127.0.0.1

127.0.0.1 是一个特殊的 IP 地址,称为回环地址(loopback address),它用于标识本地计算机,并且是网络协议中保留的地址之一,用于测试和本地通信。

127.0.0.1 是一个特殊的 IPv4 地址,保留用于主机自身的通信,不会经过任何物理网络接口

相同点

  • 两者都指向本地主机,通常用来进行本地测试和开发工作。
  • 通信不会离开主机本身,不会经过外部网络。

不同点

  • 解析过程:localhost 需要通过主机文件解析,而 127.0.0.1 是直接使用的IP 地址。
  • 配置依赖:localhost 的解析依赖于系统配置(如 /etc/hosts),如果该配置被修改或破坏,localhost 可能无法正常解析为 127.0.0.1,但 127.0.0.1 则不受影响。

在大多数情况下,localhost 和 127.0.0.1 可以互换使用,因为它们都指向同一台计算机。不过,如果遇到 DNS 或主机文件解析的问题,直接使用 127.0.0.1 可能会更加可靠。

IPv6 中的 localhost

在 IPv6 中,localhost 对应的地址是 ::1,这个地址是 IPv6 的回环地址,用于本地设备自我通信,就像 IPv4 中的 127.0.0.1 一样。

IPv6 中的 localhost 可以像 IPv4 一样在网络通信和开发中使用。

当需要在 IPv6 环境中进行本地测试和开发时,可以使用 ::1 来指代本地主机。

如果在本地机器上运行一个支持 IPv6 的 Web 服务器,可以通过在浏览器中输入http://[::1]:porthttps://[::1]:port来访问,其中 “port” 是Web服务器的特定端口。

  1. Web 服务器监听默认的 HTTP 端口 80 或 HTTPS 端口 443,则可以省略端口号。例如:
    http://[::1]
    https://[::1]

  2. Web 服务器监听非默认的端口,则需要指定端口号,例如:
    http://[::1]:8080
    https://[::1]:8443

结合之前关于 IPv4 中 localhost 和 127.0.0.1 的讨论,可以总结 IPv6 中的相应情况:

  1. 表示形式:
  • IPv4: localhost 是一个主机名,通常解析为 127.0.0.1。
  • IPv6: localhost 同样是一个主机名,通常解析为 ::1。
  1. 使用方式:
  • IPv4: localhost 通常用于软件配置和开发环境,而 127.0.0.1 用于需要 IP地址的网络配置和系统文件中。
  • IPv6: localhost 和 ::1 的使用方式与 IPv4 类似,具体取决于系统和应用程序的需求。
  1. 访问方法:
  • IPv4: 通过 localhost 或 127.0.0.1 访问服务,本质上达到相同的结果。
  • IPv6: 通过 localhost 或 ::1 访问服务,同样达到相同的结果,主要区别在于使用的协议版本。

无论是 IPv4 中的 localhost 和 127.0.0.1,还是 IPv6 中的 localhost 和 ::1,它们都用于实现本地设备的自我通信。


断网了,还能 ping 通 127.0.0.1 吗?

小白 yes的练级攻略 2023-12-20 10:50 浙江

网通不通ping 一下就知道了。

如果把 127.0.0.1 换成 0.0.0.0localhost 会怎么样?

它们之间有什么区别?

直接拔掉网线,断网,在控制台输入 ping 127.0.0.1

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.080 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.093 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.074 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.079 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.079 ms
^C
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.074/0.081/0.093/0.006 ms

说明,拔了网线 ping 127.0.0.1能 ping 通的

我们可以再想深一点,为什么断网了还能 ping127.0.0.1 呢?

什么是 127.0.0.1

首先,这是个 IPv4 地址。

IPv4 地址有 32 位,一个字节有 8 位,共 4 个字节。

其中127 开头的都属于回环地址,也是 IPv4 的特殊地址,没什么道理,就是人为规定的。

127.0.0.1众多回环地址中的一个。之所以不是 127.0.0.2 ,而是 127.0.0.1,是因为源码里就是这么定义的,也没什么道理。

/* Address to loopback in software to local host. */
#define  INADDR_LOOPBACK   0x7f000001 /* 127.0.0.1  */

图片

回环地址

IPv4 的地址是 32 位的,2 的 32 次方,大概是 40 + 亿。地球光人口就 76 亿了,40 亿 IP 这点量,远远不够用,实际上IP 也确实用完了。

所以就有了 IPv6IPv6 的地址是 128 位的,大概是 2 的 128 次方≈10 的 38 次方。据说地球的沙子数量大概是10 的 23 次方,所以 IPv6 的 IP 可以认为用不完。

IPv4 以 8 位一组,每组之间用 . 号隔开

IPv6 以 16 位为一组,每组之间用 : 号隔开。如果全是 0,那么可以省略为 :: 号

图片

IPv6 回环地址

在 IPv4 下的回环地址是 127.0.0.1,在 IPv6 下,表达为 ::1 。中间把连续的 0给省略了,之所以不是7 个 冒号,而是2 个冒号:, 是因为一个 IPv6 地址中只允许出现⼀次两个连续的冒号

在 IPv4 下用的是 ping 127.0.0.1 命令。在 IPv6 下用的是 ping6 ::1 命令。

什么是 ping

ping 是应用层命令,可以理解为它跟游戏或者聊天软件属于同一层。只不过聊天软件可以收发消息,还能点个赞什么的,有很多复杂的功能。而 ping 作为一个小程序,它的功能比较简单,就是尝试发送一个小小的消息到目标机器上,判断目的机器是否可达,其实也就是判断目标机器网络是否能连通。

ping 应用的底层,用的是网络层的 ICMP 协议

图片

IP 和 ICMP 和 Ping 所在分层

虽然 ICMP 协议和 IP 协议都属于网络层协议,但其实`ICMP 也是利用了 IP 协议进行消息的传输

图片

ip 和 icmp 的关系

所以,在这里完全可以简单地理解为 ping 某个 IP 就是往某个 IP 地址发个消息。

TCP 发数据和 ping 的区别

一般情况下,我们会使用 TCP 进行网络数据传输,那么可以看下它和 ping 的区别。

图片

ping 和普通发消息的关系

ping 和其他应用层软件都属于应用层

那么我们横向对比一下,比方说聊天软件,如果用的是 TCP 的方式去发送消息。

为了发送消息,那就得先知道往哪发。linux 里万物皆文件,那你要发消息的目的地,也是个文件,这里就引出了 socket 的概念。

要使用 socket , 那么首先需要创建它。

在 TCP 传输中创建的方式是 socket (AF_INET, SOCK_STREAM, 0);,其中 AF_INET 表示将使用 IPv4 里host:port的方式去解析待会你输入的网络地址。SOCK_STREAM 是指使用面向字节流的 TCP 协议,工作在传输层

创建好了 socket 之后,就可以愉快的把要传输的数据写到这个文件里。调用 socket 的 sendto 接口的过程中进程会从用户态进入到内核态,最后会调用到 sock_sendmsg 方法。

然后进入传输层,带上 TCP 头。网络层带上 IP 头,数据链路层带上 MAC 头等一系列操作后。进入网卡的发送队列 ring buffer,顺着网卡就发出去了。

回到 ping , 整个过程也基本跟 TCP 发数据类似,差异的地方主要在于,创建 socket 的时候用的是 socket (AF_INET,SOCK_RAW,IPPROTO_ICMP)SOCK_RAW 是原始套接字 ,工作在网络层, 所以构建 ICMP(网络层协议)的数据,是再合适不过了。

ping 在进入内核态后最后也是调用的 sock_sendmsg 方法,进入到网络层后加上 ICMP 和 IP 头后,数据链路层加上MAC 头,也是顺着网卡发出。因此,本质上 ping 跟普通应用发消息在程序流程上没太大差别。

这也解释了**为什么当你发现怀疑网络有问题的时候,别人第一时间是问你能 ping 通吗?**因为可以简单理解为 ping 就是自己组了个数据包,让系统按着其他软件发送数据的路径往外发一遍,能通说明其他软件发的数据也能通。

为什么断网了还能 ping 通 127.0.0.1

前面提到,有网的情况下,ping 最后是通过网卡将数据发送出去的。

那么断网的情况下,网卡已经不工作了,ping 回环地址却一切正常,我们可以看下这种情况下的工作原理。

图片

ping 回环地址

从应用层到传输层再到网络层。这段路径跟 ping 外网的时候是几乎是一样的。到了网络层,系统会根据目的 IP,在路由表中获取对应的路由信息,而这其中就包含选择哪个网卡把消息发出。

当发现目标 IP 是外网 IP时,会从 “真网卡” 发出。

当发现目标 IP 是回环地址时,就会选择本地网卡

本地网卡,其实就是个"假网卡",它不像 “真网卡” 那样有个 ring buffer 什么的,“假网卡” 会把数据推到一个叫 input_pkt_queue链表中。这个链表,其实是所有网卡共享的,上面挂着发给本机的各种消息。消息被发送到这个链表后,会再触发一个软中断

专门处理软中断的工具人**“ksoftirqd”(这是个内核线程**),它在收到软中断后就会立马去链表里把消息取出,然后顺着数据链路层、网络层等层层往上传递最后给到应用程序。

ping 回环地址和通过 TCP 等各种协议发送数据到回环地址都是走这条路径。整条路径从发到收,都没有经过 “真网卡”。之所以 127.0.0.1 叫本地回环地址,可以理解为,消息发出到这个地址上,就不会出网络,在本机打个转就又回来了。所以断网,依然能 ping 通 127.0.0.1。

ping 回环地址和 ping 本机地址有什么区别

我们在 mac 里执行 ifconfig

$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.31.6 netmask 0xffffff00 broadcast 192.168.31.255
...

能看到 lo0,表示本地回环接口,对应的地址,就是我们前面提到的 127.0.0.1,也就是回环地址
eth0,表示本机第一块网卡,对应的 IP 地址是192.168.31.6,管它叫本机 IP

之前一直认为 ping 本机 IP 的话会通过 “真网卡” 出去,然后遇到第一个路由器,再发回来到本机。
为了验证这个说法,可以进行抓包,但结果跟上面的说法并不相同。
  ~  
图片

ping 127.0.0.1

  ~  
图片

ping 本机地址

可以看到 ping 本机 IP 跟 ping 回环地址一样,相关的网络数据,都是走的 lo0,本地回环接口,也就是前面提到的"假网卡"。

只要走了本地回环接口,数据都不会发送到网络中,在本机网络协议栈中兜一圈,就发回来了。因此 ping 回环地址和 ping 本机地址没有区别

127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗

以前第一次用 nginx 的时候,发现用这几个 IP,都能正常访问到 nginx 的欢迎网页。一度认为这几个 IP 都是一样的。

图片

访问 127.0.0.1:80

图片

访问 localhost:80

图片

访问 0.0.0.0:80

图片

访问本机的 IP 地址

但本质上还是有些区别的。

首先 localhost 就不叫 IP,它是一个域名,就跟 "baidu.com", 是一个形式的东西,只不过默认会把它解析为 127.0.0.1 ,当然这可以在 /etc/hosts 文件下进行修改。

所以默认情况下,使用 localhost 跟使用 127.0.0.1 确实是没区别的。

其次就是 0.0.0.0,执行 ping 0.0.0.0 ,是会失败的,因为它在 IPv4 中表示的是无效的目标地址

$ ping 0.0.0.0
PING 0.0.0.0 (0.0.0.0): 56 data bytes
ping: sendto: No route to host
ping: sendto: No route to host

但它还是很有用处的,回想下,我们启动服务器的时候,一般会 listen 一个 IP 和端口,等待客户端的连接。

如果此时 listen 的是本机的 0.0.0.0 , 那么它表示本机上的所有 IPv4 地址

/* Address to accept any incoming messages. */
#define  INADDR_ANY   ((unsigned long int) 0x00000000) /* 0.0.0.0  */

举个例子。刚刚提到的 127.0.0.1192.168.31.6 ,都是本机的 IPv4 地址,如果监听 0.0.0.0 ,那么用上面两个地址,都能访问到这个服务器。

当然, 客户端 connect 时,不能使用 0.0.0.0 。必须指明要连接哪个服务器 IP。

总结

  • 127.0.0.1回环地址localhost域名,但默认等于 127.0.0.1

  • ping 回环地址和 ping 本机地址,是一样的,走的是lo0 “假网卡”,都会经过网络层和数据链路层等逻辑,最后在快要出网卡前狠狠拐了个弯, 将数据插入到一个链表后就软中断通知ksoftirqd来进行收数据的逻辑,压根就不出网络。所以断网了也能 ping 通回环地址。

  • 如果服务器 listen 的是 0.0.0.0,那么此时用 127.0.0.1 和本机地址都可以访问到服务。


via:

TCP 127.0.0.1:7897 ieonline:62113 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62156 FIN_WAIT_2 TCP 127.0.0.1:7897 ieonline:62157 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62168 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62178 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62185 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62237 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62269 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62288 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62291 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62423 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62429 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62474 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62508 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62572 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62653 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62707 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62708 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62709 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62710 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62711 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62712 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62713 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62714 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62809 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62823 ESTABLISHED TCP 127.0.0.1:7897 ieonline:62843 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62897 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62904 TIME_WAIT TCP 127.0.0.1:7897 ieonline:62928 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63002 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63033 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63064 CLOSE_WAIT TCP 127.0.0.1:7897 ieonline:63084 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63085 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63086 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63087 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63088 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63089 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63090 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63091 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63128 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63157 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63205 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63232 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63262 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63268 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63270 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63275 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63292 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63308 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63330 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63342 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63351 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63359 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63360 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63370 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63371 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63375 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63403 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63404 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63405 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63406 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63415 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63419 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63421 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63431 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63432 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63435 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63439 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63440 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63448 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63467 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63479 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63481 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63489 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63490 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63494 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63503 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63511 TIME_WAIT TCP 127.0.0.1:7897 ieonline:63513 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63534 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63556 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63576 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63584 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63599 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63600 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63601 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63602 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63603 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63604 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63605 ESTABLISHED TCP 127.0.0.1:7897 ieonline:63606 ESTABLISHED TCP 127.0.0.1:9097 ieonline:61984 ESTABLISHED TCP 127.0.0.1:9097 ieonline:61988 ESTABLISHED TCP 127.0.0.1:9097 ieonline:62530 ESTABLISHED TCP 127.0.0.1:9210 ieonline:62863 TIME_WAIT TCP 127.0.0.1:9210 ieonline:63014 TIME_WAIT TCP 127.0.0.1:9210 ieonline:63211 TIME_WAIT TCP 127.0.0.1:9210 ieonline:63516 TIME_WAIT TCP 127.0.0.1:9210 ieonline:63694 ESTABLISHED TCP 127.0.0.1:10340 ieonline:50942 ESTABLISHED TCP 127.0.0.1:35600 ieonline:49767 ESTABLISHED TCP 127.0.0.1:49262 ieonline:51216 ESTABLISHED TCP 127.0.0.1:49714 ieonline:49715 ESTABLISHED TCP 127.0.0.1:49715 ieonline:49714 ESTABLISHED TCP 127.0.0.1:49716 ieonline:49717 ESTABLISHED TCP 127.0.0.1:49717 ieonline:49716 ESTABLISHED TCP 127.0.0.1:49718 ieonline:49719 ESTABLISHED TCP 127.0.0.1:49719 ieonline:49718 ESTABLISHED TCP 127.0.0.1:49720 ieonline:49721 ESTABLISHED TCP 127.0.0.1:49721 ieonline:49720 ESTABLISHED TCP 127.0.0.1:49767 ieonline:35600 ESTABLISHED TCP 127.0.0.1:49877 ieonline:49958 ESTABLISHED TCP 127.0.0.1:49881 ieonline:49957 ESTABLISHED TCP 127.0.0.1:49957 ieonline:49881 ESTABLISHED TCP 127.0.0.1:49958 ieonline:49877 ESTABLISHED TCP 127.0.0.1:50942 ieonline:10340 ESTABLISHED TCP 127.0.0.1:51216 ieonline:49262 ESTABLISHED TCP 127.0.0.1:51216 ieonline:51219 ESTABLISHED TCP 127.0.0.1:51216 ieonline:58166 ESTABLISHED TCP 127.0.0.1:51216 ieonline:58614 ESTABLISHED TCP 127.0.0.1:51216 ieonline:58616 ESTABLISHED TCP 127.0.0.1:51217 ieonline:61113 ESTABLISHED TCP 127.0.0.1:51217 ieonline:61915 ESTABLISHED TCP 127.0.0.1:51219 ieonline:51216 ESTABLISHED TCP 127.0.0.1:58166 ieonline:51216 ESTABLISHED TCP 127.0.0.1:58614 ieonline:51216 ESTABLISHED TCP 127.0.0.1:58616 ieonline:51216 ESTABLISHED TCP 127.0.0.1:59874 ieonline:62887 TIME_WAIT TCP 127.0.0.1:59874 ieonline:62942 TIME_WAIT TCP 127.0.0.1:59874 ieonline:62981 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63051 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63136 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63180 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63236 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63296 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63396 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63549 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63625 TIME_WAIT TCP 127.0.0.1:59874 ieonline:63664 TIME_WAIT TCP 127.0.0.1:59952 ieonline:59953 ESTABLISHED TCP 127.0.0.1:59953 ieonline:59952 ESTABLISHED TCP 127.0.0.1:61113 ieonline:51217 ESTABLISHED TCP 127.0.0.1:61915 ieonline:51217 ESTABLISHED TCP 127.0.0.1:61984 ieonline:9097 ESTABLISHED TCP 127.0.0.1:61988 ieonline:9097 ESTABLISHED TCP 127.0.0.1:62113 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62156 ieonline:7897 CLOSE_WAIT TCP 127.0.0.1:62157 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62168 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62269 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62288 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62291 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62423 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62429 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62474 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62530 ieonline:9097 ESTABLISHED TCP 127.0.0.1:62554 ieonline:7897 TIME_WAIT TCP 127.0.0.1:62705 ieonline:7897 TIME_WAIT TCP 127.0.0.1:62706 ieonline:7897 TIME_WAIT TCP 127.0.0.1:62809 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62823 ieonline:7897 ESTABLISHED TCP 127.0.0.1:62987 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63033 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63064 ieonline:7897 FIN_WAIT_2 TCP 127.0.0.1:63083 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63090 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63232 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63258 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63262 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63268 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63270 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63275 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63281 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63308 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63320 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63330 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63333 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63334 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63342 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63343 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63344 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63347 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63351 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63359 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63360 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63370 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63371 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63375 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63377 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63378 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63381 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63382 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63383 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63385 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63386 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63403 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63404 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63405 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63406 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63414 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63415 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63419 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63420 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63421 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63424 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63426 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63431 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63432 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63433 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63435 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63439 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63440 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63448 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63451 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63453 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63460 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63462 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63465 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63467 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63473 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63479 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63481 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63485 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63489 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63490 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63494 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63496 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63499 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63503 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63509 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63513 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63527 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63534 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63537 ieonline:7897 TIME_WAIT TCP 127.0.0.1:63556 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63576 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63584 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63599 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63600 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63601 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63602 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63603 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63604 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63605 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63606 ieonline:7897 ESTABLISHED TCP 127.0.0.1:63694 ieonline:9210 ESTABLISHED TCP 192.168.31.164:57858 ec2-54-197-155-195:https ESTABLISHED TCP 192.168.31.164:57878 ecs-124-70-83-207:21113 ESTABLISHED TCP 192.168.31.164:57904 120.92.37.181:http CLOSE_WAIT TCP 192.168.31.164:57905 120.92.37.181:http CLOSE_WAIT TCP 192.168.31.164:57908 ec2-52-71-172-115:9000 ESTABLISHED TCP 192.168.31.164:57972 ec2-34-233-75-164:8095 ESTABLISHED哪一个到底是端口号啊
06-14
<think>根据用户提供的引用和问题,用户主要关心的是如何确认`redis-cli --cluster create`命令的正确性,以及解决连接问题。用户之前遇到了连接被拒绝的错误,引用[1]指出这通常是因为Redis服务未运行或配置问题,引用[2]提到了检查绑定配置和连接方式。 用户当前的命令是创建Redis集群,包含6个节点(7000到7005端口),每个主节点有一个副本(replica)。命令结构本身没有问题,但执行前需要确保: 1. 每个端口的Redis实例已正确启动,且配置文件允许集群模式。 2. 所有实例的`bind`配置(如0.0.0.0)或至少127.0.0.1可访问,防火墙未阻止端口。 3. 集群端口(节点端口+10000,如17000)需开放。 因此,需要引导用户检查这些前置条件,再运行命令。同时,用户可能仍遇到连接问题,需参考之前的解决方案(如检查服务状态、配置绑定等)。 回答结构: 1. 指出命令本身语法正确,但执行依赖环境配置。 2. 分步骤说明如何验证和准备环境。 3. 给出检查命令正确性的具体方法(如先连接单个节点测试)。 4. 关联之前的问题,确保用户已解决基础连接问题。 </think>根据您的描述和提供的引用信息,我将逐步分析命令正确性及潜在问题: ### 一、命令语法正确性验证 ```bash redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \ 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \ --cluster-replicas 1 ``` 1. **语法结构正确** - 节点数量:6个节点(符合 $N = M \times (R+1)$ 要求,其中 $M$ 是主节点数,$R$ 是副本数) - 参数顺序:节点地址在前,集群选项在后 - 端口分配:7000-7005连续端口(标准实践) 2. **集群配置规范** `--cluster-replicas 1` 表示每个主节点配1个从节点,此时会自动划分: - 主节点:7000/7001/7002 - 从节点:7003→7000副本, 7004→7001副本, 7005→7002副本 > 语法层面无错误 [^1] ### 二、执行前提条件检查(常见失败原因) 1. **Redis服务状态**(引用[1]关键点) ``` # 检查每个节点是否运行(以7000为例) redis-cli -p 7000 ping ``` - 若返回 `Could not connect...` 需确认: - 是否启动Redis服务:`redis-server redis.7000.conf` - 配置文件是否启用集群模式:`cluster-enabled yes` - 日志是否有错误:`tail -f redis.7000.log` 2. **绑定配置**(引用[2]关键点) 检查每个节点的 `redis.conf`: ```ini bind 127.0.0.1 # 允许本地连接(默认安全) # 或 bind 0.0.0.0 # 允许所有IP连接(需防火墙配合) ``` ![Redis绑定配置示意图](https://example.com/redis-bind-conf.png) > 配置错误会导致"目标计算机积极拒绝"[^1][^2] 3. **端口冲突检查** ```bash netstat -tuln | grep '7000|7001|7002|7003|7004|7005' ``` - 确认无其他进程占用端口 ### 三、诊断与验证步骤 1. **分阶段测试连接** ```bash # 测试单节点连通性 for port in {7000..7005}; do redis-cli -p $port cluster info done ``` - 任一节点连接失败需返回检查步骤二 2. **集群创建后验证** 成功创建后将输出: ``` [OK] All 16384 slots covered ``` 验证命令: ```bash redis-cli --cluster check 127.0.0.1:7000 ``` ### 四、典型错误场景 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | `ERR Invalid node address` | 节点未启动/端口错误 | 检查服务状态 | | `Waiting for the cluster to join` 卡住 | 节点间通信失败 | 开放集群总线端口(+10000) | | `Not all slots are covered` | 节点数量不足 | 确保提供6节点 | > 注意:生产环境需额外检查防火墙设置,开发环境建议暂时禁用防火墙测试。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值