Http TCP流重组的几个问题

Http TCP流重组的几个问题,http,tcp,Http,Tcp,我正在实现一个IPS系统,在观察wireshark重新组装TCP流的过程时,我有点困惑 例如,服务器将HTML页面传输到客户端。该页面分为4个部分,由TCP数据包封装。然后服务器将另外4个TCP数据包推送到客户端,以获取JavaScript文本 我的问题是,我知道我可以通过测量它们的Seq和Len来确定它们的序列,但是如何确定HTML文本的结尾呢?我怎么知道HTML包含4个TCP数据包,而不是5个?指出消息长度可以通过几种方式给出: 通过内容长度标题(如果已定义)。(这可能就是您看到的情况,而

我正在实现一个IPS系统,在观察wireshark重新组装TCP流的过程时,我有点困惑

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

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

指出消息长度可以通过几种方式给出:

  • 通过
    内容长度
    标题(如果已定义)。(这可能就是您看到的情况,而且相对简单。如果您知道正文开头的位置(seq+数据包内的偏移量)和消息长度,您可以添加以获得结尾的位置。)
  • 通过分块编码。RFC有详细信息,但它对每个块都有类似的编码,并有一种记录最后一个块的方法
  • multipart/byteranges
    (除非客户端要求,否则您将看不到它,对于HTML文档可能也看不到)
  • 或者直到TCP连接关闭。(特别是,直到
    FIN
    数据包从服务器发送到客户端,这只发生在完全关闭时;否则,您将看到
    RST
    。)

这在答案中是隐含的,但我想明确一点:除了关闭TCP连接(顺便说一句,这是HTTP/1.0中的唯一选项)之外,它总是需要一些HTTP协议本身的知识。也就是说,从TCP/IP报头收集的信息不足以满足这一要求。