【问题标题】:linux tcp connection established on client, invisible on server在客户端建立的linux tcp连接,在服务器上不可见
【发布时间】:2014-01-13 14:41:51
【问题描述】:

在我的一个 linux 主机上,一个 tcp 套接字似乎在一侧可见,而在另一侧不可见。我的意思是当我在其中一个主机上时 netstat 显示这个套接字,而不是当我在另一个主机上时(Linux 也是):

# netstat -anp|grep 37674
udp        0      0 169.254.192.2:37674         169.254.192.1:8649          ESTABLISHED 22644/xxxxx
# ssh 169.254.192.1
Last login: Mon Jan 13 15:22:54 CET 2014 from xxxxxx on ssh
# netstat -anp|grep 8649
# 

如果我没有正确理解,netstat 会从 /proc/net/tcp 读取连接。显然,本地 ip 地址和端口在第二列的 /proc/net/tcp 中以 0123ABCD:1234 给出。

37674(10) = 932A(16)

因此,我尝试在/proc/net/tcp 中查找932A,忽略大小写但一无所获。

IP 地址不会被截断,因为我的网络上没有其他 169.254.192.1xx 主机。

这个连接在三个小时后仍然可见,因此我认为它与超时无关。

【问题讨论】:

    标签: linux tcp connection netstat


    【解决方案1】:

    netstat 的输出显示 UDP。 (查看/proc/net/udp)

    这意味着 169.254.192.2 已调用 connect() 到 169.254.192.1:8649。然而 UDP 是无连接的,所以这个信息只是本地记录在 169.254.192.2 机器上的套接字上。

    在 UDP 套接字上调用 connect() 只允许您在该套接字上调用 send(),而无需使用 sendto()/sendmsg() 指定每个数据包的目标地址 - 两台机器之间没有创建实际连接。

    如果 169.254.192.1 机器没有在 8649 端口监听/接收数据包,那么 169.254.192.1 机器设置一个可以在那里发送数据包的套接字是没有意义的。

    【讨论】:

    • 63: 02C0FEA9:932A 01C0FEA9:21C9 01 00000000:00000000 00:00000000 00000000 0 0 1409684718 2 ffff880c2364a880 0
    • 你是对的...我确定是 tcp 连接,抱歉...(我想我需要睡觉...)谢谢!
    • 不过,我在主机 a 上有另一个连接,状态如下:
    • 尽管如此,我在主机 a 上有另一个连接,状态如下:tcp 0 0 ::ffff:169.254.200.2:30113 ::ffff:169.254.200.1:55816 ESTABLISHED 21719/xxxxxxx 并且在主机 b "netstat -anp |grep 55816" 在 169.254.200.1 上不返回任何内容
    • @yohann.martineau 如果 TCP 连接空闲,并且 169.254.200.1 重新启动或类似情况,则可能会发生这种情况。如果没有任何东西写入 TCP 连接,169.254.200.2 永远不会知道已经消失。
    猜你喜欢
    • 2021-11-06
    • 2013-05-07
    • 2013-06-06
    • 1970-01-01
    • 2021-08-12
    • 2017-03-16
    • 2013-09-08
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多