学习记录——运输层(4)
2016-12-24 17:24
113 查看
所用教材为: 计算机网络(第六版) 谢希仁 编著
TCP的流量控制
一、利用滑动窗口实现流量控制
(一)流量控制:让发送方的发送速率不要太快,要让接收方来得及接收。(二)利用滑动窗口机制实现:
(三)为解决可能出现的死锁局面,需要持续计时器
TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
(四)必须考虑传输效率
TCP的拥塞控制
一、拥塞控制的一般原理
(一)什么是拥塞?
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。(二)出现拥塞的条件
对资源的需求>可用资源(三)拥塞产生的原因
(1)某个节点的缓存容量太小,分组被丢弃(2)处理机速度太慢。
(3)会恶性循环
(四)关于拥塞控制
(1)拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。(2)拥塞控制的前提:网络能够承受现有的网络负荷。
(3)拥塞控制是一个全局性的过程。
(五)拥塞控制所起的作用
二、几种拥塞控制方法
(一)慢开始和拥塞避免
慢开始
(1)拥塞窗口:1、 由发送方维持
2、 大小取决于网络的拥塞程度,并且动态地在变化。
3、 发送方让自己的发送窗口等于拥塞窗口。
(2)发送方控制拥塞窗口的原则:
只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。
但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
(3)慢开始算法的原理:
1、在主机刚刚开始发送报文段时可先设置拥塞窗口cwnd=1,即设置为一个最大报文段MSS的数值。
2、每接收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值
3、用这样的方法逐步增大发送方放的拥塞窗口cwnd,可以使分组注入到网络中的速率更加合理。
(4)慢开始算法举例:
①使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍
②一个传输轮次所经历的时间其实就是往返时间 RTT
③“传输轮次”更加强调:把拥塞窗口cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认
④例如,拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间
⑤慢开始的慢指:从cwnd=1开始,而非cwnd的指数增长速度,逐步试探网络是否出现拥塞情况
(6)慢开始门限状态变量 ssthresh
设置的目的:为防止拥塞窗口cwnd增长过大引起网络拥塞
用法:
当cwnd<ssthresh时,使用上述慢开始算法。
当cwnd> sstresh时,停止使用慢开始算法而该用拥塞避免算法
当cwnd = sstresh时,可以使用慢开始,也可以使用拥塞避免。
拥塞避免
(1)拥塞避免的思路:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RRT就把发送方的拥塞窗口cwnd加1,而不是加倍
这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率慢得多。
网络出现拥塞
(1)无论在慢开始还是在拥塞避免阶段,只要发送方判断网络出现拥塞(根据就是没有按时收到确认),就要把慢开始门限sstresh设置为出现拥塞时的发送窗口值的一半(但不能小于2)。(2)然后把拥塞窗口cwnd重置为1,执行慢开始算法
(3)目的是迅速减少主机发送到网络的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。
慢开始和拥塞避免算法的实现举例
拥塞窗口增加到24时,网络出现超时(这很可能是网络发生拥塞了)。更新后的ssthresh值变为12.
(1)乘法减小:
不论在慢开始阶段还是在拥塞避免阶段,只要出现超时(即很可能出现了网络拥塞),就把慢开始门限值减半,即设置为当前拥塞窗口的一半。
与此同时,执行慢开始算法
当网络中频繁出现拥塞时,ssthresh值就下降的很快,大大减小注入到网络中的分组数
(2)加法增大
指执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
强调:
拥塞避免并非指完全能够避免了拥塞。拥塞避免是说在拥塞避免阶段将拥塞窗口控制为按线性增长,使网络比较不容易出现拥塞。(二)快重传和快恢复
快重传算法
(1)要点:1、要求接收方每收到一个失序的报文段后就立即发出重复确认,以让发送方及早知道有报文段没有到达接收方。
2、发送方只要一连收到3个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为丢失帧(下图M3)设置的重传计时器到期。
(2)举例
快恢复算法
(1)要点:1、当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。但不执行慢开始算法。
2、由于发送方现在认为网络很可能没有发生拥塞(如果网络出现了严重拥塞,就不会有一连好几个报文段连续到达接收方,也就不会导致接收方连续发送重复确认)
因此不执行慢开始算法(即拥塞窗口cwnd不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半之后的数值,
然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
快重传和快恢复的示意图
从连续收到三个重复的确认转入拥塞避免在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用
发送窗口的上限值
三、随机早期检测RED
TCP的运输连接管理
关于管理
(一) 运输连接的三个阶段:
连接建立、数据传送、连接释放运输连接管理就是使运输连接的建立和释放都能正常地进行。
(二)TCP连接建立过程要解决的三个问题
(1)要使每一方能够确知对方的存在(2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项及服务质量等)
(3)能够对运输实体资源(缓存大小、连接表中的项目等)进行分配
(三)TCP连接的建立采用客户服务器方式
主动发起连接的应用进程是客户被动等待连接的应用进程叫服务器
一、TCP的连接建立
(一)三次握手
(1)假定主机运行的是TCP客户程序,而B运行TCP服务器程序。最初两端的TCP进程都处于CLOSED状态
(2)A 的 TCP向B发出连接请求报文段,
其首部中的同步位 SYN= 1,并选择序号seq= x,表明传送数据时的第一个数据字节的序号是 x。(3)B 的 TCP收到连接请求报文段后,如同意,则发回确认。
B 在确认报文段中应使SYN= 1,使ACK= 1, 其确认号ack= x + 1,自己选择的序号seq= y。(4)A收到此报文段后向B给出确认,
其ACK= 1, 确认号 ack= y + 1。A 的 TCP通知上层应用进程,连接已经建立。
二、TCP的连接释放
(一)图示TCP连接释放过程:四次握手
数据传输结束后,通信的双方都可释放连接。现在A和B都处于ESTABLISHED状态。
(1)A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接
(2)B收到连接释放报文段后即发出确认。
然后B进入CLOSED-WAIT状态
TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收
A收到来自B的确认后,就进入FIN-WAIT-2状态,等待B发出的连接释放报文段
(3)若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。
B发出连接释放报文段。进入LAST_ACK状态,等待A的确认
(4)A收到B的连接释放报文段后,必须对此发出确认。
发出确认报文段,进入到TIME_WAIT状态。但是,现在TCP连接还没有释放掉
(5)必须经过时间等待计时器(TIME_WAIT)设置的时间2MSL后,A才进入到CLOSED状态。
当A撤销相应的传输控制块TCB后,就结束了这次的TCP连接
(6)B只要收到了A发送的确认,就进入CLOSED状态。
同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。
为什么需要 时间等待计时器
(一)为了保证A发送的最后一个ACK报文段能够到达B。因为这个报文段有空不丢失。(二)防止“已失效的连接请求报文段”出现在本连接中。
三、TCP的有限状态机
(一)图的介绍
(1) 每一个方框即TCP可能具有的状态。(2)每个方框中的英文字符串是TCP标准所使用的TCP连接状态名。
(3)状态之间的箭头表示可能发生的状态变迁
(4)箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又会出现什么动作。
粗实线箭头表示对客户进程的正常变迁
粗虚线箭头表示对服务器进程的正常变迁
细线箭头表示异常变迁。
(二)TCP的有限状态机(图)
相关文章推荐
- 学习记录——运输层(5)
- 学习记录——运输层(3)
- 学习记录——运输层(1)
- 学习记录——运输层(2)
- ADO.net学习记录 (一)
- c#学习记录
- .NET WEB SERVICE 学习记录(二)
- Gtk2 - perl 学习记录
- Lua学习记录
- 2004.7.15 [C#学习记录]使用C#编写一个自定义控件
- JavaScript 的学习记录。
- 我想博客园同我一起成长,在这里记录着我的工作、学习、生活!
- sql 学习记录
- .net学习点滴记录
- 动态网页学习:JSP学习笔记全记录
- 记录今天学习SQL遇到的一个小问题
- .NET WEB SERVICES 学习记录(三)
- 记录hibernate 3学习过程中的报错(未完成)
- ADO.net学习记录
- 记录hibernate 3学习过程中的报错(未完成)