【发布时间】:2018-07-16 17:55:25
【问题描述】:
假设我们有一个打开了多个选项卡的网络浏览器,并且我们正在使用它们。 所有 TCP 数据包都将通过目标端口 80 到达,但我不明白浏览器如何从所有网络流量中知道哪些数据包发往哪个选项卡。
另外,如果有几个浏览器,我知道所有发往它们的包都带有80端口。你怎么知道哪些是打算的?
谢谢
【问题讨论】:
标签: network-programming network-protocols tcp-ip
假设我们有一个打开了多个选项卡的网络浏览器,并且我们正在使用它们。 所有 TCP 数据包都将通过目标端口 80 到达,但我不明白浏览器如何从所有网络流量中知道哪些数据包发往哪个选项卡。
另外,如果有几个浏览器,我知道所有发往它们的包都带有80端口。你怎么知道哪些是打算的?
谢谢
【问题讨论】:
标签: network-programming network-protocols tcp-ip
TCP 连接由以下元组标识:Source Ip、Destination Ip、Source Port、Destination Port
浏览器打开的每个连接可能具有相同的目标 ip 和端口(例如 www.google.com 端口 80),但每个连接都有一个唯一的源端口号。
【讨论】:
假设我们有一个打开了多个选项卡的网络浏览器,并且我们正在使用它们。所有 TCP 数据包都将通过目标端口 80 到达
不,他们不会。它们将从服务器以 source 端口 80 到达浏览器,但每个连接在客户端主机上都有不同的本地端口号。
但我不明白浏览器如何从所有网络流量中知道哪些包是发往哪个选项卡的。
它不必知道。它所要做的就是通过它们的套接字从它的各种连接中读取。解复用到各个本地端口是 TCP 的工作,而不是浏览器的工作。
另外,如果有多个浏览器,我知道所有发往它们的包都带有80端口。
又错了。它们带有源端口 80,以及不同的目标端口。
你怎么知道哪些是预期的?
同样的答案。他们没有。 TCP 可以。
【讨论】:
80 端口通常用于服务器端。每个浏览器选项卡都是客户端,而不是服务器,并且使用不同的端口号。 客户端从这个“自己的本地”端口读取数据,而不是直接从服务器的 80 读取数据。
【讨论】:
recv() 方法。不是港口。