php网站开发用什么,哪儿提供邯郸做网站,想做电商带货怎么入手,网站开发总体功能设计TCP协议是端对端的协议#xff0c;因此在数据进行传输的过程受发送方#xff0c;数据通道#xff0c;接收方三方状态的影响。我们用水龙头来比喻数据发送方#xff0c;水管来比喻数据通道#xff0c;水桶来表示数据接收方。
图(a)表示水桶太小#xff0c;来不及接受注入…
TCP协议是端对端的协议因此在数据进行传输的过程受发送方数据通道接收方三方状态的影响。我们用水龙头来比喻数据发送方水管来比喻数据通道水桶来表示数据接收方。
图(a)表示水桶太小来不及接受注入水桶的水而传输网络保持畅通这时只能请求管水龙头的人把水龙头拧小一些以减缓放水的速率这就相当于是流量控制。
图(b)表示虽然水桶足够大但是管道中有很狭窄的地方使得管道不通畅水流被堵塞这种情况反馈到管水龙头的人那里请求把水龙头拧小一些以减缓放水的速率为的减缓水管的堵塞状态这就相当于是拥塞控制。
一、流量控制
在每一个TCP连接的一侧主机都会有一个socket缓冲区缓冲区会为每个连接设置接收缓存和发送缓存当TCP建立连接后从应用程序产生的数据就会到达接收方的接收缓冲区中接收方的应用程序并不一定会马上读取缓冲区的数据他需要等待操作系统分配时间片。如果此时发送方的应用程序产生数据过快而接收方读取接收缓冲区的数据相对较慢的话那么接受方中缓冲区的数据就会溢出。
TCP的流量控制本质上是一个速度匹配服务匹配发送方发送率和接收方的接受速率避免出现发送方发送过快而接收方接受过慢的情况从而消除缓冲区溢出的情况。
TCP通过使用一个接收窗口receive window来提供流量控制。在TCP报文结构中首部有一个接收窗口变字段接收端通过向发送端发送报文报文中就包含了接受窗口变量接收窗口会给发送方一个指示到底还有多少可用的缓存空间。发送方发送不能超过这个限额的数据这样发送方会根据接收端的实际接受能力来控制发送到数据量。
那么知道了接收窗口receive window之后它具体是如何用来流量控制呢 如上图所示发送端主机会定期向接收端主机发送一个窗口探测包这个包用于探测接收端主机是否能够接收数据当接收端的缓冲区一旦面临数据溢出的风险窗口大小的值也随之被设置为一个更小的值通知到发送端从而控制数据发送量。
开始的窗口大小设置为3000发送方每次发送报文长度为1000的报文当接收端B收到2000-2999的报文之后缓冲区已满不得不暂停接收数据。然后主机A发送窗口探测包窗口探测包是一个非常小的字节然后主机B更新缓冲区接受窗口大小并发送窗口更新通知到主机A然后主机A再继续发送报文段。在上面的发送过程中窗口更新通知可能会丢失一旦丢失发送端就不会发送数据所以窗口探测包会随机发送以避免这种情况发生。
二、拥塞控制
有了TCP窗口控制机制之后使得计算机网络中两个主机之间不再是以单个数据段的形式发送了而是能够连续发送大量的数据包。但是发送大数据包的时候也面临着例如网络负载、网络拥堵的问题。TCP为了防止这类问题的出现使用了拥塞控制机制会在面临网络拥塞时遏制发送方的数据发送。
拥塞控制主要有两种方法
端到端的控制因为网络层没有为运输层拥塞控制提供显示支持IP层不会向端系统提供有关网络拥塞的反馈信息。如果超时或者三次冗余确认就被认为是网络拥塞TCP会减小窗口的大小或者增加往返时延来避免。
网络辅助的拥塞控制在网络辅助的拥塞控制中路由器会向发送方提供有关网络中拥塞状态的反馈。这种反馈信息就是一个比特信息它指示链路中的拥塞情况。 TCP发送方通过超时或者三个冗余ACK来感知网络拥塞通过拥塞窗口cwnd来限制TCP在接收到ACK之前可以发送到网络的数据量。
一般来说发送方未确认的数据量不得超过cwnd和rwnd的最小值即
LastByteSent - LastByteAcked min(cwnd, rwnd)
由于每个数据包往返时间为诶RTT我们假设接受空间有足够的缓存用来接收数据即只考虑cwnd那么发送方的发送速率为cwnd/RTT 字节/秒通过调节cwnd发送方就可以调节它向连接发送数据的速率。
TCP进行拥塞控制的算法有四种慢开始slow start拥塞避免congestion avoidance快重传fast retransmit和快恢复fast recovery
1慢开始
当一条TCP开始建立连接时cwnd的值会初始化一个MSS的较小值。在慢启动的方式中cwnd的值会初始化为一个MSS并且每次传输报文确认后会增加一个MSScwnd的值会变成2个MSS这两个报文段都传输成功后每个报文段加一会变成4个MSS以此类推每成功一次cwnd的值会翻倍。
2拥塞避免
为了防止cwnd增长过大引起网络拥塞还需要设置一个慢开始门限ssthresh状态变量。当cwnd ssthresh时停用慢开始算法而改用拥塞避免算法具体表现为加法线性规律缓慢增大。
3快重传和快恢复
有时候个别报文段就会在网络中意外丢失但是实际上网络并未发生拥塞。如果发送方迟迟收不到确认就会产生超时并误认为网络发生了拥塞。这就导致发送方错误地开启慢启动模式又将拥塞窗口设置为1不必要的降低了传输效率。
快重传算法规定发送方只要一连收到3个重复确认就可以知道现在并未出现网络拥塞而只是接收方少收到一个报文段并对此报文段进行重传。 在3-ACK点处发送方知道现在只是丢失了个别的报文段于是不启动慢开始而是执行快恢复算法。这时发送方第二次调整门限值使ssthresh cwnd / 2开始执行拥塞避免算法。 三、流量控制和拥塞控制的区别 四、例题 超时之后ssthresh cwnd / 2 16 / 2 8之后执行慢开始第一个RTT是2第二次RTT是4第三个RTT是8此时cwnd ssthresh 8执行拥塞避免算法每次增长1第四个RTT是9