【发布时间】:2018-05-18 11:17:50
【问题描述】:
我正在尝试制作一个低级的数据包阅读器,有点像wireshark,用于学习和娱乐。
在进行http解析时,我很快发现有这些TCP流,而且这些数据并不是都在一个数据包中。
编辑:我认为我被告知的流不是正确的术语。 David Schwartz 将其称为 Query,将 EJP 称为 Sequence of Segments。
所以我在 TCP 上做了一些阅读,我到处阅读了关于 sequence 和 acknowledgement 数字,它们如何增加和环绕等。
我已经知道连接的建立和终止。
说实话,我从来都不擅长解释或使用 google,但我已经有一段时间了,我似乎无法理解服务器/客户端 如何结束 一个 TCP 流。
我问这个是因为,在发送了全部 http 请求后,服务器会立即回复该页面,所以,因为我一直在通过wireshark 中的数据包来回转发,但我似乎找不到是什么界定了这个流(任何指示第一个数据包的长度或倒数第二个数据包和最后一个数据包之间的差异)。
TCP中没有实际的分隔符,你只是从http头的Content-Length得到总长度?
如此处所示,前 3 个数据包是连接建立。
之后的 3 个是 http 请求的发送(第一个是 ACK(选择的),最新的 2 个是 PSH 和 ACK)。
后面的两个是来自服务器的 ACK,然后是整个响应。
最后一个是我的 ACK,在我“记录”的时间里,连接永远不会关闭。
谢谢。
【问题讨论】:
-
这能回答你的问题吗? en.wikipedia.org/wiki/…
-
@OliverCharlesworth
Connection establishment and termination I already had knowledge of. -
HTTP 规范解释了如何查找查询的结尾。您必须将 TCP 接收流连接到 HTTP 解析器的输入。
标签: http networking tcp