- Ping 显示的
time=44ms就是一个 RTT(往返时间)。 它代表“去 + 回”的总时间。 - 底层绝对没有除以 2。 操作系统显示的数字就是 {回来} - {出发}。
物理极限 与损耗#
光到底有多快?


结论:
如果你们之间拉了一条笔直的“完美光纤”,中间没有任何路由器阻拦,物理极限只需要 22ms 就能跑个来回!
既然理论极限是 22ms,你测出来是 44ms,说明你的网络并不快,甚至还有很大的损耗空间。
多出来的时间花在了这三个地方:
- 路由转发(过路费):
- 数据包从广州到北京,中间可能要经过 10~20 个骨干网路由器(Hops)。
- 每个路由器都要拆包、看地址、转发,每个节点消耗 0.1ms~1ms 不等。
- 线路折返(走弯路):
- 光纤不是两点连直线,可能要先绕到武汉,再绕到郑州,甚至有的线路配置不好会绕更远。
- 电光转换:
- 交换机和路由器处理的是电信号,光纤传的是光信号,中间频繁的“光变电、电变光”也会消耗微秒级的时间。
TCP 三次握手延迟#
三次握手只需要消耗 1 个 RTT 的时间成本,而不是 1.5 个或 3 个。
text
很多人以为三次握手要一来一回再一来,其实最后一步是“由于惯性”顺便带过去的。
0ms: 客户端发送 SYN (第一次握手)。
22ms: 服务器收到 SYN,发送 SYN-ACK (第二次握手)。
44ms: 客户端收到 SYN-ACK。
关键点来了! 此时客户端已经确认连接建立成功了。
客户端发送 ACK (第三次握手)。
注意:客户端不需要等这个 ACK 到达服务器,就可以立刻开始发下一个阶段(TLS握手)的数据包!
所以,在时间成本上,TCP 握手只卡了你 44ms。
TLS/SSL 握手 (HTTPS 必须项,消耗 1~2 RTT)#
text
你的 URL 是 https://,所以 TCP 建好后,还不能传 JSON,必须先协商加密。
44ms (紧接着刚才的 ACK): 客户端发送 Client Hello。
66ms: 服务器收到。服务器发送 Server Hello + 证书。
88ms: 客户端收到证书。
(如果是 TLS 1.3,通常 1 个 RTT 就搞定了;如果是老版本 TLS 1.2,可能还需要再来回一次,那就是 +44ms)
我们按最快情况(TLS 1.3)算,这里又消耗了 1 个 RTT (44ms)。
目前累计耗时:44ms (TCP) + 44ms (TLS) = 88ms。 (这就是纯建立连接的“过路费”)
TCP 协议捎带机制#
第三次握手(ACK)是不需要单独跑一趟空车的,它直接背着你的 HTTP 请求数据(Data)一起过去了。
- 为什么 TCP 握手只消耗 1 个 RTT?
假设你在广州,服务器在北京。单程跑一趟 22ms。
- 0ms (你): 发送 SYN 包(第一次握手)。
- (包在路上跑了 22ms...)
- 22ms (服务器): 收到 SYN。服务器同意连接,发送 SYN-ACK 包(第二次握手)。
- (包又跑了 22ms...)
- 44ms (你): 收到 SYN-ACK。
- 关键时刻! 此时你的操作系统内核(Kernel)已经认为**“连接通了”**。
- 你的
aiohttp库立刻把 ACK 包(第三次握手) 和 HTTP 请求数据(你的 JSON) 打包在一起,发出去了!
关于断开连接(四次挥手)#
答案:不算在你这次请求的耗时里。
想象你去送外卖:
- 建立连接:你敲门(SYN),顾客开门(SYN-ACK)。耗时 1 RTT。
- 传输数据:你把外卖递给顾客,顾客接过去。
- 请求结束:顾客拿到外卖,说“谢谢”,关门。此时你的任务已经完成了,计时结束。
- 断开连接:你转身下楼、骑车离开(四次挥手)。
重点:你转身离开的时间(断开连接),并不影响顾客拿到外卖的时间。你的 Python 代码在拿到 response 的那一刻,业务逻辑就走完了。后面后台默默断开连接的动作,用户是感知不到延迟的。
HTTP 请求(不加密):是 2 个 RTT#
- 第 1 个 RTT(搭桥):
- 去:SYN
- 回:SYN-ACK
- 耗时:建立 TCP 连接。
- 第 2 个 RTT(运货):
- 去:ACK(第三次握手) + HTTP 请求数据(顺便带过去的)
- 回:HTTP 响应数据
- 耗时:数据传输。
总计:2 个 RTT。
HTTPS 请求(加密):是 3 个 RTT#
- 第 1 个 RTT(搭桥):
- TCP 握手(SYN <-> SYN-ACK)。
- 第 2 个 RTT(对暗号 - 多出来的这一次):
- 去:ACK + Client Hello(我要建立加密连接!)
- 回:Server Hello + 证书(这是我的证件和钥匙!)
- 注:这是 TLS 1.3 的情况,如果是老版本可能要往返两趟。
- 第 3 个 RTT(运货):
- 去:发送加密的请求数据。
- 回:收到加密的响应数据。
总计:3 个 RTT。
- Ping (1 RTT) = 44ms
- HTTP (2 RTT) = 88ms + 服务器处理
- HTTPS (3 RTT) = 132ms + 服务器处理
评论
还没有评论,来发第一个吧
