A O*_*A O 5 connection tcp http
我是一名应用程序开发人员,希望更多地了解我这些年来一直在提出的请求的传输层。我也一直在学习更多的后端知识,并且正在使用 websockets 构建我自己的实时数据服务,这让我很好奇数据实际上是如何移动的。
因此,我已经了解了 TCP,并且我了解它是如何工作的,但是仍然有一个术语让我感到困惑——“TCP 连接”。我到处都看到它,实际上有一个线程打开了完全相同的问题……但正如 OP 在评论中所说,实际上没有人回答这个问题: TCP 与 UDP - 什么是 TCP 连接?
“当我们说两台主机之间建立了连接时,这是什么意思?如果我能得到一个神奇的显微镜并检查服务器或客户端,然后 - 啊哈! - 找到连接,我会看什么at?操作系统代码分配的一些变量?某种表中的一些条目?它如何以及何时到达那里,以及如何以及何时从那里删除”
我一直在阅读以试图自己解决这个问题,
这是一个很好的资源,详细介绍了 HTTP 流,还提到了“TCP 连接”
https://blog.catchpoint.com/2010/09/17/anatomyhttp/
这是关于 HTTP Keep-alive 的另一个线程,相同的“TCP 连接”: HTTP Keep Alive 和 TCP keep alive
我的理解:
当客户端想要来自服务器的数据时,会发生 SYN/ACK 握手,建立这种“连接”,双方就起始序列号、最大数据包大小等达成一致。
只要这个“连接”仍然打开,客户端就可以请求/接收数据而无需再次握手。TCP Keep-alive 发送心跳来保持这个“连接”打开
1)不知何故,HTTP Header“Keep-alive”也使这个 TCP“连接”保持打开状态,即使 HTTP 标头是数据包有效载荷的一部分,并且 TCP 层解析 HTTP 标头似乎没有意义?
对我来说,字面意义上的两台机器之间的“连接”似乎永远无法关闭,因为客户端总是可以自由地使用数据包(例如第一个 SYN 数据包)访问服务器
2)TCP“连接”是否只是客户端和服务器从对方的IP地址保存序列号?也许这只是一个标志,上面写着“嘿,这个客户端很酷,不用握手就可以接受来自他们的消息”?那么关闭连接只是从内存中擦除数据吗?
... 双方就起始序列号达成一致
不,他们不“同意”一个数字。每个方向都有自己的序列编号。因此,客户端在 SYN 中向服务器发送从客户端到服务器的数据的初始序列号 (ISN),服务器在其 SYN 中发送从服务器到客户端的数据的 ISN。
不知何故,HTTP 标头“Keep-alive”也使这个 TCP“连接”保持打开状态......
并不真地。使用 HTTP 保持活动状态,客户端只是很好地要求服务器在发送 HTTP 响应后不要关闭连接,以便可以使用相同的 TCP 连接发送另一个 HTTP 请求。服务器可能会决定是否跟随客户端的意愿。
对我来说,两台机器之间的“连接”在字面意义上似乎永远无法关闭,
每一方都可以发送一个带有 FIN 标志的数据包,以表示它将不再发送任何数据。如果双方都发送了 FIN,则连接被视为关闭,因为没有人会发送任何内容,因此无法接收任何内容。如果一方决定不想再接收任何数据,它可以发送带有 RST 标志的数据包。
TCP“连接”只是客户端和服务器保存来自对方IP地址的序列号吗?
的种类。每一方都保存连接的当前状态,即所涉及的 IP 和端口、当前预期的接收序列号、当前发送序列号、尚未确认的未完成字节......如果没有这种状态(例如一个站点)崩溃)然后没有连接。
...也许这只是一个标志,上面写着“嘿,这个客户端很酷,无需握手即可接受来自他们的消息”
如果收到符合现有状态的数据包,则将其视为连接的一部分,即将对其进行处理并更新状态。
那么关闭连接只是从内存中擦除数据吗?
关闭是告诉对方不再发送数据(使用 FIN),如果双方都这样做了,双方基本上都可以删除状态,然后再没有连接。
归档时间: |
|
查看次数: |
642 次 |
最近记录: |