【问题标题】:What does the ESTABLISHED indicator mean after running lsof运行lsof后ESTABLISHED指标是什么意思
【发布时间】:2015-06-19 21:11:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux network-programming lsof


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 反对者介意解释吗?我很想知道我的回答有什么问题。
    • 我对您的回答投了反对票,因为您写了很多琐事,但未能解释观察结果。您的答案归结为我不确定为什么您有两个条目用于同一连接。这是一个无答案的答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 哼,你确定这两个条目都标识了不同的套接字吗?我认为这是同一个套接字出现两次。我的意思是,如果你有一个套接字HostA:PortA -> HostB:PortB,那么你就不能有一个 distinct 套接字HostB:PortB -> HostA:PortAHostA 如何区分针对PortA 的流量并将其传递到正确的套接字?这是不可能的 - 我认为这只是 lsof 在同一个套接字中显示每个流向的不同条目。
    • @FilipeGonçalves 我敢肯定。两次不是同一个socket。第一个 addr:port 是本地地址,第二个 addr:port 是远程地址。
    • 不能是两个socket。您确实注意到 IP 始终相同,不是吗?您不能在同一系统中拥有两个具有相同(源 ip、源端口、目标 ip、目标端口)组合的套接字。这是 TCP 如何复用段的基础知识。
    • 另外:accept(2) 在这里并不重要。我们调用accept(2) 的套接字始终处于LISTEN 状态,它是accept(2) 返回的new 套接字,最终从SYN_RCVD 转换为ESTABLISHED。所以我不明白你为什么在回答中提到accept(2)
    • @FilipeGonçalves 从accept 返回的套接字在ESTABLISHED 中声明,即accept 永远不会返回未完成3 次握手的套接字。 (TCP Fast open 不同)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2011-10-12
    • 2017-06-30
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多