在 netstat 输出中区分 TCP 服务器和客户端

在 netstat 输出中区分 TCP 服务器和客户端

我在客户端进程和服务器进程之间有一个套接字连接,两者都在我的计算机上运行。连接显示有两个条目,如下所示:

sudo netstat -ntp | grep 56442
tcp        1      0 127.0.0.1:56442         127.0.0.1:8002          CLOSE_WAIT  8276/python
tcp        0      0 127.0.0.1:8002          127.0.0.1:56442         FIN_WAIT2   -

在这种情况下我怎样才能知道哪个是服务器?

我知道 TCP 服务器正在 port 上运行8002,并且客户端从 port 连接到侦听服务器56442

我试图通过查看netstat输出条目来找出区分服务器和客户端的方法。

为什么当套接字处于FIN_WAIT2状态时不出现进程 ID/描述?

答案1

如果运行时netstat不带grep,您将看到中心左侧的列具有“本地地址”之类的标题,中心右侧的列具有“外部地址”之类的标题。显示包含服务器端口号的本地地址的行是服务器。

如果您同时启动两个客户端进程然后运行,您可能会对此有更好的感觉

sudo netstat -ntp | grep -E "Address|8002"

当套接字处于FIN_WAIT2状态时,为什么进程 ID/描述没有出现?

可能是因为进程已经终止;毕竟,FIN代表“完成”或“最终”。FIN 数据包和FIN_状态与关闭(关闭)TCP 连接有关,这通常仅在进程完成时发生(并且当一个或两个进程死亡时会自动发生)。套接字可以在打开它的进程消失后在系统中停留一段时间。同样,您可能可以通过netstat 在两个进程都正常的情况下运行,然后观察它们关闭时它如何变化来更好地理解这一点。

答案2

我相信netstat -ntp只会显示客户端(非监听)套接字本地地址柱子。

-l标志应该导致netstat仅列出服务器(侦听)套接字,并且-a你应该两者都得到,然后你可以根据状态s。

相关内容