拥塞控制

TCP拥塞控制

非 Y 不嫁゛ 提交于 2019-11-27 10:58:45
TCP拥塞控制 出现拥塞           ∑对资源的需求 > ∑可用资源 拥塞控制是防止过多的数据注入到网络中,使网络中的路由器或链路不过载,这是一个全局性的。 流量控制是点对点的通信量的控制,是端到端问题。 拥塞控制方法 在最宽泛的级别上,我们可根据网络层是否为运输层拥塞控制提供显示帮助,来区分拥塞控制方法。 端到端拥塞控制 在这个方法中,网络层没有为运输层拥塞控制提供显示支持。即使网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来推断。TCP必须通过端到端的方法来解决也拥塞控制,因为IP层不会向端系统提供有关网络拥塞的反馈信息。 TCP报文段的丢失(通过超时或3次冗余确认得知)被认为是网络出现拥塞的一个迹象 ,TCP会相应地减小其窗口长度。在TCP拥塞控制的一些最新建议也会使用增加的往返时延值作为网络拥塞程度增加的指示。 网络辅助的拥塞控制 在网络辅助的拥塞控制中,网络层构件(即路由器)向发送方提供有关网络中拥塞状态的显示反馈信息。 拥塞信息从网络反馈到发送方通常有两种方式:①直接反馈信息由网络路由器发给发送方,这种通知方式常采用了一种 阻塞分组(choke packet) 的形式(含义为:“我阻塞了”)②显示拥塞通知(Explicit Congestion Notification,ECN)

TCP的拥塞控制

≡放荡痞女 提交于 2019-11-27 10:58:29
1.引言 计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。 拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制。 2.慢开始与拥塞避免 发送方维持一个叫做 拥塞窗口cwnd(congestion window) 的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。 慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。 这里用报文段的个数的拥塞窗口大小举例说明慢开始算法,实时拥塞窗口大小是以字节为单位的。如下图: 当然收到单个确认但此确认多个数据报的时候就加相应的数值。所以一次传输轮次之后拥塞窗口就加倍。这就是乘法增长,和后面的拥塞避免算法的加法增长比较。 为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下: 当cwnd<ssthresh时,使用慢开始算法。 当cwnd>ssthresh时,改用拥塞避免算法。 当cwnd

网络拥塞控制(三) TCP拥塞控制算法

元气小坏坏 提交于 2019-11-27 10:58:03
为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法,再后来在TCP NewReno中又对“快速恢复”算法进行了改进,近些年又出现了选择性应答( selective acknowledgement,SACK)算法,还有其他方面的大大小小的改进,成为网络研究的一个热点。 TCP 的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,在之前我们还讨论过TCP还有一个对端通告的接收窗口(rwnd)用于流量控制。窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,显然窗口越大那么数据发送的速度也就越快,但是也有越可能使得网络出现拥塞,如果窗口值为1,那么就简化为一个停等协议,每发送一个数据,都要等到对方的确认才能发送第二个数据包,显然数据传输效率低下。TCP的拥塞控制算法就是要在这两者之间权衡,选取最好的cwnd值,从而使得网络吞吐量最大化且不产生拥塞。 由于需要考虑拥塞控制和流量控制两个方面的内容,因此TCP的真正的发送窗口=min(rwnd, cwnd)

TCP详解

有些话、适合烂在心里 提交于 2019-11-27 07:12:28
TCP详解 转自:http://www.cnblogs.com/kzloser/articles/2582957.html 首部格式 图释: 各个段位说明: 源端口和目的端口 :  各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现 序号 :  占 4 字节.TCP 连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号 确认号 :  占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号 数据偏移/首部长度 :  占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远.“数据偏移”的单位是 32 位字(以 4 字节为计算单位) 保留 :  占 6 位,保留为今后使用,但目前应置为 0 紧急URG :  当 URG=1 时,表明紧急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据) 确认ACK :  只有当 ACK=1 时确认号字段才有效.当 ACK=0 时,确认号无效 PSH(PuSH) :  接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付 RST (ReSeT) :  当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因)

TCP/UDP对比总结

怎甘沉沦 提交于 2019-11-27 06:10:09
目录 1 TCP-UDP对比 2 UDP介绍 3 TCP介绍 3.1 可靠传输的原理和实现 3.1.1 可靠传输原理 3.1.2 可靠传输实现 3.2 TCP面向连接管理 3.2.1 建立连接 3.2.2 释放连接 3.3 流量控制 3.4 拥塞控制   在计算机网络中,有三种体系结构划分方式,第一种是OSI七层协议体系结构,由上到下分别是:应用层,表示层,会话层,运输层,网络层,数据链路层,物理层;第二种是TCP/IP四层协议,由上到下分别是:应用层,运输层,网际层,网络接口层。第一种划分方式复杂又不实用,第二种划分方式最下面“网络接口层”对计算机网络来说,和一般的通信链路没有多大的区别,所以最后折中为我们常用的五层协议:应用层,运输层,网络层,数据链路层,物理层。   运输层向它上面的应用层提供服务,它属于面向通信部分的最高层,同时也是用户功能的最底层。两个主机通过核心网络进行端到端通信时,只有主机部分有运输层,核心网络部分的路由在转发分组时只用到下面三层。   TCP/UDP作为传输层协议,各自都有着非常广泛的应用场景,下面先对这两种协议做一个简单对比,然后分别介绍下这两种协议。本文仅从原理上介绍两种协议,暂并不涉及编程。 1 TCP-UDP对比    相同点:   TCP和UDP都是网络层之上的,传输层协议,都能都能保护网络层的传输,双方的通信都需要开放端口

TCP协议和UDP协议

浪子不回头ぞ 提交于 2019-11-26 14:51:32
TCP协议和UDP协议的区别 TCP协议: TCP可以提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),但是会增加资源的开销。 UDP协议: UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认,故UDP属于不可靠连接。 TCP如何保证可靠传输 (1)数据处理: 将应用层数据分割成TCP认为最佳的分组。 (2) 对每一个分组进行排序编号,做有序传输并且丢弃重复分组 。 (3)检验和: 校验分组的和,校验和的数值若超过十六进制,则补码后做校验和;通常用在远距离通信中确保数据的完整性和准确性 。 (4)流量控制: TCP数据传输的双方都有数据接收缓冲区并且设有大小(使用滑动窗口设定大小),这样可以控制发送速率保证数据丢失 (5)拥塞控制: 网络拥塞时减少分组的传输。 (6)ARQ协议: 原理是先发送一个分组,待确认之后,再进行下一个分组的发送。 (7)超时重发: TCP发出一个分组后,启动一个定时器,超时就重新发送一遍。 ARQ协议: 定义: 即自动重传请求,是运输层错误纠正协议之一。使用确认和超时两个机制,若没有收到确认帧就会重新发送;包括停止等待ARQ协议(发送一个分组就停止和等待

TCP拥塞控制

馋奶兔 提交于 2019-11-25 21:19:51
1.慢开始和拥塞避免 发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。 慢开始算法: 当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。 因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。 通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。 每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。 另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段

TCP流量控制与拥塞控制

故事扮演 提交于 2019-11-25 20:14:15
一:流量控制 什么是流量控制?流量控制的目的? 如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。 如何实现流量控制? 由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。 流量控制引发的死锁?怎么避免死锁的发生? 当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。 为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。 二:拥塞控制和流量控制的区别 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:( 1 )慢开始、拥塞避免( 2