tcp之快速重传与恢复

摘要:
//正如编写网络程序的每个人都知道的,tcp窗口控制分为缓慢启动阶段和拥塞避免阶段。重传机制包括快速重传/恢复和超时重传。互联网上有很多关于快速重传的文章。网络流量描述具有实时流量条件的网络状态。慢速发送器发送序列号为1的ack。因为ack的序列号总是(请求序列号上的+1),所以接收器在收到1后立即回复序列号是(1+1=2)ack。
  本文为原创,转载请注明:http://www.cnblogs.com/gistao/   Background

写网络程序的都知道,tcp的窗口控制分为慢启动阶段和拥塞避免阶段,重传机制有快速重传/恢复和超时重传。网上关于快速重传的文章很多,但质量参差不齐,这里对它的设计背景和原理总结下。

Concept

tcp之快速重传与恢复第1张

rtt,即网络往返时间。

慢启动过程,指的是请求窗口的变化过程,是指数级的,这变化可不慢吧,这里说它慢是说窗口每次都要从1开始,需要经过好几个rtt才能达到理想的窗口数。

Networktraffic

用实时路况描述网络状态比较合适,分成三个状态。

  • 畅通
    • 发送方发送序列号为1,2,3,4,5的段(包),立即收到这些1,2,3,4,5段对应的的ack,网络状况非常的好。
  • 缓慢
    • 发送方发送序列号为1,2,3,4,5的段,由于ack的序列号总是在(请求序列号上+1),接收方收到1后立即回复序列号是(1+1=2)的ack,这个2也意味着等待下一个请求序列(2)的段到来,假设2段丢失了,接收方收到3后,这个并不是它预期的,它期望2,所以继续回复序列号是2的ack,同理在收到4和5后,连续发送了三个重复的ack。
  • 拥堵
    • 接着上边继续说,发送方在rtt时间内连ack都没收到,就表示拥堵了,拥堵的路况比缓慢要差,最起码缓慢路况还是可以收的到ack的。
Fast retransmit

tcp被设计成一个文质彬彬的协议,如果网络丢包了,它会非常谨慎,使用超时重传策略,对应的处理就是从新开始慢启动阶段,然后再进入拥塞避免阶段,所以性能非常的差。所以重传策略要尽可能的使用快速重传/恢复,或者说快速重传/恢复是较理想的重传方式,注意快速重传对应的同序列号ack总共是4个(3个重复+1个确认),如果前面举的例子,2段没丢失而3段丢失了,这样只有两个连续重复ack,就不能使用快速重传了。当然有一些针对的优化算法,比如 tlpfack 等。

这是快速重传和恢复对应的规范文档

免责声明:文章转载自《tcp之快速重传与恢复》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇memset函数及注意事项Linux 各种软件的安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ios 网络开发(CFNetwork)

CFNetwork 存在于CoreFoundation中的一个低级别但高性能的网络框架。BSD套接字的扩展,CFNetwork物理上和理论上都基于BSD套接字。有大量的Cocoa框架依赖于CFNetwork。 CFNetwork更侧重与网络协议,Foundation则更倾向于API数据请求等,虽然框架也提供了一些操作,但是远不如CFNetwork丰富。在学...

android 网络编程--socket tcp/ip udp http之间的关系

网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象。 下面是应用层、运输层,网络层、链路层通信协议概图。我们经常接触到的一般是: http协议:应用层协议,并且http协议是基于tcp连接的,主要解决的是如何包装协议的 tcp协议:运输层...

linux网络配置(ifcfg)

将linux主机接入到网络需要配置哪些配置项?   IP/NETMASK:本地通信。   路由(网管):跨网络通信。   DNS服务器地址:基于主机名通信。     DNS服务器有三种:主/备用DNS服务器/第三备份dns服务器。     DNS服务器指定需要修改配置文件/etc/resolv.conf     主机名配置:修改/etc/sysconfig...

Oracle主键ID设置自动增长(序列+触发器)

----创建表 create  table  users ( user_id number(6) not null, user_name varchar2(20) not null, user_pwd varchar2(20) not null, user_email varchar2(20), user_intro varchar2(20), prima...

接口抓包测试工具Charles

作用: 1.抓取网络封包 (web/app)    2.断点替换  -- 请求断点               -- 响应断点    3.弱网测试    4.过滤    5.黑名单 Charles的原理: Charles是一款Http代理服务器和Http监视器,当移动端在无线网连接中按要求设置好代理服务器,使所有对网络的请求都经过Charles客户端来转发...

智能手机跑大规模神经网络的主要策略

计算机具有高储量的硬盘和强大的CPU和GPU。但是智能手机却没有,为了弥补这个缺陷,我们需要技巧来让智能手机高效地运行深度学习应用程序。 介绍 深度学习是一个令人难以置信的灵活且强大的技术,但运行的神经网络可以在计算方面需要非常大的电力,且对磁盘空间也有要求。这通常不是云空间能够解决的问题,一般都需要大硬盘服务器上运行驱动器和多个GPU模块。 不幸的是,...