`

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

 

分享到:
评论

相关推荐

    rfc2018 TCP

    为了解决上述问题,《RFC 2018》提出了选择性确认(SACK)机制,这是一种更为高效的确认机制,它可以显著提高TCP在网络条件不佳时的性能。 **SACK的工作原理:** 1. **SACK选项的添加:** 在TCP数据段中增加了一个...

    OPNET仿真软件中FAST TCP协议的实现

    - 配置延迟确认方案(`tcp_del_ack_scheme`)以及最大确认延迟(`max_ack_delay`)。 - 确定是否启用窗口缩放(`window_scaling_enabled`)、选择性确认(SACK,`sack_enabled`)等功能。 - 指定是否支持Nagle算法...

    linux tcp_tcp

    8. **TCP选项**:TCP头中包含多个可选字段,如MSS(最大段大小)、Timestamps用于计算往返时间(RTT)和防止序号回绕,SACK(选择性确认)允许接收端告诉发送端哪些数据段未收到。 9. **性能调优**:在Linux中,...

    tcp.rar_LINUX TCP

    6. **选项与扩展**:TCP支持多种选项,如最大段大小(MSS)、窗口缩放、选择确认(SACK)等,这些选项可以提高TCP的性能和适应性。 7. **TCP连接的释放**:TCP连接的关闭遵循四次挥手的过程,确保双方都能正常结束...

    实验三 传输层的TCP协议分析-指导书1

    实验中,学生需要通过实际操作和数据分析来理解这些概念,例如观察RTT(往返时间),计算丢包率,查看不同操作系统的初始cwnd(拥塞窗口大小)差异,以及是否使用Delay ACK(延迟确认)策略。这些实践将帮助学生从...

    TCP-Reno.zip

    在实际操作中,执行TCP_Reno的实验可能包括模拟不同网络条件,观察TCP_Reno如何适应这些条件,以及分析其性能指标,如丢包率、延迟和吞吐量。实验者可以通过网络模拟软件,如ns-3,或者在真实的网络环境中进行这些...

    tcp.rar_tcp_win和linux下的tcp

    Linux内核的TCP实现具有高度可配置性,可以通过内核参数调整各种性能策略,如TCP拥塞控制算法(如NewReno、SACK、Hystart等)、超时和重传策略、TCP缓冲区大小等。Linux的TCP/IP栈在高性能服务器环境和大规模网络...

    11.1 TCP 的错误恢复特性 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    首先,TCP使用序号和确认号作为其核心机制来跟踪和验证数据包的发送和接收。每个TCP段都包含一个序列号,标识该段中的第一个字节的位置,以及一个确认号,指示接收方期望接收到的下一个字节的序列号。这种机制允许...

    Linux 4.4.0 内核源码分析 TCP实现

    分析工作开始之前需要对Linux内核进行准备,了解用户层的TCP工作原理是基础,这包括对RFC文档的阅读,如RFC793定义了传输控制协议的基本规则,RFC1323介绍了TCP的高性能扩展,RFC2018讨论了TCP的选择性确认(SACK)...

    六、TCP重传、滑动窗口、流量控制、拥塞控制1

    为了解决数据的破坏、丢包、重复和分片顺序混乱等问题,TCP 实施了多种机制,包括序列号、确认应答、重传控制、连接管理和窗口控制。 1. **重传机制** - **超时重传**:TCP 在发送数据时启动一个定时器,如果在...

    TCP协议优化思路

    除了传统的基于重复ACK和重传定时器的丢包检测方法外,还可以引入选择确认(SACK)等机制来更准确地检测丢包,从而更快地做出响应。 - **拥塞窗口调整机制**:传统的拥塞窗口调整机制(AI-MD)虽然简单有效,但在高速...

    TCP.rar_tcp

    2. **可靠性**:TCP通过序列号、确认应答、超时重传、流量控制和拥塞控制等机制,保证了数据的正确接收。如果数据包在网络中丢失或损坏,TCP会重新发送。 3. **顺序传输**:TCP将数据分割成多个数据段进行传输,并...

    tcp协议详解及其规范

    TCP在实际应用中可能遇到各种问题,如延迟开窗(Slow Start)、TCP中间宿主机问题、TIME_WAIT状态等,这些问题都需要通过理解和优化TCP机制来解决。 综上所述,TCP协议的详解涵盖了连接建立、数据传输、可靠性保障...

    TCP.rar_NS2中TCP的仿真_newreno_ns2_ns2 tcp_tcp reno

    首先,TCP/Reno是TCP的第一个增强版本,它引入了快速重传和快速恢复机制,以提高网络效率并减少拥塞。当连续收到三个重复确认时,Reno会立即重传丢失的数据段,而无需等待重传定时器到期,从而更快地恢复数据传输。 ...

    传输层--TCP的超时重传、流量控制和拥塞控制1

    《传输层TCP的超时重传、流量...总之,TCP通过这些复杂而精细的机制,确保了网络数据传输的可靠性、高效性和稳定性。这些机制协同工作,使得TCP成为互联网上广泛使用的传输协议,为各种应用提供了稳定的数据通信基础。

    tcp-reno.zip_cognitive_reno_tcp reno_tcp reno wireless_拥挤算法reno

    TCP Reno通过SACK(选择性确认)和其他策略来实现这一点,以更精确地检测和应对网络拥塞。 压缩包中的文件"tcp-reno.c"很可能包含了TCP Reno算法的源代码实现,这为我们提供了深入研究和理解TCP Reno如何适应认知...

    TCP.rar_transport layer

    TCP还有一些优化措施,比如延迟ACK(延迟确认)可以减少不必要的往返时间,Nagle算法则合并小的TCP段以减少网络中的小包数量。此外,TCP还引入了SACK(选择性确认)选项,允许接收方告诉发送方哪些段已经成功接收,...

    TCP网络拥塞控制

    TCP Reno在快速恢复算法中引入了SACK(选择确认)机制,允许接收方报告具体丢失的数据段,提高了恢复效率。TCP Vegas则关注于网络延迟变化,通过监控往返时间(RTT)的变化来预判网络拥塞,较早地调整发送速率。TCP ...

    与修订TCP相关的RFC各个版本分别主要解决了什么技术问题

    - **技术问题**: 改进了TCP中的窗口管理和确认机制,以适应更复杂网络环境的需求。 - **解决方案**: 描述了一种更高效的窗口与确认策略,有助于提高TCP的性能。 #### 4. RFC 879 (1983年) - **技术问题**: 明确了...

    tcp.zip_9260_LINUX TCP

    - **特定功能支持**:可能包含对某些特定TCP选项或扩展的支持,如TCP Fast Open、延迟确认或SACK(选择性确认)。 - **故障恢复和可靠性**:在高可用性场景下,可能有额外的错误检测和恢复机制,比如心跳检测、连接...

Global site tag (gtag.js) - Google Analytics