【问题标题】:Some question of reassembling TCP stream重组TCP流的一些问题
【发布时间】:2011-09-14 14:11:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: http tcp


    【解决方案1】:

    RFC 2616 section 4.4 声明消息长度可以通过多种方式给出:

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

    【讨论】:

    • 答案是隐含的,但我想明确表示:除了关闭 TCP 连接(顺便说一句,这是 HTTP/1.0 中的唯一选项),它会 总是需要一些关于 HTTP 协议本身的知识。 IE。从 TCP/IP 标头中获取的信息不足以满足此要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2012-10-04
    • 1970-01-01
    • 2014-04-13
    • 2015-05-03
    • 2019-02-10
    相关资源
    最近更新 更多