为什么TCP会被UDP代替
副问题[/!--empirenews.page--]
为什么这么计划(Why's THE Design)是一系列关于计较机规模中措施计划决定的文章,我们在这个系列的每一篇文章中城市提出一个详细的题目并从差异的角度接头这种计划的优弱点、对详细实现造成的影响。 TCP 协议可以说是本日互联网的基石,作为靠得住的传输协议,在本日险些全部的数据城市通过 TCP 协议传输,然而 TCP 在计划之初没有思量到现今伟大的收集情形,当你在地铁上可能火车上被断断续续的收集熬煎时,你也许都不知道这统统也许都是 TCP 协议造成的。本文会说明 TCP 协议为什么在弱网情形下有严峻的机能题目[^1]。 底层的数据传输协议在计划时必必要对带宽的操作率和通讯耽误举办衡量和弃取,以是想要办理现实出产中的所有题目是不行能的,TCP 选择了充实操作带宽,为流量而计划,祈望在尽也许短的时刻内传输更多的数据[^2]。 在收集通讯中,从发送方发出数据开始到收到来自吸取方简直认的时刻被叫做来回时延(Round-Trip Time,RTT)。 弱网情形是丢包率较高的非凡场景,TCP 在相同场景中的示意很差,当 RTT 为 30ms 时,一旦丢包率到达了 2%,TCP 的吞吐量就会降落 89.9%[^3],从下面的表中我们可以看出丢包对 TCP 的吞吐量极其明显的影响: 本文将说明在弱网情形下(丢包率高)影响 TCP 机能的三个缘故起因: TCP 的拥塞节制算法会在丢包时主动低落吞吐量; TCP 的三次握手增进了数据传输的耽误和特殊开销; TCP 的累计应答机制导致了数据段的传输; 在上述的三个缘故起因中,拥塞节制算法是导致 TCP 在弱网情形下有着较差示意的主要缘故起因,三次握手和累计应答两者的影响依次递减,可是也加剧了 TCP 的机能题目。 拥塞节制 TCP 拥塞节制算法是互联网上首要的拥塞节制法子,它行使一套基于线増积减(Additive increase/multiplicative decrease,AIMD)的收集拥塞节制要领来节制拥塞[^4],也是造成 TCP 机能题目的首要缘故起因。 第一次发明的互联网拥塞瓦解是在 1986 年,NSFnet 阶段一的主干网的处理赏罚手段从 32,000bit/s 降到了 40bit/s,该主干网的处理赏罚手段直到 1987 和 1988 年,TCP 协议实现了拥塞节制之后才获得办理[^5]。正是由于产生过收集阻塞造成的瓦解,以是 TCP 的拥塞节制算法就以为只要产生了丢包当前收集就产生了拥堵,从这一假设出发,TCP 就行使了慢启动和线增积减[^6]的机制实现拥塞节制。 tcp-congestion-control 图 1 - TCP 的拥塞节制机制 每一个 TCP 毗连城市维护一个拥塞节制窗口(Congestion Window),拥塞节制窗口的浸染有两个: 防备发送偏向吸取方发送了太大都据,导致吸取方无法处理赏罚; 防备 TCP 毗连的恣意一偏向收集中发送大量数据,导致收集拥塞瓦解; 除了拥塞窗口巨细(cwnd)之外,TCP 毗连的两边都有吸取窗口巨细(rwnd),在 TCP 毗连成立之初,发送方和吸取方都不清晰对方的吸取窗口巨细,以是通讯两边必要一套动态的估算机制改变数据传输的速率,在 TCP 三次握手时代,通讯两边会通过 ACK 动静关照对方本身的吸取窗口巨细,吸取窗口巨细一样平常是带宽耽误乘积(Bandwidth-delay product, BDP)抉择的[^7],不外在这里我们就不睁开先容了。 客户端可以或许同时传输的最大数据段的数目是吸取窗口巨细和拥塞窗口巨细的最小值,即 min(rwnd, cwnd)。TCP 毗连的初始拥塞窗口巨细是一个较量小的值,在 Linux 中是由 TCP_INIT_CWND 界说的[^8]: /* TCP initial congestion window as per rfc6928 */ #define TCP_INIT_CWND 10 初始拥塞节制窗口的巨细从呈现之后被多次修改,几个名为 Increasing TCP's Initial Window 的 RFC 文档:RFC2414[^9]、RFC3390[^10] 和 RFC6928[^11] 别离增进了 initcwnd 的值以顺应不绝进步的收集传输速率和带宽。 tcp-congestion-window 图 2 - TCP 拥塞节制算法的线増积减 如上图所示,TCP 毗连发送方的拥塞节制窗口巨细会按照吸取方的相应而变革: 线性增添:颠末 1 个 RTT ,拥塞窗口巨细会加一; 积式镌汰:当发送方发送的数据包丢包时,慢启动阈值会减半; 假如 TCP 毗连方才成立,因为 Linux 体系的默认配置,客户端可以或许同时发送 10 个数据段,假设我们收集的带宽是 10M,RTT 是 40ms,每个数据段的巨细是 1460 字节,那么行使 BDP 计较的通讯两边窗口巨细上限应该是 35,这样才气充实操作收集的带宽: 然而拥塞节制窗口的巨细从 10 涨到 35 必要 2RTT 的时刻,详细的进程如下: 发送偏向吸取方发送 initcwnd = 10 个数据段(耗损 0.5RTT); 吸取方吸取到 10 个数据段后向发送方发送 ACK(耗损 0.5RTT); 发送方吸取到发送方的 ACK,拥塞节制窗口巨细因为 10 个数据段的乐成发送 +10,当前拥塞节制窗口巨细到达 20; 发送偏向吸取方发送 20 个数据段(耗损 0.5RTT); 吸取方吸取到 20 个数据段后向发送方发送 ACK(耗损 0.5RTT); 发送方吸取到发送方的 ACK,拥塞节制窗口巨细因为 20 个数据段的乐成发送 +20,当前拥塞节制窗口巨细到达 40; 从 TCP 三次握手成立毗连到拥塞节制窗口巨细到达假定收集状况的最大值 35 必要 3.5RTT 的时刻,即 140ms,这是一个较量长的时刻了。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |