什么表明TCP流的结束?

时间:2017-12-04 22:03:11

标签: http networking tcp

我正在尝试制作一个低级别的数据包阅读器,有点像wirehark,用于学习目的和乐趣。

进入http解析时,我很快发现有这些TCP流,而且这些数据并不是全部都在一个数据包中。

编辑:我认为是我被告知的流不是正确的术语。 David Schwartz将其称为查询,将EJP称为段序列

所以我对TCP进行了一些阅读,我到处都读到了序列确认数字,它们如何增加和包裹等等。
/> 连接建立和终止我已经知道了。

说实话,我从来没有擅长解释或使用谷歌,但我已经在这一点了,我似乎无法理解服务器/客户端如何结束一个TCP流。

我问这个是因为,在发送了http请求的全部内容之后,服务器立即回复了该页面,因此,我一直在使用wireshark中的数据包返回并转发,我似乎无法找到什么划分这个流(任何指示第一个数据包中的长度或倒数第二个数据包和最后一个数据包之间的差异)。

TCP中是否没有实际的分隔符,你只需从http标题的Content-Length获得总长度?

http request

如此处所示,前3个数据包是连接建立 之后的3是发送http请求(首先是ACK(所选择的一个),最新的2是PSH& ACK)。 之后的两个是来自服务器的ACK,然后是整个响应 最后一个是我的ACK,连接在我“记录”的时间内从未关闭。

谢谢。

1 个答案:

答案 0 :(得分:1)

TCP流的末尾由发送FIN位的段标记。

然而,这不是您的真实问题的答案,这是关于HTTP请求或响应的结束,其由以下内容确定:

  1. 内容长度(如果有)或
  2. 分块转移中的最后一块(如果使用)或
  3. FIN
  4. 如果有正文,否则在@Barmar指出的标题之后的空白行。