Network programming tcp包中的信息。如何知道目的地?

Network programming tcp包中的信息。如何知道目的地?,network-programming,network-protocols,tcp-ip,Network Programming,Network Protocols,Tcp Ip,假设我们有一个打开了几个选项卡的web浏览器,并且正在使用它们。 所有TCP数据包都将到达目标端口80,但我不明白浏览器如何从所有网络流量中知道哪些数据包将发送到哪个选项卡 更重要的是,如果有几个浏览器,我知道所有指定给它们的包都带有端口80。你怎么知道哪些是你想要的 TCP连接由以下元组标识:源Ip、目标Ip、源端口、目标端口 浏览器打开的每个连接可能都有相同的目标ip和端口(例如www.google.com port 80),但每个连接都有一个唯一的源端口号。80端口通常在服务器端使用。每个

假设我们有一个打开了几个选项卡的web浏览器,并且正在使用它们。 所有TCP数据包都将到达目标端口80,但我不明白浏览器如何从所有网络流量中知道哪些数据包将发送到哪个选项卡

更重要的是,如果有几个浏览器,我知道所有指定给它们的包都带有端口80。你怎么知道哪些是你想要的


TCP连接由以下元组标识:源Ip、目标Ip、源端口、目标端口


浏览器打开的每个连接可能都有相同的目标ip和端口(例如www.google.com port 80),但每个连接都有一个唯一的源端口号。

80端口通常在服务器端使用。每个浏览器选项卡都是客户端,而不是服务器,并且使用不同的端口号。 客户端从这个“自己的本地”端口读取数据,而不是直接从服务器的80端口读取数据

假设我们有一个打开了几个选项卡的web浏览器,并且正在使用它们。所有TCP数据包都将到达目标端口80

不,他们不会。它们将从服务器到达源端口为80的浏览器,但每个连接在客户端主机上都有不同的本地端口号

但我不明白浏览器怎么能从所有的网络流量中知道哪些软件包是为哪个标签设计的

它不必知道。它所要做的就是通过插座从各种连接中读取数据。解复用到各个本地端口是TCP的工作,而不是浏览器的工作

更重要的是,如果有几个浏览器,我知道所有指定给它们的包都带有端口80

又错了。它们带有源端口80,以及不同的目标端口

你怎么知道哪些是你想要的


同样的答案。他们没有。TCP有。

是的,套接字在端口上打开,所以它是相同的。它不一样。客户端不关心端口。它只有一个插座。Sockets API提供了从套接字读取的
recv()
方法。不是端口。而且“每个浏览器选项卡都是客户端”的说法与事实相差甚远。每个选项卡可能会形成多个连接,这些连接可能会在多个选项卡之间共享。@EJP您对细节的关注太深了。我只想指出误解的原因:80-是服务器端口,而不是客户端。你所要做的就是在你的答案中将“端口”改为“套接字”,那么它就正确了。我不知道你为什么如此抗拒正确。谢谢你的回答。无论如何,如果浏览器的端口没有在防火墙中打开,怎么可能接收到浏览器的传入连接?@Alberto没有所谓的“浏览器传入连接”。浏览器形成出站连接,这些连接在服务器上传入。你在这里说的大部分话都是背对背的。