2

我运行了该命令sudo lsof -i -n -P | grep TCP,我想知道是否可以对其输出进行更多说明。

具体来说,在这张图片中:

在此处输入图像描述

为什么我有一个 IP:PORT 指向另一个 IP:PORT,然后又用标签“ESTABLISHED”返回自身?我对这到底意味着什么感到困惑。

4

2 回答 2

2

我不确定您对网络和 TCP 的总体了解程度,因此我将尝试提供一个包含一些细节的简短描述。从您的问题来看,您似乎对网络内部不太熟悉,因此可能很难理解其中一些概念,但我希望这会有所帮助:

TCP 协议有多种状态。把它想象成一个状态机。客户端的状态包括CLOSEDSYN_SENTESTABLISHEDFIN_WAIT_1和。FIN_WAIT_2TIME_WAIT

因此,该ESTABLISHED标签表示 TCP 连接处于该ESTABLISHED状态。处于已建立状态意味着两台主机都成功完成了 TCP 3 次握手(并在此过程中从 转换SYN_SENTESTABLISHED)。当客户端向服务器发送 TCP 请求时,会发生从CLOSED到的转换。SYN_SENTSYN

在已建立的连接中,双方发送和接收特定于应用程序的数据。基本上,会话已建立,并且双向字节流在两个终端系统之间流动。

TCP 套接字由 4-tuple 唯一标识(source-ip, source-port, destination-ip, destination-port)。IP 标识终端系统的网络接口,端口号用于复用和解复用到达该网络接口的数据包(以便目标系统知道将数据包传递到哪个服务)。这就是IP:PORT字段的含义。

我不确定为什么同一连接有两个条目。这可能与系统有关,尽管这很奇怪(在我的系统中,每个套接字只有一个条目)。但是套接字是双向的,因此您的系统可能会将每个数据包流向显示为一个不同的条目。这也可能取决于系统如何实现套接字。

于 2015-06-19T21:29:36.850 回答
1

ESTABLISHED表示 TCP 连接已经完成了 3 次握手。(不确定是否accept必须调用)。参见TCP 状态图

为什么我有一个 IP:PORT 指向另一个 IP:PORT 然后又回到自己

这意味着您的进程中有两个 TCP 套接字打开。最有可能的是,一个监听端口 9092,另一个从端口 57633 连接到该监听套接字。端口 57633 属于临时端口范围,即操作系统自动分配给调用connect但未调用bind以分配特定端口的套接字的端口范围。

于 2015-06-19T21:28:48.560 回答