【发布时间】:2010-10-27 22:35:03
【问题描述】:
当诸如网络服务器之类的应用程序向网络浏览器发送 HTTP 数据时,浏览器如何知道它何时收到了所有数据,以便它可以开始使用它而不是等待更多? TCP 没有在任何地方指定分段消息的大小。
现在我认为这取决于应用程序层,例如 HTTP 的 Content-Length 标头。但似乎即使是该标头也可以拆分为第二个或第三个数据包。
【问题讨论】:
标签: networking tcp
当诸如网络服务器之类的应用程序向网络浏览器发送 HTTP 数据时,浏览器如何知道它何时收到了所有数据,以便它可以开始使用它而不是等待更多? TCP 没有在任何地方指定分段消息的大小。
现在我认为这取决于应用程序层,例如 HTTP 的 Content-Length 标头。但似乎即使是该标头也可以拆分为第二个或第三个数据包。
【问题讨论】:
标签: networking tcp
TCP/IP 是一种面向连接的协议。因此,当浏览器使用 TCP/IP 执行 HTTP 连接时,网络堆栈保证流将按照发送者预期的顺序到达。
因此,在处理 TCP 时,没有 数据包 的概念。 TCP 是通过套接字到达的有序字节流。根本不需要担心数据包。这就是协议栈的美妙之处:每一层都做自己的工作,并将其上一层抽象出它所解决的问题的潜在复杂性。
【讨论】:
确实是内容长度,除非客户端读取直到由于另一端关闭连接而获得文件结束指示。当然,在 HTTP 中,'RSVP',所以这不会发生。
没有内容长度,它必须在内容中寻找</html> 或其他一些分隔符。浏览器根本看不到数据包。连接看起来像一个流,没有边界,由两端来制定协议。
【讨论】: