注:此文章为学习B站姜晔老师的《网络数据分析从入门到精通》课程笔记
1、TCP数据包重传的基本原理
(1)TCP重传机制的必要性
当基于TCP的网络传输出现错误时,最基本的错误恢复方式就是重传数据包。这种机制专门被设计用来应对数据包丢失的情况(比如:路由器流量负载过重、应用程序出现故障或者临时性的网络中断导致数据包丢失)。数据包层次上的移动速度非常快,数据包的丢失通常也只是暂时性的,因此TCP能否检测到数据包的丢失,并从中进行恢复就显得极其重要。
(2)重传计时器
TCP重传理论中,重传计时器是用于决定是否有必要重传的重要机制,重传计时器维护着重传超时(RTO—Retransmission Time Out)。在使用TCP开始传输数据包时,重传计时器会被启动,当收到ACK数据包时,重传计时器就会停止。从发送数据包到接收到确认数据包的时间称为RTT,将若干个RTT时间求和并计算平均值就是RTO值,但在确认RTO值之前,数据的传输操作使用默认RTT值,该设置用于主机之间的初始通信,并基于接收到的数据包的RRT进行调整,最终形成RTO值。一旦RTO值确定,重传计时器就被用于每个传输的数据包,从而确定数据包是否丢失。
(3)TCP重传的流程

当发送方发送了数据包,但没有收到接收方的ACK,发送方会假设自己发送的数据包没到接收方,数据包已经丢失。因此发送方会进行重传,如果到达了等待ACK的极限值还未收到ACK数据包,发送方就会以翻倍的RTO值再次发起重传……一般而言,windows操作系统会重传5次,linux操作系统重传15次(该值可修改)(实际上,RTO值的计算有专门的公式,这里的2倍关系只是便于阐述)。
(4)wireshark分析TCP的重传机制
发送方一直未收到接收方的ACK数据包,便会主动发起重传

2、快速重传的机制
(1)因一个数据包乱序而重传
当接收方收到乱序的数据包时,就会发送重复的ACK数据包。TCP在其头部使用Seq和ACK字段确保数据被可靠传输,并以发送的顺序在接收端重组。当接收方遇到不符合顺序的序列号,就会认为数据包丢失了,为了能正确重组数据,接收方必须得到丢失的数据包,因此会接收方发送一个包含丢失数据包序列号的ACK数据包,这样发送方就知道需要重传哪个数据包。

当发送方收到3个来自接收方的重复的ACK,发送方就会假设数据包确实丢失了,就会立刻发起快速重传机制,一旦发起了快速重传,就会暂停发送其他数据包,直到丢失数据包正确传到接收方为止。
Q:为什么规定发送方要收到3个重复ACK就认为数据包丢失呢?
A:网络数据包有时候在传输过程中会出现乱序的情况,乱序的数据包一样会触发重复ACK数据包。但是由于出现乱序而重传没有必要,由于一般乱序的距离不会相差太大,比如3号数据包可能会到5号数据包后面,但不太可能跑到7号数据包后面,所以限定成3个或以上就可以很大程度上避免由于乱序而导致的快速重传。

(2)丢失多个数据包的重传机制
假设发送方发送了8个数据包,但是2号与3号数据包丢失,1、4、5、6、7、8号数据包抵达了接收方,并且触发了ACK2(即通知发送方未收到2号数据包),对于发送方来说只能通过ACK2知道2号数据包丢失了,并不知道还有哪些数据包有丢失,因此在重传了2号数据包之后应该传哪一个呢?对于此情况就三种方案:
方案1:把3-8号都重传一次(效率低)
方案2:接收方收到2号后,回复ACK3,发送方就知道3号也丢失了,就会重传3号数据包,当接收方收到3号数据包后,直接会回复ACK9。(New Reno技术)(缺点:当丢包量很大时,需要花费多个RTO重传所有丢失的数据包)
方案3:接收方在请求重传2号数据包时,顺便把收到的数据包告诉发送方(例如:在收到4号数据包时,告诉发送方已收到4号,但没有收到2号;当收到5号数据包时,告诉发送方已收到4、5号,没收到2号),这样发送方就可以对丢包的细节了如指掌,因此发送方在快速重传2号数据包之后会接着重传3号数据包,然后再传9号数据包。(SACK技术)

第10课 TCP重传技术的研究相关推荐

  1. TCP协议调优-强制快速重传技术(Spurious retransmissions)

    RTT Distribution一般如下图: 以上数据来自google.com.注意大于1秒的RTT有大约2.5%.而超时重传的概率有0.8% - 2.4%. RTO(Retransmission T ...

  2. Netty干货分享:京东京麦的生产级TCP网关技术实践总结

    1.引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关.在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用.高性能.高稳定的 ...

  3. TCP重传与超时机制:解锁网络性能之秘

    目录标题 一.TCP重传(TCP Retransmission) 1.1 重传原理与机制(Retransmission Principles and Mechanisms) 二.TCP超时(TCP T ...

  4. 《区块链跨链技术进展研究》论文笔记

    <区块链跨链技术进展研究>论文笔记 1 前言 2 区块链的跨链需求及技术难点 2.1 区块链跨链的研究目的 2.2 区块链跨链主流的解决方案 2.2.1 公证人机制 2.2.2 侧链/中继 ...

  5. 第一课 大数据技术之Fink1.13的实战学习-部署使用和基础概念

    第一课 大数据技术之Fink1.13的实战学习 文章目录 第一课 大数据技术之Fink1.13的实战学习 第一节 Fink介绍 1.1 Flink介绍背景 1.2 Flink 的应用场景 1.3 流式 ...

  6. TCP/IP技术回顾(3)—网际层

    续TCP/IP技术回顾(2)-网络接口层 主要根据课本<高级计算机网络>李向丽整理. 1.4 网际层 网际层的主要任务有:为主机和路由器接口分配一个全网唯一的地址(IP地址),实现IP地址 ...

  7. Linux内核超级装备eBPF技术详细研究

    Linux内核超级装备eBPF技术详细研究 文章目录 Linux内核超级装备eBPF技术详细研究 eBPF定义 定义一(ebpf.io的定义) 定义二(Cilium的定义) eBPF的应用 一个采用e ...

  8. 利用TCP重传机制来玩端口敲门服务

    TCP无法在连接建立之前进行认证,对于无连接的UDP而言,或者也将不能. TCP有fastopen机制,但并不好用,本文的想法就是基于fastopen的,让第一个SYN包携带数据,然而又不能让它到达T ...

  9. VB多层防火墙技术的研究-状态检测

    word完整版可点击如下下载>>>>>>>> VB多层防火墙技术的研究-状态检测(源代码+系统+开题报告+中期报告).rar-VB文档类资源-CSDN下 ...

最新文章

  1. (0064)iOS开发之枚举NS_ENUM和NS_OPTIONS的区别
  2. zlib和openssl相关库错误的解决
  3. linux command find
  4. Matlab | Matlab从入门到放弃(11)——基于Matlab的矩阵分解、幂和指数
  5. Java 实现排序
  6. echarts 卡_图表太丑怎么破,ECharts神器带你飞!
  7. php 5.0打印数据库,thinkphp5.0数据库操作
  8. Unknown system variable 'query_cache_size'
  9. HTTP请求方式中GET和POST的区别?
  10. 数据库基础:什么是列?数据类型是什么?
  11. 浅谈混合精度训练imagenet
  12. python 中读取yaml
  13. Dex2Oat执行参数总结
  14. c语言flag,flag是什么意思
  15. 算法基础:用递归解决排列组合问题
  16. Apache Ranger:统一授权管理框架
  17. 445/139端口的作用与危害
  18. 爬虫-1-基础和urllib
  19. IEC60958和IEC61937
  20. @loj - 2478@「九省联考 2018」林克卡特树

热门文章

  1. android使用系统字体文件,Android 自定义字体,更换系统默认显示的字体使用自定义字体...
  2. 五一黄金周度假模式即将开启,伦敦旅游景点推荐
  3. 硬盘结构受损—数据恢复
  4. matlab R2011a汉化包,MATLAB R2011a (7.12)发布了,MATLAB R2011a最新功能
  5. Ubuntu环境QT出现:-1: error: cannot find -lGL(已解决)
  6. 总是提示下载百度云管家的解决办法
  7. Java面试题2021,智慧树java程序设计答案
  8. 月子中心加速洗牌,“马太效应”下爱帝宫掀起资本浪潮?
  9. windows7显示摄像头图标 ECap
  10. rs结果集可以传递给另一个jsp吗_从未如此高调 宝骏RS-5独家设计解读