Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31466
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
  • 认证徽章:
文章分类

全部博文(25)

文章存档

2018年(24)

2017年(1)

我的朋友

分类: 网络与安全

2018-04-22 15:53:40

都怪自己上学的时候没有好好学习网络,导致好多问题现在才搞懂,哎~出来混,早晚要还的~
话不多说,正题伺候。
先来澄清一下TCP的滑动窗口是个啥?恩,就是长下图这样的:


我们从两个方向来理解这张图:
1. 首先左边的沿(图中左侧绿色虚线箭头所示右边的沿(图中右侧绿色虚线箭头所示)共同构成了一个“窗口”,表示已经发送但是未确认的数据和可以发送的数据的总体;注意,这个窗口的大小是接收方通知给发送方的。
2. 当发送方收到来自接收方的新的ACK,就可以将左边的沿向右边移动,同时右边的沿就可以向右移动,是谓“滑动”。
本来这样就可以OK了,但是我们现实世界中的网络世界比较复杂,时常会有拥塞发生,仅仅靠接收方来限制发送方发送数据的速度是不够的,所以,TCP在发送方引入了另外两个变量,拥塞窗口-->cwnd 和 慢启动阈值--> ssthreshold来协同滑动窗口大小,控制自身注入网络流量的速度。首先,
一条必须记住的准则是:发送方每次发送数据时的上限是为min(cwnd, 对方通告窗口大小)。
总体上讲,每当有新的ACK到达时,根据cwnd 和ssthreshold的相对大小,cwnd的增长有两种不同的策略:慢启动和拥塞避免,机制如下:
慢启动:cwnd = cwnd + 1MSS, cwnd < ssthreshold
拥塞避免:cwnd = cwnd + 1MSS * 1MSS/cwnd,  cwnd >= ssthreshold
初始时,cwnd 设置为1MSS, ssthreshold设置为65535个字节,开始的发送选择肯定就是慢启动了,当运行到一定程度,本机检测到网络有拥塞发生(超时,或者重复ACK):
ssthreshold = min(cwnd, 对方通告窗口大小)/2, 但是至少为2MSS, 若为超时,则将cwnd 设置为1MSS。之后就再次根据cwnd和ssthreshold的大小进行cwnd的增长工作和发送数据工作。



接下来就简单的介绍以下快速重传和快速恢复机制:

快速重传: 当有三个重复ACK到达时,TCP就认为发生了丢包,在重新发送请求的数据包之后:
1. 设置ssthresh = cwnd/2, cwnd = ssthreshold + 3MSS;
2. 之后若仍有重复ACK到达,cwnd = cwnd + 1 MSS, 发送1MSS(若滑动窗口允许)
3. 收到新的ACK后,cwnd = ssthreshold, 以便启动拥塞避免(快速恢复)

欢迎大家拍砖~~~

阅读(51) | 评论(0) | 转发(0) |
0

上一篇:堆排序简述

下一篇:KMP算法简介

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册