為啥當我用一個tcp客戶端和指定一個不存在的端口去連接任意一臺已知已經(jīng)啟動的主機后,并不能得到ECONNREFUSED這個錯誤呢?但是當我同樣訪問我自身機器上的一個不存在的服務端口后,立刻就返回ECONNREFUSED錯誤了,這是什么原因?
如果兩臺機器運行在同一個局域網(wǎng),則客戶端訪問服務器一個不存在的端口時士修,服務器返回的RST分段會立刻讓客戶端的connect調(diào)用返回ECONNREFUSED錯誤,但是當客戶端位于NAT之后的話樱衷,當訪問服務器一個不存在的端口時棋嘲,服務器雖然仍返回RST,但是客戶端的connect卻并不立刻返回ECONNREFUSED錯誤了矩桂,而是持續(xù)發(fā)送SYN沸移,直到超時發(fā)生后,最終返回ETIMEDOUT錯誤侄榴,這樣做的理由是什么?
重點:ECONNREFUSED錯誤這是個連接被服務器拒絕雹锣,為啥呢,是端口不存在的原因癞蚕,換一個端口就好了蕊爵。