【发布时间】: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