`

TCP延迟确认机制和SACK

阅读更多

一 TCP的ACK机制和延迟确认机制

ACK机制

TCP协议中,接收方成功接收到数据后会回复一个ACK数据包,表示已经确认接收到ACK确认号前面的所有数据。

发送方收到了ACK,表明接收方已经接收到数据,发送方如果在一定时间内没有收到服务端的ACK确认包,就会重新发送数据包。保证了数据可靠传输。

ACK的值到达最大值后,又会从0开始。

ACK延迟确认机制

接收方在收到数据后,并不会立即回复ACK,而是延迟一定时间。系统有一个固定的定时器每隔200ms会来检查是否需要发送ACK包。这样做有是通过两种手段达到提高传输效率的目的:

  1. ACK是可以合并的,也就是指如果连续收到两个TCP包,并不一定需要ACK两次,只要回复最终的ACK就可以了。
  2. 如果接收方有数据要发送,那么就会在发送数据的TCP数据包里,带上ACK信息

比如:正常TCP断开是4次挥手,但是抓包抓到大部分都是3次挥手。就是延迟确认的结果

 

二 SACK(Selective Acknowledgement)

https://blog.csdn.net/wdscq1234/article/details/52503315

tcp的重传机制会面临到一个重传什么包的问题,因为发送端也不清楚丢失包后面传送的数据是否有成功的送到。原因是TCP的ACK机制,只有低于ACK number的片段都被收到才有进行ACK,out-of-order的片段只能是等待,同时,这个时间窗口是无法向右移动的。

举个例子:

1. 服务发送4个片段给客户端,seg1(seq=1,len=80),seg2(seq=81,len=120), seg3(seq=201,len=160),seg4(seq=361,len=140)

2. 服务器收到seg1和seg2的ACK = 201,所以此时seg1 seg2变成发送并已经确认范畴的数据包,被移除滑动窗口,此时服务器又可以多发80+120 byte数据

3. 假设seg3由于某些原因丢失,这个时候服务器仍然可以向客户端发送数据,但是服务器会等待seg3的ACK,否则窗口无法滑动,卡主了

4. seg3丢失了,即使后面的seg4收到了,客户端也无法告知服务器已经收到了seg4,试想一下,如果窗口也够大,服务器可以继续持续发送更多的片段,那么这些片段被客户端接收,只能存放到队列中,无法进行确认

 

因为后续OUT-OF-ORDER的报文段的接收状况不清楚,发送端一般只能采取以下两种重传方式:

1. 只重传超时的数据包,这种方法比较适用于后面的数据包都能够正常接收的状况。但是如果后面丢失了很多包,那就需要一个一个的等待超时了,很浪费时间。

2. 重传丢失片段以及之后的所有包,这种方法在最坏的状况下,看起来效率还是挺高的,但是如果只有一个包丢失,就去重传后面所有接受到的包,流量浪费也是很严重的。

对于上面阐述的问题,RFC2018提供了一个SACK机制,有效的解决这个问题

 

SACK机制

SACK允许TCP单独确认非连续的片段,它包括了两个TCP选项,一个选项用于标识是否支持SACK(SACK_permitted);另一种选项则包含了具体的SACK信息。

1)SACK_permitted选项

该选项只允许在TCP连接建立时,有SYN标志的包中设置,也即TCP握手的前两个包中,分别表示通信的两方各自是否支持SACK。

2)SACK信息选项

SACK信息选项用于通告对端已接收的out-of-order数据的信息。发送方可根据此信息检查真正丢失的包,只重传相应的数据块。具体选项格式可参看另一篇文章《tcp头部选项

回到上面的例子:

客户端收到seg4的时候,发送seg3的ACK 会产生一个SACK的option(361~500),Server收到这个ACK后,就知道seg3丢失了,但是seg4已经收到了但是并没有确认,所以就只会重传seg3

 

分享到:
评论

相关推荐

    TCP RENO NEWRENO SACK

    讲解TCP reno newreno sack基本原理

    tcp.rar_ABRA New Reno tcp_agent in ns2_ns2 TCP sack_reno_tcp ren

    在ns2中仿真网络结构,在OTCL编码中,代理节点的协议代理分别设置为tcp/Reno、TCP/Newreno、TCP/Sack1和tcp/Vegas,来模拟这四种算法。附有仿真结果和实验报告。

    论文研究-用于分层移动IPv6网络拥塞控制的新机制.pdf

    提出一种以TCP协议为基础的路径损耗确认(TCP-PLACK)机制来代替TCP选择确认机制(TCP-SACK)。每当一个TCP接收方在断开或切换后而连接到一个新的接入点时, 上述的TCP-PLACK机制就会发送一个特殊的确认, 其中包含有...

    基于TCPNS2模拟

    (1)学习TCP的拥塞控制机制并了解TCP Tahoe、TCP Reno、TCP NewReno、TCP Sack的运行方式 (2)探讨TCP Vegas和Reno系列的TCP版本在网络上共同运行所遭遇的问题 (3)探讨TCP同步化现象出现的原因 (4)了解几个...

    TCP拥塞控制:Tahoe、Reno、NewReno与SACK算法概述与比较

    自己总结整理的关于TCP拥塞控制的PPT,主要介绍并比较了Tahoe、Reno、NewReno与SACK四种算法,并对拥塞的产生进行了深入剖析

    论文研究-无线网络中SACK与TFRC的友好性分析.pdf

    在无线网络中,TCP SACK机制被推荐代替TCP以获得更高的带宽利用率。对无线网络中SACK与TFRC的友好性进行了模拟实验,并给出了初步分析。结果表明,当网络拥塞达到一定程度时,SACK获得的吞吐量将大大超过TFRC,而...

    论文研究-基于非对称链路的SACK算法改进.pdf

    通过对非对称链路上拥塞控制问题及当前主要算法的讨论,针对其中存在的不足,基于目前的TCP拥塞控制机制,提出了一种适于非对称链路的SACK改进算法,提高了多个丢失分组的重传效率和网络吞吐量。

    tw-sack 最精炼的ajax框架

    tw-sack 最精炼的ajax框架 官方网站http://www.leigeber.com/

    TCP.rar_NS2中TCP的仿真_newreno_ns2_ns2 tcp_tcp reno

    在ns2中仿真网络结构,在OTCL编码中,代理节点的协议代理分别设置为TCP/Reno、TCP/Newreno、TCP/Sack1和tcp/Vegas,来模拟这四种算法。附有仿真结果和实验报告。

    论文研究-无线网络中选择性重传机制性能分析与改进.pdf

    分析了SACK机制的性能,根据TCP协议改进思想,通过模拟仿真展示了改进后无线网络中SACK机制的性能。

    TCP SACK突发分组丢失吞吐量模型

    利用Gilbert分组丢失模型描述端对端突发分组丢失特性,提出了基于RFC6675的快重传和快恢复模型,推导并基于该模型建立TCP SACK吞吐量模型。数值实验和仿真实验表明,快重传和快恢复模型能准确描述基于RFC6675的快重...

    TCP头信息详解(英文版 pdf)

    详细介绍来的TCP头相关的信息,例如mss、sack、win等字段是什么含义,从英文网站上下载的,转换为pdf了,如果要看原文,直接点击pdf上的链接即可

    TCP各个版本的理解与比较

    查了很久的资料,文中列出了TCP协议各个版本的理解,不同点以及改进。适合网络学习者查看和了解。

    对TCP/IP计算机网络拥塞控制的研究 (2014年)

    在TCP拥塞控制中主要采用TCP Tahoe,TCP Reno,TCP New Reno以及TCP Sack四种方法,其中TCP New Reno对快速恢复算法进行了改进,通过对TCP协议中的Reno进行可视化处理,实行对网络拥塞的有效管理。而IP拥塞控制方法...

    tcp.rar_Will

    size = TCPOLEN_SACK_BASE_ALIGNED (4) + n TCPOLEN_SACK_PERBLOCK (8) only four options will fit in a standard TCP header.

    NS2协议分析-计算机网络实验-华中科技大学

    第一项实验——仿真与测试TCP和UDP协议  网络性能的比较  公平性研究与探讨 第二项实验——仿真与测试TCP协议中的不同拥塞控制算法(端到端拥塞控制)  TCP Tahoe算法、TCP Reno算法、TCP New Reno算法、TCP ...

    论文研究-基于分组交换网络的B-Reno性能研究.pdf

    实验结果显示,B-Reno在分组交换网络中能取得高出Reno和New-Reno10%以上的吞吐率,达到与Sack相当的水平;同时,当与Reno(传统TCP)竞争共享信道时,B-Reno也具有良好的TCP友好性。实验结果表明B-Reno在分组交换...

    sack project

    NULL 博文链接:https://cjw974music-heart.iteye.com/blog/2086139

Global site tag (gtag.js) - Google Analytics