gpt4 book ai didi

http - TCP "Connection"是如何维护的,HTTP Keep-Alive 对其有何影响?

转载 作者:行者123 更新时间:2023-12-03 23:07:29 25 4
gpt4 key购买 nike

我是一名应用程序开发人员,希望更多地了解我这些年来一直在提出的请求的传输层。我也一直在学习更多的后端知识,并且正在使用 websockets 构建我自己的实时数据服务,这让我很好奇数据实际上是如何移动的。

因此,我已经了解了 TCP,并且我了解它是如何工作的,但是仍然有一个术语让我感到困惑——“TCP 连接”。我到处都看到它,实际上有一个线程打开了完全相同的问题……但正如 OP 在评论中所说,实际上没有人回答这个问题:
TCP vs UDP - What is a TCP connection?

"when we say that there is a connection established between two hosts, what does that mean? If I could get a magic microscope and inspect the server or the client, and - a-ha! - find the connection, what would I be looking at? Some variable allocated by the OS code? Some entry in some kind of table? How and when does that gets there, and how and when it is removed from there"



我一直在阅读试图自己解决这个问题,
这是一个很好的资源,详细介绍了 HTTP 流,还提到了“TCP 连接”
https://blog.catchpoint.com/2010/09/17/anatomyhttp/

这是关于 HTTP Keep-alive 的另一个线程,相同的“TCP 连接”:
HTTP Keep Alive and TCP keep alive

我的理解:
当客户端想要来自服务器的数据时,发生 SYN/ACK 握手,建立这种“连接”,双方就起始序列号、最大数据包大小等达成一致。

只要这个“连接”仍然打开,客户端就可以请求/接收数据而无需再次握手。 TCP Keep-alive 发送心跳来保持这个“连接”打开

1)不知何故,HTTP Header“Keep-alive”也使这个 TCP“连接”保持打开状态,即使 HTTP header 是数据包有效载荷的一部分并且 TCP 层解析 HTTP header 似乎没有意义?

对我来说,字面意义上的两台机器之间的“连接”似乎永远无法关闭,因为客户端总是可以自由地使用数据包(例如第一个 SYN 数据包)访问服务器

2)TCP“连接”是否只是客户端和服务器从对方的IP地址保存序列号?也许这只是一个标志,上面写着“嘿,这个客户端很酷,不用握手就可以接受来自他们的消息”?那么关闭连接只是从内存中删除数据吗?

最佳答案

... both parties agree on the starting sequence number



不,他们不“同意”一个数字。每个方向都有自己的序列编号。因此,客户端在 SYN 中向服务器发送从客户端到服务器的数据的初始序列号 (ISN),服务器在其 SYN 中发送从服务器到客户端的数据的 ISN。

Somehow a HTTP Header "Keep-alive" also keeps this TCP "connection" open ...



并不真地。使用 HTTP 保持事件状态,客户端只是很好地要求服务器在发送 HTTP 响应后不要关闭连接,以便可以使用相同的 TCP 连接发送另一个 HTTP 请求。服务器可能会决定是否跟随客户端的意愿。

To me it seems like a "connection" between two machines in the literal sense can never be closed,



每一方都可以发送一个带有 FIN 标志的数据包,以表示它将不再发送任何数据。如果双方都发送了 FIN,则连接被视为关闭,因为没有人会发送任何内容,因此无法接收任何内容。如果一方决定不想再接收任何数据,它可以发送带有 RST 标志的数据包。

Is a TCP "connection" just the client and server saving the sequence number from the other's IP address?



的种类。每边保存当前 状态的连接,即涉及的 IP 和端口,当前预期的接收序列号,当前发送序列号,尚未确认的未完成字节......如果不存在这种状态(例如一个站点崩溃),则没有联系。

... maybe it's just a flag that's saying "hey this client is cool, accept messages from them without a handshake"



如果收到符合现有状态的数据包,则将其视为连接的一部分,即它将被处理并更新状态。

So would closing a connection just be wiping that data out from memory?



关闭是告诉对方不再发送数据(使用 FIN),如果双方都这样做了,双方基本上都可以删除状态,然后再没有连接。

关于http - TCP "Connection"是如何维护的,HTTP Keep-Alive 对其有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61485661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com