假设有一个 Web 服务器公开具有两个端点的端口 80,一个用于返回数据集 A,另一个用于返回数据集 B。
我有一个执行多线程的应用程序,因此我可能会并行发送两个请求,请求A以访问数据集A,请求B以并行访问数据集B。
根据我对TCP的理解是:
两个主机之间的 TCP 连接由以下 5 元组唯一标识:
由以下 5 元组唯一标识:
协议(UDP、TCP)
主机 A 的 IP 地址。
主机 A 的端口号。
主机 B 的 IP 地址。
主机 B 的端口号。
在我的例子中,源的 ip 地址和端口号与服务器相同
这会给 TCP 造成混乱吗?假设 requestA 已经与服务器建立了三次握手,并且 requestA 正在发送请求数据,然后请求启动并向服务器发送 Syn,TCP 会不会感到困惑,“我们只是同意互相发送数据,为什么你请求再次与我连接”?
答案1
您的客户端进程未指定其连接请求将“来自”哪个本地 TCP 端口号。其本地 TCP 堆栈只会自动为每个此类新连接尝试分配一个来自临时端口范围(49152 及以上)的空闲端口号。因此,为数据集 B 的请求设置的 TCP 连接将具有与数据集 A 的现有 TCP 连接不同的源端口号,这就是使其成为不同的 TCP 连接的原因。
即使这一切都是往返于本地主机,也将会是两个连接:
127.0.0.1:49152<--> 127.0.0.1:80
127.0.0.1:49153<--> 127.0.0.1:80