【问题标题】:how to determine the size of a packet如何确定数据包的大小
【发布时间】:2014-04-18 18:09:18
【问题描述】:

假设我为 HTTP 请求和响应启动 TCP 连接。三路握手过程完成后,我现在向服务器发送一个请求,请求一个设置了 SYN 标志的 HTTP 数据包。服务器使用 ACK 标志响应我的请求。响应完成后,它会向我发送一个 FIN 标志。现在如何确定服务器在请求和响应期间发送给我的数据包的大小?有什么流程可以做到吗?

【问题讨论】:

  • 什么语言?什么平台?是的,有一些关于如何确定数据包大小的过程,但每种语言以及根据语言的不同,每个平台确定数据包长度/大小的方法略有不同。
  • @bwtrent 这些都不是真的。他在询问 HTTP 响应的长度。它与语言或平台无关。

标签: networking


【解决方案1】:

假设我为 HTTP 请求和响应启动 TCP 连接。三路握手过程完成后,我现在向服务器发送一个请求,请求一个设置了 SYN 标志的 HTTP 数据包。

不,你没有。 SYN 在三次握手中发送的第一个数据包中。这样就完成了。充其量,您将在连接握手的最终 ACK 数据包中搭载 HTTP 请求。

服务器使用 ACK 标志响应我的请求。

不,服务器使用 HTTP 响应响应您的 HTTP 请求。 ACK 与 HTTP 级别无关。

响应完成后,它会向我发送一个 FIN 标志。

不会,除非您使用的是 HTTP 1.0 或您设置了 Connection: close 标头。否则,它将保持连接打开以进行 HTTP keepalive。

现在如何确定服务器在请求和响应期间发送给我的数据包的大小?有什么流程可以做到吗?

服务器在请求期间没有向您发送任何内容。响应正文的大小由 Content-length 标头或分块编码部分大小的总和(如果使用)给出。您需要阅读有关此内容的 HTTP 1.1 RFC,这很重要。

您还需要停止将 HTTP 与 TCP 混淆。 HTTP 是一个分层的应用协议。

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多