因此,按照通用协议,TCP是一个非常聪明的协议,它执行了一种称为“慢启动”的操作。通常,没有经过确认就可以发送一定数量的数据包。所以想法是,让我们把事情搬到这里。通常,这个数字是两个。因此,当TCP启动时,它可以发送两个数据包,一个接着一个。在没有第一个被确认的情况下,它将发送第二个。但是然后等待。然后限制的规则是,我们允许未收到的数据包的数量对于收到的每个确认增加一个。
因此,让我们考虑一下。对于收到的每个确认,我们允许未确认的数据包数量增加一。因此,在我们同意的开始时,我们首先发送两个数据包。他们得到承认。因此,我们有第一个确认。我们允许自己发送两个。现在,在收到第一个确认后,我们将其增加一到三。因此,我们现在可以再发送三个数据包,而无需任何进一步的确认。当收到对我们之前发送的所有内容的确认再次出现时,我们将其增加到四个。这就是所谓的“拥塞窗口”。它不是在线上发送过的窗口,也就是说,它与接收窗口不同,它是TCP报头的16位,告诉我们我们可以发送多少数据。这是-这是一扇窗户。它'
如果我们将每次收到确认后允许发送的未确认数据包的数量不断增加,则在某个时候我们将达到极限。这个系统的优点在于,当我们开始尝试以比路由器之间最弱的链接(实际上是链接)更快的速度发送数据包时,我们会在某个时候找到最弱的链接断开的地方。它会丢弃我们尝试发送的数据包,因为我们试图将其发送得太快。因此,来自另一端的确认停止了,因为数据不再通过。
TCP的工作是,如果它无法接收-这在策略上有所不同。随着时间的流逝,该策略,实际的避免拥塞策略已经发生了很大变化。如果您进行了Google搜索和Wikipediaing等操作,就会看到诸如Tahoe和Reno之类的名字,还有很多其他名字,它们具体说明了行为的本质。但是想法是,当发件人意识到由于丢失了确认而不再通过其数据时,它将迅速降低其发送速率。通常,它将其分成两半。因此,它可以显着地缩小规模,然后又回升到更大的比例。
因此,从本质上讲,这意味着丢失数据包是“我们无法更快地发送数据”的信号功能,并且连接两端的TCP发送器(整个Internet上)始终都是-试图超越两个端点之间的最大速度,即最弱的链接(无论在哪里),并且它们总是将其推向极限。因此,鉴于某处某个点比其发送数据包的能力弱,他们将找到它,因为它们会将数据包抽出。只要有要发送的数据并且它们具有高带宽连接,发送方就会提高发送速率,即未完成的数据包的数量,即允许在运行中立即存在的数据包作为确认回来,积极地向上移动该数字,直到将其推得太远。然后它退缩很多,然后再次向前移动。
因此,这实际上是TCP连接之间发生的事情,大概我不知道该占多少百分比,但是Internet上绝大部分流量都是通过TCP连接。我们所有位于内核中的操作系统(即所谓的TCP堆栈)都具有这些计数器。当我们发送文件,上传大文件或接收网页时,另一端的服务器也在做同样的事情。它会在单个连接的基础上尽可能多地推送尚未确认的数据包,从而提高数据包速率,直到达到开始出现故障或卡顿的地步。然后退出,以使事情恢复,然后再次开始备份。
因此最终成为一种自我节制的系统,在受到限制的情况下,我的意思是说,这确实显得有些时髦和粗鲁。”