我运行了命令sudo lsof -i -n -P | grep TCP
,我想知道是否可以对其输出进行更多澄清。
具体来说,在此图片中:
为什么我有一个IP:PORT指向另一个IP:PORT然后返回自己的标签' ESTABLISHED'?我对这意味着什么感到困惑。
答案 0 :(得分:2)
我不确定您对网络和TCP的熟悉程度,因此我将尝试提供一些简要说明,其中包含一些细节。从您的问题来看,您似乎对网络内部不是很熟悉,因此可能很难理解其中的一些概念,但我希望这会有所帮助:
TCP协议具有各种状态。把它想象成一个状态机。客户端的国家/地区包括CLOSED
,SYN_SENT
,ESTABLISHED
,FIN_WAIT_1
,FIN_WAIT_2
和TIME_WAIT
。
因此,ESTABLISHED
标签表示TCP连接处于ESTABLISHED
状态。处于已建立状态意味着两个主机都成功完成了TCP 3次握手(并且这样做,从SYN_SENT
转换为ESTABLISHED
)。当客户端将TCP CLOSED
请求发送到服务器时,会发生从SYN_SENT
到SYN
的转换。
在已建立的连接中,双方都发送和接收应用程序特定数据。基本上,建立会话并在两个终端系统之间流动双向字节流。
TCP套接字由4元组(source-ip, source-port, destination-ip, destination-port)
唯一标识。 IP标识终端系统的网络接口,端口号用于复用和解复用到达该网络接口的数据包(以便目标系统知道将数据包传送到哪个服务)。这就是IP:PORT
字段的含义。
我不确定为什么你有两个相同连接的条目。这可能是系统相关的,虽然它很奇怪(在我的系统中,每个插槽只有一个条目)。但套接字是双向的,因此您的系统可能会将每个数据包流方向显示为一个不同的条目。这可能还取决于系统如何实现套接字。
答案 1 :(得分:1)
ESTABLISHED
表示TCP连接已完成3次握手。 (不确定是否必须调用accept
)。请参阅TCP state diagram。
为什么我有一个IP:PORT指向另一个IP:PORT然后返回
这意味着您的进程中打开了两个TCP套接字。最有可能的是,一个侦听端口9092,另一个侦听从端口57633连接到侦听套接字。端口57633属于ephemeral port range,即操作系统自动分配给调用connect
但未调用bind
以分配特定端口的套接字的端口范围。