![我们如何跟踪服务器中的 TCP/IP 数据包](https://linux22.com/image/14732/%E6%88%91%E4%BB%AC%E5%A6%82%E4%BD%95%E8%B7%9F%E8%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%9A%84%20TCP%2FIP%20%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我正在开发后端服务。后端包含一些进程,意味着当客户端向我的服务器发送请求时,该请求将经过这些进程。
例如,请求将首先发送到进程nginx
,然后发送到进程http_proxy
,然后发送到进程request_handler
。
我需要做的是跟踪请求的路径,如下所示:
req ---> nginx:8888
nginx:4444 ---> http_proxy:7777
http_proxy:2222 ---> request_handler:6666
意思是通过该端口req
向该进程发送另一个数据包,并从该端口向该端口发送另一个数据包,以便该进程接收到该数据包,然后,从该端口向该端口发送另一个数据包,以便该进程接收到该数据包通过过程。nginx
8888
nginx
4444
7777
http_proxy
http_proxy
2222
6666
request_handler
看来不是这样,netstat
并且lsof
可以做我需要的事情。有什么方法或工具可以做到这一点吗?
答案1
很遗憾地说,您要么需要更好地理解 TCP/IP,要么根本不需要 TCP/IP。
应用程序日志记录可能是您问题的答案,但这取决于您的应用程序。
你写“nginx
从端口发送另一个数据包4444
到端口7777
”。我很确定它不是从固定端口发送的。这样做会将“并发”请求限制为一个。此外,一个请求不是一个数据包,而是多个数据包,查看网络详细信息通常对于处理应用程序级别的问题没有用处。
如果您想查看 TCP/IP 数据包,该工具是tcpdump
, 而不是netstat
或lsof
。