为啥当我用一个tcp客户端和指定一个不存在的端口去连接任意一台已知已经启动的主机后,并不能得到ECONNREFUSED这个错误呢?但是当我同样访问我自身机器上的一个不存在的服务端口后,立刻就返回ECONNREFUSED错误了,这是什么原因?
如果两台机器运行在同一个局域网,则客户端访问服务器一个不存在的端口时,服务器返回的RST分段会立刻让客户端的connect调用返回ECONNREFUSED错误,但是当客户端位于NAT之后的话,当访问服务器一个不存在的端口时,服务器虽然仍返回RST,但是客户端的connect却并不立刻返回ECONNREFUSED错误了,而是持续发送SYN,直到超时发生后,最终返回ETIMEDOUT错误,这样做的理由是什么?
重点:ECONNREFUSED错误这是个连接被服务器拒绝,为啥呢,是端口不存在的原因,换一个端口就好了。