【问题标题】:information in tcp packages. How to know destination?tcp 包中的信息。如何知道目的地?
【发布时间】:2018-07-16 17:55:25
【问题描述】:

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

另外,如果有几个浏览器,我知道所有发往它们的包都带有80端口。你怎么知道哪些是打算的?

谢谢

【问题讨论】:

    标签: network-programming network-protocols tcp-ip


    【解决方案1】:

    TCP 连接由以下元组标识:Source Ip、Destination Ip、Source Port、Destination Port

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

    【讨论】:

      【解决方案2】:

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

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

      但我不明白浏览器如何从所有网络流量中知道哪些包是发往哪个选项卡的。

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

      另外,如果有多个浏览器,我知道所有发往它们的包都带有80端口。

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

      你怎么知道哪些是预期的?

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

      【讨论】:

      • 感谢您的回复。无论如何,如果没有在防火墙中打开浏览器的端口,怎么可能接收到浏览器的传入连接?
      • @Alberto 没有“浏览器的传入连接”之类的东西。浏览器形成 出站 连接,这些连接在 服务器 处传入。你在这里所说的大部分内容都是从头到尾的。
      【解决方案3】:

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

      【讨论】:

      • 是的,并且在端口上打开了socket,所以是一样的。
      • 不一样。客户端不关心端口。它只有插座。 Sockets API 提供了一个从 socket 读取的recv() 方法。不是港口。
      • “每个浏览器标签都是一个客户端”的说法与事实相去甚远。每个选项卡可以形成多个连接,这些连接可以在多个选项卡之间汇集和共享。
      • @EJP 你太深入细节了。我只是想指出误解的原因:80 - 是服务器端口,而不是客户端。
      • 您所要做的就是在您的答案中将“端口”更改为“套接字”,那么它将是正确的。我不知道你为什么这么抗拒正确。
      猜你喜欢
      • 2015-09-08
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2012-09-26
      • 2012-10-16
      相关资源
      最近更新 更多