tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值) |
您所在的位置:网站首页 › 固定阈值法使用时有什么限制吗知乎 › tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值) |
目录 延迟应答 引入 介绍 原则 拥塞控制 引入 网络出现拥塞 引入 介绍 介绍 拥塞窗口 介绍 决定滑动窗口的大小 慢启动 介绍 为什么要有慢启动 阈值 算法 总结 延迟应答 引入发送方一次发送更多的数据,发送效率就越高 因为要写入网卡硬件的io速度很慢,尽量少访问硬件,io效率会提高而发送的数据量取决于对方的接收能力(窗口大小) 那么,如何让接收方向对方通告一个更大的窗口呢? 介绍也就是让接收方先不着急返回应答,等一等,给上层留时间读取数据 这样就有较大概率可以有更大的窗口当然,效率提高不是一定的,因为上层读不读我们没法控制所以,这也给我们有一定的启示 编写基于tcp的服务器代码时,要尽快把数据读上来这样就能提供更大的接收窗口->对方的滑动窗口大小增大->对方就可以发送更多的数据之前介绍的策略,都是作用在双方主机上的 但是,数据包大部分时间都在网络中,所以网络信道也对通信有影响所以,tcp还需要对网络制定策略但是因为网络不属于客户端/服务端的范畴,所以这俩没法对网络直接做些什么,只是一些策略 网络出现拥塞 引入对于网络拥塞问题,我们可以做个比喻: 如果一场考试,只有几个人挂科,那只能说明是这几个没好好学如果班上大部分人都挂科了,只有几个及格,不免让人怀疑这场考试有问题网络也是如此: 出现少量丢包是正常的但如果大面积丢包,可能就是通信过程中有什么问题了一是对方可能来不及接收,导致丢包 但是有流量控制,所以应当不会二是网络有问题 可能是硬件设备有问题或是数据量过大,引起阻塞这两个问题也可能是一个问题,因设备问题导致数据阻塞所以,在通信过程中,不仅要考虑双方如何,也要考虑网络如何,也就是需要评估网络的健康状态 介绍如果通信时出现了大量丢包 tcp就认为是网络出了问题(网络阻塞)如果知道大量丢包(即滑动窗口内有大量的数据都超时了,连应答都没有) 大部分可能自己过一会儿会缓过来,但我们也不能坐以待毙啊,总得做点什么,也就有了拥塞控制如果网络大量瘫痪,tcp协议也救不了,那就只能让工程师来维修了(毕竟tcp制定的机制并不是万能的) 介绍所以,对于这些大量超时的数据,发送方该如何呢? 首先,肯定是不能立即重传的(少量重传倒是没问题,因为只是个例)而大量丢包必然是哪里出了问题如果是设备出错,即使发了也是白发如果是数据拥塞,那重发了岂不是会更加重拥塞程度所以,发送方需要先等等这样的话,所有遵守tcp协议的主机遇到网络拥塞时都等一等 在网络中传递的数据量一下子就少了,拥塞自然很快就能消减这属于是用tcp协议实现了多主机面对网络出现拥塞问题的共识当然,也不是所有主机都能识别到网络拥塞,也就不会触发拥塞控制,可能它发送的数据少,丢包的就少 网络拥塞程度越严重,影响的主机越多,就有更多的主机触发拥塞控制,减少数据量的发送如果网络拥塞并不严重,也就只会带动少量的主机挺巧妙的当识别到网络拥塞时,我们需要引入一个新概念 -- 慢启动 同时也要引入一个新窗口 -- 拥塞窗口 拥塞窗口 介绍初始值为1,以指数级增长 在慢启动阶段,拥塞窗口的大小会随着每次收到一个ACK而指数增长,直到达到慢启动阈值 决定滑动窗口的大小每次发送报文时,不仅要考虑对方的接收能力,也要考虑网络的拥塞情况 所以,实际发送数量 = min( 拥塞窗口大小,对方的接收窗口大小 )而我们知道,发送数据的量取决于滑动窗口的大小 所以,我们就能修改之前对滑动窗口大小的认知了:滑动窗口大小=min(拥塞窗口大小,对方的接收窗口大小)因为即使对方的接收能力很强,网络容纳不下也是白搭 所以也需要动态考虑网络的接收能力反过来也是如此所以,需要以最小限度作为限制同样的,滑动窗口的右指针的计算方式也要变 因为要考虑网络状况,所以end = min( 接收窗口大小,有效数据大小,拥塞窗口大小 ) 慢启动 介绍慢启动是TCP连接建立后的初始阶段 其目的是为了迅速估计网络的可用带宽和避免拥塞在慢启动阶段,发送方以指数增长的方式增加拥塞窗口的大小,从而逐渐增加发送的数据量,直到达到一个阈值慢启动只是初始值增长的慢,一段时间后就很恐怖了所以,为什么慢启动可以控制发送方发送的数据量? 因为它可以限制滑动窗口大小也就是上面说的,滑动窗口大小的取决因素里,有拥塞窗口的存在 为什么要有慢启动因为需要在前期发送少量报文 用于试探网络状态如果发送的报文基本都有应答,说明此时网络很健康 那么就该加大发送力度,就不能让拥塞窗口大小限制住数据发送量了(中后期拥塞窗口很大,计算实际发送量时,只取决于对方的接收能力) 阈值当然,拥塞窗口也不能这样一直增大下去,超变量范围了怎么办 所以要引入慢启动的阈值超过这个阈值后,窗口大小将以线性方式增长,也就退出慢启动阶段 ![]() 如果在增长的过程中出现了网络拥塞 就以此时的窗口大小作为基准值,进行某一运算后得到新的阈值然后以新的阈值重新进行慢启动,达到阈值后就变为线性增长但是,也不一定就会出现网络阻塞 并且当滑动窗口大小取决于接收窗口大小时,阻塞窗口更不更新就不重要了 算法新阈值=导致拥塞的窗口大小/2 /2可能是经过实验得到的比较合适的算法策略/原理啥的都需要经过测试,测试得出来确实是效率更高,所以就采用了 总结所以,我们现在拥有三个窗口,接收窗口,滑动窗口,拥塞窗口 拥塞窗口 --- 主机衡量网络健康状态的指标 因为网络是动态变化的,所以拥塞窗口本身就不是静态的如果发送数据量超过拥塞窗口大小,就会引起网络拥塞 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |