1.) 存在 3 种方式的 TCP 建立握手。假设我的 Ping 时间为 100 毫秒,我可以使用 Ping 时间来计算(平均)建立 TCP 连接需要多长时间吗?
2.) 假设我的 Ping 时间为 100 毫秒,那么至少需要 150 毫秒,这样对吗?还是需要 100 毫秒 + 1 微秒(1 微秒用于发送第三个 ACK)?或者 ACK 是否已经包含数据?
3.) 我不明白的是(在上图中)客户端何时知道他的第三个 ACK 成功并且他现在可以开始发送常规数据。我完全理解 SYN (1) 然后是 SYN ACK (2) 然后是 ACK (3),但客户端如何知道第三个 ACK 已发送给服务器并且客户端可以开始发送更多信息?还是如上文所假设的那样,第三个 ACK 已经可以包含数据?
非常感谢!Jens
答案1
回答您的第一个问题。
是的,ping 时间可以让您了解建立 TCP 连接所需的时间。
第二个问题。你说得对。如果延迟为 100 毫秒,你的连接时间大约为 300 毫秒。以下是计算结果
- 客户端(SYN)-->服务器 = 50ms
- 服务器(SYN + ACK)--->客户端 = 50ms
- 客户端(ACK +数据)--->服务器 = 50ms
第三个问题。通常客户端发送的 ACK 也包含数据。TCP 具有与之关联的超时值。如果在这段时间内客户端没有收到来自服务器的任何 ACK,它将重新传输数据。第二种情况是客户端正在进行传输。假设客户端发送了 1-10 个数据包,但只收到了 1-7 个数据包的 ACK,那么客户端将从第 8 个数据包开始重新传输。
第二个问题。应该由第一个问题回答
答案2
您可以使用 ping 时间来监控基本连接和链接延迟,但我不会将 ping 与 TCP 连接速度关联起来,因为它使用不同的协议 (ICMP)。特别是一些上游提供商会给予 ICMP 数据包比 TCP 更高的优先级,以产生有利的 ping 时间。
答案3
看一下这一页。三次握手结束后,客户端和服务器都收到了连接的确认。可以开始数据交换了。