You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动