TCP / IP和HTTP如何协同工作?

时间:2017-10-17 16:00:52

标签: http networking tcp

我正在和Wireshark一起调试我正在研究的一些IoT家庭自动化项目。我想我会更多地了解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等的字节?

1 个答案:

答案 0 :(得分:6)

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

  • 应用层可以有自己的协议,例如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,帧中继等)正在携带它。

您的Web浏览器使用HTTP来传达它与Web服务器之间的数据(HTML)。 HTTP使用TCP将其传输到Web服务器。 Web浏览器将请求TCP为其分配TCP地址(端口)。 Web服务器可能使用众所周知的TCP端口80进行HTTP,并且TCP将来自应用程序的数据流分段为TCP段(不要将其与IPv4碎片混淆)。 TCP将在Web服务器的操作系统上创建与TCP的连接,并且TCP保证段将到达,并且提供给目标应用程序的数据将按顺序完成。

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

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

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