在我的一个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主机。
此连接在三个小时后仍然可见,因此我认为它与超时无关。
答案 0 :(得分: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计算机设置可以在其中发送数据包的套接字没有意义。