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

(1)ACK的定义:

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

(2)ACK的作用

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

(3)ACK机制

接收方在收到数据后,不是立即会给发送方发送ACK的。可能有以下原因:

A 收到数据包的序号前面还有需要接收的数据包。因为发送方发送数据时,并不是需要等上次发送数据被ACK就可以继续发送TCP包,而这些TCP数据包到达的顺序是不保证的,这样接收方可能先收到后发送的TCP包(注意提交给应用层时是保证顺序的)。

B 为了降低网络流量,ACK有延迟确认机制。

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

(4)ACK延迟确认机制

接收方在收到数据后,并不会立即回复ACK,而是延迟一定时间。一般ACK延迟发送时间为200ms,但是这个200ms并非收到数据后需要延迟的时间。系统有一个固定的定时器每隔200ms会来检查是否需要发送ACK包。这样做有2个目的:

  1. 这样做的目的是ACK是可以合并的,也就是指如果连续收到两个TCP包,并不一定需要ACK两次,只要回复最终的ACK就可以了,可以降低网络流量。
  2. 如果接收方有数据要发送,那么就会在发送数据的TCP数据包里,带上ACK信息。这样做,可以避免大量的ACK以一个单独的TCP包发送,减少了网络流量。

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

二:浅议SACK

(1)SACK:

Selective Acknowledgement,选择性确认。

(2)功能

TCP收到乱序数据后会将其放到乱序序列中,然后发送重复ACK给对端。对端如果收到多个重复的ACK,认为发生丢包,TCP会重传最后确认的包开始的后续包。这样原先已经正确传输的包,可能会重复发送,降低了TCP性能。为改善这种情况,发展出SACK技术,使用SACK选项可以告知发包方收到了哪些数据,发包方收到这些信息后就会知道哪些数据丢失,然后立即重传丢失的部分。

需要注意的是只有收到失序的分组时才会可能会发送SACK,TCP的ACK还是建立在累积确认的基础上的。也就是说如果收到的报文段与期望收到的报文段的序号相同就会发送累积的ACK,SACK只是针对失序到达的报文段的。

(3)格式

SACK包括了两个TCP选项,一个选项用于标识是否支持SACK(SACK_permitted),是在TCP连接建立时时发送;另一种选项则包含了具体的SACK信息。

1)SACK_permitted选项

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

2)SACK信息选项

SACK信息选项用于通告对端接收数据的信息。

该选项参数告诉对方已经接收到并缓存的不连续的数据块,注意都是已经接收的,发送方可
根据此信息检查究竟是哪个块丢失,从而发送相应的数据块。
   *    Left Edge of Block
        不连续块的第一个数据的序列号
   *    Right Edge of Block
        不连续块的最后一个数据的序列号之后的序列号

TCP延迟确认机制和SACK相关推荐

  1. TCP的ACK原理和延迟确认机制

    原文地址:https://blog.csdn.net/gamekit/article/details/53898802 一.ACK定义 TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表 ...

  2. 关于TCP的确认、重传机制

    前些日子,自己在学习计算机网络,结课后,对于GBN 和 选择重传机制的原理很清晰,但是到了TCP确认及重传机制时,老师讲的也很模糊,网上搜了很多,也没有说的很清楚的. 今天刚才又是期末复习时间,自己又 ...

  3. TCP的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK确认机制

    1.TCP的状态FLAGS字段状态 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 对于我们日常的分析有用的就是前面的五个字段:它们 ...

  4. TCP/IP卷一:87---TCP拥塞控制之(对标准算法的改进:NewReno、采用选择确认机制、转发确认(FACK)和速率减半、限制传输、拥塞窗口校验)

    经典的标准TCP算法在传输控制领域做出了重大贡献,尤其针对网络拥塞崩溃这一难题,取得了显著效果 然而,仍然可以找到值得改进的地方.考虑到TCP的普遍使用性,越来越多的研究致力于使TCP在更广泛的环境里 ...

  5. TCP的确认延时机制及Windows系统的确认延时修改

    TCP本身属面向链接的通讯协议.通讯双方的每一个收发动作,需要以通讯链路正常为前提.因此TCP协议内部提供了默认的ACK验证机制. 而ACK验证方式存又与操作系统有关,在TCP中,对数据的确认往往是延 ...

  6. TCP重传与确认机制

    TCP片段重传计时器以及重传队列: TCP按照以下特定顺序工作: 1.放置于重传队列中,计时器开始 包含数据的片段一经发送,片段的一份复制就放在名为重传队列的数据结构中,此时启动重传计时器.因此,在某 ...

  7. TCP/IP协议栈:TCP超时重传机制

    目录 基础概念 重传超时时间RTO RTO的设定 连接往返时间RTT RTT的计算 Karn算法 往返时间测量 重传 拥塞避免算法 快速重传和快速恢复算法 重新分组 网络数据包丢失,重传和重复确认 是 ...

  8. TCP协议-TCP超时重传机制

    一.前言 在TCP通信中,既要保证在网络正常的情况下提供可靠的交付服务,又要保证在网络异常的情况下也提供可靠的交付服务.而TCP的超时重传机制就是解决在网络异常情况下的可靠传输问题的. 二.通过序列号 ...

  9. TCP 是一个可靠传输的协议,那我们来重点介绍 TCP 的重传机制、滑动窗口、流量控制、拥塞控制。

    TCP 巨复杂,它为了保证可靠性,用了巨多的机制来保证,真是个「伟大」的协议,写着写着发现这水太深了... 本文的全部图片都是小林绘画的,非常的辛苦且累,不废话了,直接进入正文,Go! 相信大家都知道 ...

最新文章

  1. Apriltag可用图片:TAG16H5
  2. linux jemalloc 内存分配器 安装与使用
  3. 全新 Hexo Material Design 主题 Mellow
  4. NumPy - np.linspace()
  5. 从运维角度浅谈MySQL数据库优化
  6. web前端基础(08html5新标签)
  7. 《C程序设计新思维》一6.3 不使用malloc的指针
  8. TensorFlow精进之路(九):TensorFlow编程基础
  9. 超好用的抠图软件:InPixio Photo Eraser mac版
  10. ab st语言编程手册_AB-PLC自学笔记
  11. 基础回顾:10W+ 字 C 语言入门教程(上)
  12. ckfinder 配置 php,GitHub - itxq/ckfinder: CkFinder3.5.1 for PHP 优化版 (添加又拍云存储)...
  13. sicily 9562 SUME
  14. 从初级到资深:程序员的职业生涯思考与可迁移技能培养
  15. 【生信】基因组学相关基础知识2
  16. MATLAB直接输出棋盘格标定板
  17. 大龄程序猿的新出路:改行学中医!40岁程序员,重新高考学中医,如今混得还不错!...
  18. 金庸秘笈英汉互译(zz)
  19. jQuery里面的选择属性和修改属性
  20. libnet编译,windows/Linux

热门文章

  1. Java Rest path_java – 具有多种类型的REST PathParam
  2. 【小程序专栏】个人及企业资质该如何注册小程序?
  3. 公交管理系统的设计与实现
  4. 计算方法--函数插值
  5. 云计算技术的应用和前景
  6. Gradle配置阿里云仓库
  7. matlab-colormap-contourf函数
  8. 基于javaweb的蓝天幼儿园管理系统(java+springboot+thymeleaf+html+mysql)
  9. 电子制造企业如何做好供应商交期管理?可以从这3方面着手
  10. senseTime,FaceU人脸识别技术