端口不通

82 阅读3分钟

背景

和前端联调的时候,让前端调用我本地服务的时候,发现调不通。 然后就开启了一系列魔幻之旅了……

解决思路

1. ping

喊前端ping我的ip,这一步是ok的。

2. telnet

喊前端telnet我的ip和端口,这一步也是ok的。

额……陷入僵局了……,这咋整……

请外援

喊运维帮我们看看这是什么情况。

运维解决的方法也是先ping,再telnet,最后来了个curl 调用接口。

image.png

从图中我们可以看见,已经建立连接了并且将请求发送到我的电脑上了,可是我电脑没有给返回,连接还被重置了!!!

自己定位电脑上的问题

经过上面的排查,发现问题出现在我的电脑上。

排查其它端口是否正常

启了另一个服务,喊我同事调用,看看能不能调用的通。

结果是正常的。

查看监听8080的进程

netstat -anot|find "8080"

image.png

what fuck ???

为啥又两个进程6172和91324同时监听了我ipv4上的8080端口???

我启动的时候还不报端口冲突?

查看这两个进程到底是啥

最后发现一个是我的目标进程:91324

另外一个:6172 是vm nat 相关进程

image.png

也可以用命令形式在终端看

tasklist /fi "pid eq 6172"

tasklist /fi "pid eq 91324"

VMware Nat service

这到底是个什么东西?

这是我之前本地装的虚拟机,然后虚拟机用nat进行端口转发到宿主机上的端口。

没想到配置了这个之后,竟然不启动虚拟机也会起个进程监听我的端口。

解决方案

我用的是VMware,其它的软件自行做相应适配。

VMware NAT 服务使用的端口是在虚拟网络配置中设置的,可通过以下步骤修改:

  1. 打开虚拟网络编辑器:在 VMware 软件中,依次点击 “编辑” - “虚拟网络编辑器”。
  2. 选择 NAT 网络:在虚拟网络编辑器中,选择使用 NAT 模式的网络(通常是 VMnet8)。
  3. 点击 NAT 设置:在选中的网络设置区域,点击 “NAT 设置” 按钮。
  4. 修改端口转发规则:在 “NAT 设置” 窗口中,你可以看到端口转发规则列表。要修改现有规则的端口,选择相应规则后点击 “编辑”;要添加新的端口映射,点击 “添加”。在规则设置中,你可以修改主机端口(即宿主机上用于转发的端口)和虚拟机端口(即虚拟机内部服务监听的端口)。
  5. 保存设置:完成修改后,点击 “确定” 保存设置。

总结

联调过程不顺利,然后逐步排查原因,最后找到根本原因是由于vm net 服务占用了端口号。