TCP 连接和限制
访问CIS资源时,客户端和服务器之间会建立传输控制协议 (TCP) 连接。 当用户使用CIS 请求一个网站时,他们的请求会通过CIS基础设施,从而实现DDoS保护并增强安全性。
CIS如何将用户连接到源服务器
CIS通过CIS 将用户请求路由到应用程序的源服务器,从而充当用户和源服务器之间的中介。 用户流量会被传送到最近的存在点PoP),然后在那里处理请求。 如果请求不是由 Cloudflare 的数据中心提供,则会打开一个连接到源服务器,以转发请求。
连接限制
当 HTTP / HTTPS 流量通过 CIS 代理时,通常会有两个已建立的 TCP 连接:第一个是请求客户端与 CIS 之间的连接,第二个是 CIS 与源服务器之间的连接。 每个连接都有自己的 TCP 和 HTTP 限制。
请求客户端与CIS之间的连接限制
表 1 列出了请求客户端与CIS 之间的连接限制。
类型 | 限制(秒) | HTTP 极限状态码 | 可配置 |
---|---|---|---|
连接 Keep-AliveHTTP/1.1 | 400 | TCP 连接已关闭 | 否 |
连接空闲HTTP/2 | 400 | TCP 连接已关闭 | 否 |
CIS与原服务器之间的连接限制
表 2 列出了CIS与源服务器之间的连接限制。
类型 | 限制(秒) | HTTP 极限状态码 | 可配置 |
---|---|---|---|
完成 TCP 连接 "[1] | 15 | 522 | 否 |
TCP ACK 超时 "[2] | 90 | 522 | 否 |
TCP Keep-Alive 时间间隔 "[3] | 30 | 520 | 否 |
代理闲置超时 "[4] | 900 | 520 | 否 |
代理读取超时 [5] | 100 | 524 | 是 |
代理写入超时 "[6] | 30 | 524 | 否 |
HTTP/2Pings 至原点 | 关闭 | 不适用 | 是 |
HTTP/2连接闲置 "[7] | 900 | 否 | 否 |
TCP 连接和续存
CIS使用保持连接,在将客户流量代理到源服务器时,尽量减少重复 TCP 连接的需要,从而提高性能并降低成本。 要优化这一过程,请确保在源服务器上启用 HTTP keep-alive,允许在最后一次请求后的代理空闲超时前重复使用打开的 TCP 连接。 这有助于防止连接重置并提高效率。
通常,HTTP 会为每个请求-响应周期打开一个新的 TCP 连接,这可能会增加开销。 Keep-alives 允许单个 TCP 连接为多个请求保持开放,从而减少延迟和网络流量,最终提升用户体验。
虽然 TCP 连接可以保持激活状态,但空闲连接通常会在一定时间后终止。 CIS对用户连接的默认空闲超时为 400 秒,并每隔 75 秒发送一次 keep-alive 探测。 如果连续九次探测都未应答,CIS就会发送 TCP 重置 (RST) 数据包来结束连接。
值得注意的是,由于容量平衡或维护等因素,keep-alives 并不能保证连接的稳定性,因此应用程序的设计应能从容应对断开连接。 企业客户可以自定义用户与CIS 之间以及CIS与原服务器之间的 TCP 连接设置。
-
TCP 采用三方握手方式在 IP 连接上建立可靠的连接(SYN、SYN-ACK、ACK)。 SYN 是同步的简称,ACK 是确认的简称。 ↩︎
-
TCP 三方握手的最后一步,确认连接的建立。 ↩︎
-
TCP keep-alive 用于通过发送数据包来检查连接是否仍处于活动状态,从而维持两个端点之间的连接。 这有助于防止空闲连接过早关闭。 如果在规定时间内未收到回复,连接将被终止。 ↩︎
-
当 TCP 连接处于空闲状态时,意味着连接已经建立,但两个端点都没有发送任何数据。 就 HTTP 而言,空闲连接是指客户端和服务器之间已建立的连接当前没有传输任何 HTTP 请求或响应。 ↩︎
-
代理读取超时是指代理服务器在终止连接前等待源服务器响应的最长时间。 ↩︎
-
代理写超时是指代理服务器在终止连接前允许向客户端发送数据的最长时间。 ↩︎
-
当 TCP 连接处于空闲状态时,意味着连接已经建立,但两个端点都没有发送任何数据。 就 HTTP 而言,空闲连接是指客户端和服务器之间已建立的连接当前没有传输任何 HTTP 请求或响应。 ↩︎