重组TCP流的一些问题

时间:2011-09-14 05:38:46

标签: http tcp

我正在实施一个IPS系统,在观察线束重组的TCP流程时,我有点困惑。

例如,服务器将HTML页面传输到客户端。该页面分为4个部分,并由TCP数据包封装。然后,服务器将另外4个TCP数据包推送到客户端以获取JavaScript文本。

我的问题是,我知道我可以通过测量它们的Seq和Len来确定它们的序列,但是如何确定HTML文本的结尾?我怎么知道HTML包含4个TCP数据包而不是5个?

1 个答案:

答案 0 :(得分:2)

RFC 2616 section 4.4表示可以通过多种方式提供消息长度:

  • 如果定义了一个Content-Length标题。 (这可能是你看到的情况,而且它相对简单。如果你知道正文开头的位置(seq +包内的偏移量)和消息长度,你可以添加以获得结束的位置。 )
  • 通过分块编码。 RFC具有详细信息,但它对每个块都有类似的编码以及注意最终块的方式。
  • multipart/byteranges(除非客户要求,否则您将看不到它,并且它可能不适用于HTML文档)。
  • 或直到TCP连接关闭。 (特别是,直到从服务器向客户端发送FIN数据包,这只发生在干净的关闭;否则会看到RST。)