我正在和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等的字节?
答案 0 :(得分:6)
网络层使用抽象和封装。较低层封装较高层。
目标设备执行与上述相反的操作,将应用程序数据传送到目标应用程序。
由于每层的抽象和封装,您可以在不同的层混合和匹配不同的协议。例如,以太网可以承载任何数量的网络协议(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中配置的网关(路由器)。
接口将对帧中的位进行编码,并在接口的介质上发出信号。