如何解读'netstat -a'命令的输出结果

29

有些东西让我感到很奇怪:

  • 0.0.0.0、127.0.0.1和[::]之间有什么区别?
  • 如何阅读外部地址的每个部分(part1:part2)?
  • 状态Time_Wait、Close_Wait是什么意思?
  • 等等。

有人能简要概述一下如何解释这些结果吗?

7个回答

19

我知道答案已经被接受了,但这里有一些额外的信息:

  • 如果在“本地地址”列中显示为0.0.0.0,则表示该端口正在所有“网络接口”上侦听(即您的计算机,调制解调器和网络适配器)。
  • 如果在“本地地址”列中显示为127.0.0.1,则表示该端口仅监听来自您的PC自身的连接,而不是来自互联网或网络的连接。没有危险。
  • 如果在“本地地址”列中显示您的在线IP,则表示该端口仅监听来自互联网的连接。
  • 如果在“本地地址”列中显示您的本地网络IP,则表示该端口仅监听来自本地网络的连接。
  • 远程地址 - 与套接字连接的远程计算机的IP地址和端口号。除非指定了-n参数,否则会显示对应于IP地址和端口的名称。如果端口尚未建立,则端口号显示为星号(*)。 (来自维基百科)

2
提到的文章链接已经失效。 - Varinder Singh
互联网上关于netstat中本地地址列的最佳解释之一。干得好! - Dachstein

19

0.0.0.0通常指代在所有接口上监听的内容。 127.0.0.1 = localhost(仅限本地接口) 我不确定[::]是什么意思。

TIME_WAIT表示双方已经同意关闭TCP连接,现在必须等待规定的时间才能将连接断开。

CLOSE_WAIT表示远程系统已经完成发送操作,而你的系统尚未完成。


2
你所说的“监听所有接口”是什么意思? - Aravind Yarram
4
你可以把每个网络“卡片”看作是一个接口。其中一些“卡片”是虚拟的(仅存在于软件中),而另一些则是物理的。例如,你的以太网适配器和无线适配器都是接口,VirtualBox的网络主机适配器也是一个接口(只是虚拟的而不是物理的)。 - Sam Axe

10

0.0.0.0、127.0.0.1和[::]有什么区别?

  • 0.0.0.0表示正在监听机器上所有接口的内容。
  • 127.0.0.1表示您自己的机器。
  • [::]是0.0.0.0的IPv6版本。
  • 我的机器还显示 *:\* 用于UDP,这表明UDP连接没有真正的外部地址-它们可以从任何地方接收数据包。这就是UDP的本质。

如何阅读外部地址的每个部分(part1:part2)?

  • part1是主机名或IP地址
  • part2是端口

8

3

这个链接帮助我很多地解释了netstat -a

以下是从那里复制的内容 -

TCP连接状态
以下是这个握手过程的简要说明。在这种情况下,“客户端”是请求连接的对等方,“服务器”是接受连接的对等方。请注意,此表示法不反映客户端/服务器关系作为架构原则。

连接建立

客户端向服务器发送一个SYN消息,其中包含服务器的端口和客户端的初始序列号(ISN)(主动打开)。
服务器回送自己的SYN和ACK(其中包括客户端的ISN + 1)。
客户端发送一个ACK(其中包括服务器的ISN + 1)。

连接撤销(修改后的三次握手)。

客户端发送FIN(主动关闭)。现在这是一个半关闭的连接。客户端不再发送数据,但仍能从服务器接收数据。收到此FIN后,服务器进入被动关闭状态。
服务器发送ACK(即客户端FIN序列号+1)
服务器发送自己的FIN。
客户端发送ACK(即服务器FIN序列号+1)。收到此ACK后,服务器关闭连接。
半关闭连接可用于终止发送数据,同时仍然接收数据。套接字应用程序可以调用shutdown,并将第二个参数设置为1以进入此状态。

Netstat中显示的状态说明:
状态说明


SYN_SEND 表示主动打开。

SYN_RECEIVED 服务器刚刚收到来自客户端的 SYN。

ESTABLISHED 客户端收到服务器的 SYN,会话已建立。

LISTEN 服务器准备好接受连接。

注意:有关 listen() 套接字调用的文档,请参见文档。正在监听状态的 TCP 套接字不会显示 - 这是 NETSTAT 的限制。有关更多信息,请参阅 Microsoft 知识库中的以下文章: 134404 NETSTAT.EXE 不显示 TCP 听取套接字 FIN_WAIT_1 表示主动关闭。

TIMED_WAIT 客户端在主动关闭后进入此状态。

CLOSE_WAIT 表示被动关闭。服务器刚刚从客户端收到第一个 FIN。

FIN_WAIT_2 客户端刚刚收到来自服务器对其第一个 FIN 的确认。

LAST_ACK 当服务器发送自己的 FIN 时,处于此状态。

CLOSED 服务器从客户端收到 ACK 并且连接已关闭。


2

Send-Q是应用程序发送但尚未被套接字另一端确认的数据量。

Recv-Q是从NIC接收但应用程序尚未消耗的数据量。

这两个队列都驻留在内核内存中。 如果您有兴趣,可以使用指南来调整这些内核缓冲区。不过,您可能会发现默认参数表现良好。


0

对于那些在它们的netstat输出中看到[::]的人,我打赌你们的机器正在运行IPv6;这相当于0.0.0.0,即在任何IPv6地址上进行侦听。


这可能也与操作系统有关。在我的Mac OS X系统上,默认情况下IPv6是开启的,但IPv6(“tcp6”)条目仍然显示“*.*”。 - benc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接