TCP源端口复用的实验困惑及原理咨询
TCP源端口复用的实验困惑及原理咨询
我之前一直对TCP连接有个误解:觉得源端口是独占的,不管目标地址是谁,一个本地源端口只能对应一个连接,比如本地的12345端口最多只能建立1条连接。
不过最近我了解到,TCP连接其实是由**<源IP, 源端口, 目标IP, 目标端口>**这个四元组来唯一标识的,还看到这么一段说明:
TCP allows source port sharing across multiple processes, but each process requires a free port to bind to for its connection
这让我琢磨着,所谓“跨进程共享源端口”,应该是指同一个源端口可以用来连接不同的目标地址吧?
于是我动手做了个实验验证:
先在一个shell窗口里执行这条命令:
nc -v -p 12345 google.com 80
这条命令成功运行了(-v是verbose模式,加-p是特意指定源端口为12345,就是为了测试这个问题)。
接着我在另一个shell窗口里同时运行这条命令:
nc -v -p 12345 github.com 80
结果却直接失败了,报错信息是:
nc: connectx to github.com port 80 (tcp) f...
我现在有点懵了,按道理这两个连接的四元组是不一样的(目标IP肯定不同,虽然目标端口都是80,但整体四元组是唯一的),为什么第二个连接建立不起来呢?有没有大佬能帮忙解释下这个问题?
备注:内容来源于stack exchange,提问作者doc_id




