【问题标题】:How do TCP/IP and HTTP work together?TCP/IP 和 HTTP 如何协同工作?
【发布时间】:2018-03-29 09:32:30
【问题描述】:

我正在使用 Wireshark 来调试我正在从事的一些物联网家庭自动化项目。我想我会从更多地了解 HTTP 和 TCP/IP 如何实际工作中受益。我发现的大多数解释都将 HTTP 描述为“骑在”TCP/IP 之上,但我更具体地询问了实际发送的内容。

这是我捕获的客户端/服务器交互示例:

Client: [SYN]
Server: [SYN, ACK]
Client: [ACK]

如果我了解到目前为止,他们现在已经成功建立了 TCP 连接。但是,下一个捕获向我展示了

Client: POST /whatever
Server: 200 OK

好吧,现在我迷路了。检查该捕获显示我在一帧中具有以太网、IP、TCP 和 HTTP 层。它实际上就像客户端在 TCP 数据包结束后添加一堆文本并将这些额外的字节喷射到路由器一样简单吗?大概是哪个解析出 TCP/IP 并相应地转发它?这是我困惑的根源。 “骑在上面”是否意味着(在物理意义上)HTTP 只是在 TCP 数据包之后在同一帧中发送的一系列字节?这种情况下的 HTTP 是否被认为是 TCP/IP 的负载?

当然要完成

Server: [FIN, ACK]
Client: [ACK]
Client: [FIN, ACK]
Server: [ACK]
//In this case the server terminates the connection.

编辑:下面的评论者提出了一个问题,这让我感觉好像我并不清楚我在问什么。

想象一下我可以站在我的客户端和服务器之间(或者站在我的客户端和路由器之间以及再次站在路由器和服务器之间可能更准确)。忽略必须通过物理介质(校验和、纠错码等)物理发送原始数据时的考虑因素,相对于时间,实际流量会是什么样子?我会看到以太网层的字节,然后是 ip 层、tcp、http 等的字节吗?

【问题讨论】:

  • HTTP 只是 TCP 的数据,但我不知道你为什么一直说“ TCP 数据包之后”。通过 TCP 发送的数据在 TCP 数据包中发送。
  • 我的意思是,在某些时候,我的客户端(传感器)只是通过无线方式向路由器发送一个字节流。路由器解释这些再见并对它们做一些事情(将它们转发到服务器)。该字节流可以以某种有用的方式进行解释。如果您要在从传感器天线发出的字节流中一次检查一个字节,它会不会看起来像 [Ethernet][IP][TCP][HTTP]? (当然,我认为有很多纠错码、校验和等除外)
  • 如果您从天线发送,它将是 Wi-Fi,并且帧将是 Wi-Fi 帧,而不是以太网帧。 Wi-Fi 和以太网是两种完全不同的数据链路协议。
  • 好吧,那么我对所有这些协议如何协同工作有一些基本的误解。我正在查看的wireshark捕获都是在WiFI接口上捕获的,但显示“封装类型:以太网”。我试图询问发送的是什么,而忽略了实际的媒介。 IE。所有这些 TCP/IP 和 HTTP 数据仍然需要到达路由器,对吗?我不太关心这是通过以太网电缆还是 WiFi 完成的,而是它到达那里时的样子。
  • 到达路由器物理接口的是帧。路由器本身看到的是数据包,因为它剥离了帧。我在回答中解释了这一点。根据目标第 3 层地址,路由器将数据包发送到不同的接口,并为下一个网络构建一个帧,该网络可以使用完全不同的第 1/2 层协议。

标签: http networking tcp


【解决方案1】:

网络层使用抽象和封装。较低的层封装了较高的层。

  • 应用层可以有自己的协议,例如HTTP。 HTTP 与目标设备上的 HTTP 通信,它是一种协议 传输应用程序数据 (HTML)。
  • 传输层(第 4 层)封装应用程序数据报, 它使用相同的传输层协议进行通信 目标设备。一些传输协议有保证并创建 连接可靠性,例如TCP(段),但有些是 没有任何保证的无连接,例如UDP(数据报)。目的 这一层是从一个应用程序获取应用程序数据到 另一个应用程序。一些传输协议使用寻址(端口) 为了实现这一点,有些人使用其他东西,或者根本不使用。
  • 网络层将传输协议数据报封装成 数据包,它与目标设备网络协议进行通信。 这一层的目的是从一个设备上获取数据包 网络连接到另一个网络上的设备。路由器使用寻址 数据包标头中的信息以完成此操作(IPv4、IPX、 IPv6、AppleTalk 等地址)。
  • 数据链路层将网络数据包封装成帧,并且 它与同一网络上的设备的数据链路进行通信。 该层的目的是获取帧到另一个设备上 同一网络(PC 打印机、路由器等)。一些数据链路协议 使用寻址(IEEE 协议使用 MAC 寻址,48 位或 64 位 MAC 地址),一些使用其他地址(帧中继使用 DLCI、ATM 使用 VPI/VCI 等),有些不使用寻址(仅 PPP 有两个设备,因此不需要寻址)。协议可以改变 因为封装的数据包从一个网络发送到另一个网络 在前往目标设备的途中。路由器剥离框架并 当他们将数据包从一个网络转发到另一个网络时丢弃它, 创建一个新帧来封装新网络的数据包。
  • 物理层(第 1 层)转换数据链路的帧 层(第 2 层)进入“线上的位”。

目标设备执行与上述相反的操作,将应用程序数据传递给目标应用程序。

由于每一层都有抽象和封装,你可以在不同的层混合搭配不同的协议。例如,以太网可以承载任意数量的网络协议(IPv4、IPX、IPv6、AppleTalk 等),而无需知道或关心以太网帧的有效负载中的内容。相反,IP 不知道也不关心承载它的数据链路协议(以太网、Wi-Fi、令牌环、PPP、帧中继等)。

您的网络浏览器使用 HTTP 在它和网络服务器之间传递数据 (HTML)。 HTTP 使用 TCP 将其传输到 Web 服务器。 Web 浏览器将请求 TCP 为其分配一个 TCP 地址(端口)。 Web 服务器可能使用众所周知的 TCP 端口 80 进行 HTTP,并且 TCP 会将来自应用程序的数据流分段为 TCP 分段(不要将这与 IPv4 分段混淆)。 TCP 将在 Web 服务器的 OS 上创建与 TCP 的连接,TCP 保证分段将到达,并且呈现给目标应用程序的数据将完整且有序。

TCP 理论上可以使用任何网络层协议,但实际上它只使用 IPv4 或 IPv6。 IP 会将 TCP 段封装成 IP 数据包。

IP 将使用发送数据包的接口的数据链路协议。在 PC 上,这很可能是以太网或 Wi-Fi,但也可以是 PPP 之类的其他东西。数据链路协议将数据包封装成数据链路协议的帧。每个数据链路协议都有不同的帧格式。如果目标设备在同一网络上,则帧将被寻址并直接传送到目标。如果目标位于不同的网络上,则会将帧寻址并传送到源操作系统中配置的网关(路由器)。

接口将对帧中的位进行编码,并在接口的介质上发出信号。

【讨论】:

  • 感谢您提供如此详细的答案。它有很大帮助。为了确认我理解正确,理论上可能是我的 HTTP POST 被分成几个 TCP 段,然后由较低层封装、发送并在服务器上重建。即,当服务器的传输层软件确定已接收到所有特定会话的 TCP 数据包时,会从这些段重构 HTTP 并将其传递给相关应用程序?
  • 是的。但请记住,HTTP 也是一种用于传输应用程序数据的协议。它传输的应用程序数据实际上是 HTML。
  • 对,这是有道理的。然后因为每一层都与其他层无关,这种架构可以轻松地将 HTTP 替换为 FTP 或 SSH,而无需在底层设计任何新的东西来交付它们。与您通过以太网或 wifi 进行通信的方式完全相同,而无需更改上述任何层。
猜你喜欢
  • 2016-03-12
  • 1970-01-01
  • 2012-02-05
  • 2021-12-09
  • 2019-04-21
  • 2014-08-05
  • 2020-01-14
  • 2012-12-21
  • 2013-01-19
相关资源
最近更新 更多