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

TCP/IP和HTTP如何协同工作?,http,networking,tcp,Http,Networking,Tcp,我正在和Wireshark一起调试我正在进行的一些物联网家庭自动化项目。我想如果我能更多地了解HTTP和TCP/IP是如何工作的,我会受益匪浅。我找到的大多数解释都将HTTP描述为“凌驾于”TCP/IP之上,但我要更具体地询问实际发送的内容 下面是我捕获的客户机/服务器交互示例: Client: [SYN] Server: [SYN, ACK] Client: [ACK] 如果我了解到目前为止,他们已经成功地建立了TCP连接。不过,下一个截图显示的是我 Client: POST /whatev

我正在和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。超文本传输协议 与目标设备上的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将使用发送数据包的接口的数据链路协议。在个人电脑上,这很可能是以太网或Wi-Fi,但也可能是PPP之类的东西。数据链路协议将数据包封装到数据链路协议的帧中。每个数据链路协议都有不同的帧格式。如果目标设备位于同一网络上,则帧被寻址并直接传送到目标。如果目标位于不同的网络上,则帧被寻址并传送到源操作系统中配置的网关(路由器)

接口将在接口介质上对帧和信号中的位进行编码。

HTTP只是