- 浏览: 314667 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
JQ_AK47:
...
Linux下直接发送以太包 -
winsen2009:
谢谢分享,如果能再来一个列子就更好了,刚接触看完还是不懂的用
UNPv1_r3读书笔记: SCTP编程
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
参考文献: RFC1072,2018, 2883
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
参考文献: RFC1072,2018, 2883
1. 前言 TCP通信时,如果发送序列中间某个数据包丢失,TCP会通过重传最后确认的包开始的后续包,这样原先已经正确传输的包也可能重复发送,急剧降低了TCP性能。为改善这种情况,发展出SACK(Selective Acknowledgment, 选择性确认)技术,使TCP只重新发送丢失的包,不用发送后续所有的包,而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据重发了,哪些数据已经提前收到等。 2. SACK选项 SACK信息是通过TCP头的选项部分提供的,信息分两种,一种标识是否支持SACK,是在TCP握手时发送;另一种是具体的SACK信息。 2.1 SACK允许选项 类型值: 4 +---------+---------+ | Kind=4 | Length=2| +---------+---------+ 该选项只允许在有SYN标志的TCP包中,也即TCP握手的前两个包中,分别表示各自是否支持SACK。 2.2 SACK选项 选项类型: 5 选项长度: 可变,但整个TCP选项长度不超过40字节,实际最多不超过4组边界值。 +--------+--------+ | Kind=5 | Length | +--------+--------+--------+--------+ | Left Edge of 1st Block | +--------+--------+--------+--------+ | Right Edge of 1st Block | +--------+--------+--------+--------+ | | / . . . / | | +--------+--------+--------+--------+ | Left Edge of nth Block | +--------+--------+--------+--------+ | Right Edge of nth Block | +--------+--------+--------+--------+ 该选项参数告诉对方已经接收到并缓存的不连续的数据块,注意都是已经接收的,发送方可根据此信息检查究竟是哪个块丢失,从而发送相应的数据块。 * Left Edge of Block 不连续块的第一个数据的序列号 * Right Edge of Block 不连续块的最后一个数据的序列号之后的序列号。 表示(Left Edge - 1)和(Right Edge)处序列号的数据没能接收到。 3. SACK的产生 SACK通常都是由TCP接收方产生的,在TCP握手时如果接收到对方的SACK允许选项同时自己也支持SACK的话,在接收异常时就可以发送SACK包通知发送方。 3.1 对中间有丢包或延迟时的SACK 如果TCP接收方接收到非期待序列号的数据块时,如果该块的序列号小于期待的序列号,说明是网络复制或重发的包,可以丢弃;如果收到的数据块序列号大于期待的序列号,说明中间包被丢弃或延迟,此时可以发送SACK通知发送方出现了网络丢包。 为反映接收方的接收缓存和网络传输情况,SACK中的第一个块必须描述是那个数据块激发此SACK选项的,接收方应该尽可能地在 SACK选项部分中填写尽可能多的块信息,即使空间有限不能全部写完,SACK选项中要报告最近接收的不连续数据块,让发送方能了解当前网络传输情况的最新信息。 3.2 对重发包的SACK(D-SACK) RFC2883中对SACK进行了扩展,在SACK中描述的是收到的数据段,这些数据段可以是正常的,也可能是重复发送的,SACK字段具有描述重复发送的数据段的能力,在第一块SACK数据中描述重复接收的不连续数据块的序列号参数,其他SACK数据则描述其他正常接收到的不连续数据,因此第一块SACK描述的序列号会比后面的SACK描述的序列号大;而在接收到不完整的数据段的情况下,SACK范围甚至可能小于当前的ACK值。通过这种方法,发送方可以更仔细判断出当前网络的传输情况,可以发现数据段被网络复制、错误重传、ACK丢失引起的重传、重传超时等异常的网络状况。 4. 发送方对SACK的响应 TCP发送方都应该维护一个未确认的重发送数据队列,数据未被确认前是不能释放的,这个从重发送队列中的每个数据块都有一个标志位 “SACKed”标识是否该块被SACK过,对于已经被SACK过的块,在重新发送数据时将被跳过。发送方接收到接收方SACK信息后,根据SACK中数据标志重发送队列中相应的数据块的“SACKed”标志,但如果接收不到接收方数据,超时后,所有重发送队列中数据块的SACKed位都要清除,因为可能接收方已经出现了异常。 5. SACK应用举例 发送方发 接收方接 接收方发送的ACK 送的数据 收的数据 (包括SACK) 5.1 SACK累加接收的数据 5000-5499 (该包丢失) 5500-5999 5500-5999 5000, SACK=5500-6000 6000-6499 6000-6499 5000, SACK=5500-6500 6500-6999 6500-6999 5000, SACK=5500-7000 7000-7499 7000-7499 5000, SACK=5500-7500 5.2 数据包丢失,ACK丢失 3000-3499 3000-3499 3500 (ACK包丢失) 3500-3999 3500-3999 4000 (ACK包丢失) 4000-4499 (该包丢失) 4500-4999 4500-4999 4000, SACK=4500-5000 (ACK包丢失) 3000-3499 3000-3499 4000, SACK=3000-3500, 4500-5000 ---------此为D-SACK 5.3 数据段丢失和延迟 500-999 500-999 1000 1000-1499 (延迟) 1500-1999 (该包丢失) 2000-2499 2000-2499 1000, SACK=2000-2500 1000-2000 1000-1499 1500, SACK=2000-2500 1000-2000 2500, SACK=1000-1500 ---------此为D-SACK 5.4 数据段丢失且延迟 500-999 500-999 1000 1000-1499 (延迟) 1500-1999 (该包丢失) 2000-2499 (延迟) 2500-2999 (该包丢失) 3000-3499 3000-3499 1000, SACK=3000-3500 1000-2499 1000-1499 1500, SACK=3000-3500 2000-2499 1500, SACK=2000-2500, 3000-3500 1000-2499 2500, SACK=1000-1500, 3000-3500 ---------此为部分D-SACK 6. 结论 通过SACK选项可以使TCP发送方只发送丢失的数据而不用发送后续全部数据,提高了数据的传输效率。
发表评论
-
Linux内核中流量控制(24)
2011-01-10 16:33 2208本文档的Copyleft归yfydz所 ... -
Linux内核中流量控制(23)
2011-01-10 16:30 1492本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(22)
2011-01-10 16:29 1936本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(21)
2011-01-10 16:28 1350本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(20)
2011-01-10 16:27 1525本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(19)
2011-01-10 16:27 1978本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(18)
2011-01-10 16:26 1569Linux内核中流量控制(18) ... -
Linux内核中流量控制(17)
2011-01-10 16:25 1945本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(16)
2011-01-10 16:25 1801本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(15)
2011-01-10 16:24 1888本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(14)
2011-01-10 16:23 1958本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(13)
2011-01-10 16:22 2636本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(12)
2011-01-10 16:21 2109本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(11)
2011-01-10 16:21 3233本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(10)
2011-01-10 16:20 2004本文档的Copyleft归yfydz所 ... -
Linux内核中流量控制(9)
2011-01-10 16:19 1830本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(8)
2011-01-10 16:18 1496本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(7)
2011-01-10 16:18 2923本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(6)
2011-01-10 16:17 1492本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(5)
2011-01-10 16:16 1727本文档的Copyleft归yfydz所有,使用GPL发布,可以 ...
相关推荐
在ns2中仿真网络结构,在OTCL编码中,代理节点的协议代理分别设置为tcp/Reno、TCP/Newreno、TCP/Sack1和tcp/Vegas,来模拟这四种算法。附有仿真结果和实验报告。
讲解TCP reno newreno sack基本原理
利用Gilbert分组丢失模型描述端对端突发分组丢失特性,提出了基于RFC6675的快重传和快恢复模型,推导并基于该模型建立TCP SACK吞吐量模型。数值实验和仿真实验表明,快重传和快恢复模型能准确描述基于RFC6675的快重...
在无线网络中,TCP SACK机制被推荐代替TCP以获得更高的带宽利用率。对无线网络中SACK与TFRC的友好性进行了模拟实验,并给出了初步分析。结果表明,当网络拥塞达到一定程度时,SACK获得的吞吐量将大大超过TFRC,而...
自己总结整理的关于TCP拥塞控制的PPT,主要介绍并比较了Tahoe、Reno、NewReno与SACK四种算法,并对拥塞的产生进行了深入剖析
(1)学习TCP的拥塞控制机制并了解TCP Tahoe、TCP Reno、TCP NewReno、TCP Sack的运行方式 (2)探讨TCP Vegas和Reno系列的TCP版本在网络上共同运行所遭遇的问题 (3)探讨TCP同步化现象出现的原因 (4)了解几个...
通过对非对称链路上拥塞控制问题及当前主要算法的讨论,针对其中存在的不足,基于目前的TCP拥塞控制机制,提出了一种适于非对称链路的SACK改进算法,提高了多个丢失分组的重传效率和网络吞吐量。
tw-sack 最精炼的ajax框架 官方网站http://www.leigeber.com/
在ns2中仿真网络结构,在OTCL编码中,代理节点的协议代理分别设置为TCP/Reno、TCP/Newreno、TCP/Sack1和tcp/Vegas,来模拟这四种算法。附有仿真结果和实验报告。
TCP Tahoe算法、TCP Reno算法、TCP New Reno算法、TCP SACK算法、TCP FACK算法和TCP Vegas算法 性能对比 拥塞窗口、阈值变化、吞吐量、网络效率、带宽利用率 拥塞控制能力对比 第三项实验——仿真与...
详细介绍来的TCP头相关的信息,例如mss、sack、win等字段是什么含义,从英文网站上下载的,转换为pdf了,如果要看原文,直接点击pdf上的链接即可
查了很久的资料,文中列出了TCP协议各个版本的理解,不同点以及改进。适合网络学习者查看和了解。
在TCP拥塞控制中主要采用TCP Tahoe,TCP Reno,TCP New Reno以及TCP Sack四种方法,其中TCP New Reno对快速恢复算法进行了改进,通过对TCP协议中的Reno进行可视化处理,实行对网络拥塞的有效管理。而IP拥塞控制方法...
size = TCPOLEN_SACK_BASE_ALIGNED (4) + n TCPOLEN_SACK_PERBLOCK (8) only four options will fit in a standard TCP header.
Ranger-Sack - v0.9.5 Beta ##内容:###Ranger-Sack (简称Sack )是相对于的兄弟项目## 。 Sack只是作为示例的首选位置,包括完整的应用程序、模板和单元测试。 它还包括各种扩展/附加组件或增强功能。 ###Sack带...
提出一种以TCP协议为基础的路径损耗确认(TCP-PLACK)机制来代替TCP选择确认机制(TCP-SACK)。每当一个TCP接收方在断开或切换后而连接到一个新的接入点时, 上述的TCP-PLACK机制就会发送一个特殊的确认, 其中包含有...
网工必备,wireshark软件学习,协议分析,HTTP 协议报文抓包实实例仅供学习。OCSP、TCP_SACK等。。
但是,TCP提供了许多功能来缓解拥塞。 TCP有多种变体。 我们已经讨论了其中的一些变体,例如Reno,New Reno,SACK,FACK,Asym和增强的NewReno。 通过应用ABRA技术创建增强的NewReno。 提供了三个仿真环境,以检查...
实验结果显示,B-Reno在分组交换网络中能取得高出Reno和New-Reno10%以上的吞吐率,达到与Sack相当的水平;同时,当与Reno(传统TCP)竞争共享信道时,B-Reno也具有良好的TCP友好性。实验结果表明B-Reno在分组交换...