http - HTTP请求中不同的TCP连接是如何识别的?

标签 http tcp sockets xmlhttprequest

据我了解,每个 HTTP 请求都使用自己的 TCP 连接(如果我错了,请纠正我)。因此,假设有两个当前连接到同一台服务器。例如,客户端 javascript 代码使用 XMLHttpRequest 对象触发几个 AJAX POST 请求,一个接一个,然后才获得对第一个请求的响应。所以我们谈论的是到同一台服务器的两个连接,每个连接都在等待响应,以便将其路由到每个单独的回调函数。

现在我不明白的是:TCP 数据包包括源和目标 ip 和端口,但是这两个连接不会具有相同的源和目标 ip 地址以及端口 80 吗?如何区分数据包并将其路由到适当的位置?它与每个连接不同的数据包序列号有什么关系吗?

最佳答案

当您的浏览器创建到 HTTP 服务器的新连接时,它会使用不同的源端口。

例如,假设您的浏览器创建了两个到服务器的连接,并且您的 IP 地址是 60.12.34.56。第一个连接可能来自源端口 60123,第二个连接来自 60127。这嵌入在发送到服务器的每个数据包的 TCP header 中。当服务器回复每个连接时,它会使用适当的端口(例如 60123 或 60127),以便数据包返回正确的位置。

了解这一点的最佳方式之一是下载 Wireshark并观察您自己网络上的流量。它会向您展示这一点以及更多内容。

此外,这还可以深入了解网络地址转换 (NAT) 如何在路由器上工作。您可以让多台计算机共享相同的 IP 地址,路由器将重写请求以使用不同的端口,以便两台计算机可以同时连接到 AOL Instant Messenger 等地方。

关于http - HTTP请求中不同的TCP连接是如何识别的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037960/

相关文章:

java - 如何用缓存数据初始化redis

javascript - 如何在nodejs url解析中包含端口

http - 直接访问 URL 时 onPageFinished 需要 2 分钟以上

python-3.x - 使用 VB.Net 通过 TCP 发送文件并使用 Python3.6 中的 Socket 接收时出现文件编码错误

Java TCP Socket - 向 Controller 发送命令

rest - 当 PUT 是空操作时,HTTP 服务器应该返回 200 吗?

tcp - 如何处理 TcpStream 上的并行读取和写入?

c++ - 将套接字重新绑定(bind)到不同的接口(interface)

java - 将服务器客户端多人游戏部署到heroku

c++ - 将结构转换为要传递给 UDP 的通用消息格式