场景
考虑一个场景,tcp发动端连续发送了4个包1-200,201-300,301-400,401-500. 接收端接收了1-200, 201-300,401-500。由于301-400没有收到,所以接收端只能发送一个ack 301给发送端,以确认1-300都收到,而401-500无法给发送端确认。这时发送端不知道301-400和401-500这两个包是否到达接收端。
解决办法
处理这种情况有两种可能的方式:
仅重传超时片段:这是一种更加保守的方式,仅重传超时的片段,希望其他片段都能够成功接收。但因为发送端没法确认200后到底有多少片段没被接收,情况就比较复杂。如果该片段之后的其他片段实际上接收到了,这一方式是最佳的。如果没接收到,就无法正常执行,这时后面的每一个片段需要单独计时并重传。
重传所有片段:这是一种更激进或者说更悲观的方式。无论何时一个片段超时了,不仅重传该片段,还有所有其他尚未确认的片段(301-400和401-500都会重传)。这一方式确保了任何时间都有一个等待确认的停顿时间,在所有未确认片段丢失的情况下,会刷新全部未确认片段,以使对端设备多一次接收机会。这种方式的问题在于可能这些重传是不必要的。如果第一个片段丢失而后面其他片段都接收到了,也得重传所有片段。
由于TCP不知道其他片段是否接收到,所以它也无法确认哪种方法更好,但只能选择一种方式
最优解决方式
tcpdump抓包时,在sync协商阶段可以看到一个“sackOK”的字段。
10:37:02.939789 IP 10.138.226.167.17198 > 10.139.252.110.9360: Flags S, seq 986305541, win 14600, options mss 1460,nop,nop,sackOK, length 0
这个位叫做选择确认(selective acknowledgment, SACK)。
它就用来处理上面的问题,即在TCP确认机制中,无法有效处理非连续TCP片段的问题。
但前提是连接的两方设备必须同时支持这一功能,通过连接时使用的SYN片段来协商是否允许SACK(即抓包中显示的sackOK)。这一过程完成之后,任一设备都可以在常规TCP片段中使用SACK选项。这一选项包含一个关于已接收但未确认片段数据sequence number范围的列表,如果某个片段已被选择确认过,则该片段中的SACK比特位置为1。该方式使用激进方式的改进版本,一个片段重传之后,之后所有片段也会重传,除非SACK比特位为1。
例如,在示例中4个片段的情况下,当接收端发回ack为301(1-200,201-300)的确认信息,其中包含一个SACK选项指明:“已接收到字节401至500,但尚未确认”。如果片段4在片段1和2之后到达,上述信息也可以通过一个单独的ack确认片段来完成。服务器确认片段4的字节范围,并为片段4打开SACK位。当片段3重传时,服务器看到片段4的SACK位为1,就不会对其重传。
在片段3重传之后,片段4的SACK位被清除。这是为了防止客户端出于某种原因改变片段4已接收的想法。客户端应当发送确认号为501或更高的确认信息,正式确认片段3和4接收到。如果这一情况没有发生,服务器必须接收到片段4的另一条选择确认信息才能将它的SACK位打开,否则,在片段3重传时或计时器超时的情况下会对其自动重传。
相关推荐
在ns2中仿真网络结构,在OTCL编码中,代理节点的协议代理分别设置为tcp/Reno、TCP/Newreno、TCP/Sack1和tcp/Vegas,来模拟这四种算法。附有仿真结果和实验报告。
讲解TCP reno newreno sack基本原理
在无线网络中,TCP SACK机制被推荐代替TCP以获得更高的带宽利用率。对无线网络中SACK与TFRC的友好性进行了模拟实验,并给出了初步分析。结果表明,当网络拥塞达到一定程度时,SACK获得的吞吐量将大大超过TFRC,而...
利用Gilbert分组丢失模型描述端对端突发分组丢失特性,提出了基于RFC6675的快重传和快恢复模型,推导并基于该模型建立TCP SACK吞吐量模型。数值实验和仿真实验表明,快重传和快恢复模型能准确描述基于RFC6675的快重...
自己总结整理的关于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头相关的信息,例如mss、sack、win等字段是什么含义,从英文网站上下载的,转换为pdf了,如果要看原文,直接点击pdf上的链接即可
TCP Tahoe算法、TCP Reno算法、TCP New Reno算法、TCP SACK算法、TCP FACK算法和TCP Vegas算法 性能对比 拥塞窗口、阈值变化、吞吐量、网络效率、带宽利用率 拥塞控制能力对比 第三项实验——仿真与...
查了很久的资料,文中列出了TCP协议各个版本的理解,不同点以及改进。适合网络学习者查看和了解。
提出一种以TCP协议为基础的路径损耗确认(TCP-PLACK)机制来代替TCP选择确认机制(TCP-SACK)。每当一个TCP接收方在断开或切换后而连接到一个新的接入点时, 上述的TCP-PLACK机制就会发送一个特殊的确认, 其中包含有...
size = TCPOLEN_SACK_BASE_ALIGNED (4) + n TCPOLEN_SACK_PERBLOCK (8) only four options will fit in a standard TCP header.
在TCP拥塞控制中主要采用TCP Tahoe,TCP Reno,TCP New Reno以及TCP Sack四种方法,其中TCP New Reno对快速恢复算法进行了改进,通过对TCP协议中的Reno进行可视化处理,实行对网络拥塞的有效管理。而IP拥塞控制方法...
分析了SACK机制的性能,根据TCP协议改进思想,通过模拟仿真展示了改进后无线网络中SACK机制的性能。
网工必备,wireshark软件学习,协议分析,HTTP 协议报文抓包实实例仅供学习。OCSP、TCP_SACK等。。
NULL 博文链接:https://cjw974music-heart.iteye.com/blog/2086139