1、TCP提供的是可靠传输,它通过接收方发送一个确认报文ACK来提供这种可靠性。但是数据报文和确认报文都可能会丢失,所以TCP会给发出的数据报文设置一个时间,如果超时了则进行重传

2、Karn's Algorithm:当发生了一次超时重传之后,我们不能根据发回的对于重传数据的ACK更新RTT和RTO(retransmission timeout 重传时间)的值。因为我们不知道这个ACK是对于第一次传送的数据的确认(可能是第一次发送的数据在网络中有延时或者是它对应的ACK报文有延时)还是对重传数据的确认。直到我们收到不是对应于重传数据的ACK报文,才能根据它更新RTT和RTO的值

3、Congestion Avoidance Algorithm:拥塞避免算法,首先设置两个变量,拥塞控制窗口cwnd,慢启动阈值ssthresh,然后按如下步骤操作:

1)初始化cwnd为一个报文段大小,ssthresh为65535个字节

2)TCP不能发送超过拥塞控制窗口(congestion window)和流量控制窗口(advertised window)之中较小值的数据

3)当发生拥塞时(超时或者收到三个重复的ACK),ssthresh被设置为当前窗口大小(两个窗口的较小值)的一半,并且如果拥塞是超时导致的,cwnd被设置为一个报文段大小

4)当有新的数据被确认时,我们增加cwnd的值,这时要根据cwnd和ssthresh之间的关系分别对待,当cwnd<ssthresh的时候,使用慢启动算法,即指数型增长cwnd,当cwnd>=ssthresh的时候就采用拥塞避免算法,线性增长cwnd,具体的实现如下图所示

4、Fast Retransmit and Fast Recovery Algorithms:快速重传和快速恢复算法,当发送方收到三个重复的ACK报文段时,说明对应的报文段丢失了,于是没有等到超时,发送方就重发了相应的报文段,这就是快速重传。而且重传之后直接进入拥塞避免而不进入慢启动,这就是快速恢复。这里需要注意的是,当接收方收到一个乱序的报文段时,会立即发送ACK报文,告诉发送方自己收到了一个乱序的报文并且说明自己想得到的报文段的序号

5、TCP连接通常会遇到source quench,host unreachable,network unreachable这三类ICMP错误报文。当收到source quench时,通常会导致cwnd变为一个报文段,然后慢启动,但是ssthresh不变。当收到host unreachable 和 network unreachable这类报文时,通常会将它忽略,然后不断重传数据,当然,最后可能因为超时而终止

6、当发生超时重传的时候,TCP不一定要重传和之前一模一样的报文段,而是可以接下来要传输的数据也放到重传的报文段中,称为repacketization,这可以提高传输的效率。之所以能够这样做,是因为TCP是通过传输数据的字节编号来进行确认的,而不是传输的报文段的编号

《TCP/IP详解 卷一》读书笔记-----TCP超时重传的更多相关文章

  1. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  2. TCP/IP详解 卷一学习笔记(转载)

    https://blog.csdn.net/cpcpcp123/article/details/51259498

  3. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  5. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——13

    2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...

随机推荐

  1. 重新想象 Windows 8 Store Apps 系列文章索引

    [源码下载][重新想象 Windows 8.1 Store Apps 系列文章] 重新想象 Windows 8 Store Apps 系列文章索引 作者:webabcd 1.重新想象 Windows ...

  2. 数据库表被锁表,select会等待。

    SELECT * FROM dbo.Table_1 WITH(NOLOCK) 这样就可以不用等待,但数据读的是被锁之前的数据,表被锁了,肯定会有对表的update,delete操作. 如果对数据的准确 ...

  3. Introduction to ASP.NET 5

    ASP.NET 5 is a significant redesign of ASP.NET. This topic introduces the new concepts in ASP.NET 5 ...

  4. Android 提供的一系列辅助系统开发工具

    除了软件本身的代码之外,Android 还提供了一系列工具来辅助系统开发,这些主要的工具包括: aapt(AndroidAssetPackagingTool):用于建立zip兼容的包(zip.jar. ...

  5. 【GOF23设计模式】策略模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_策略模式.CRM中报价策略.GUI编程中布局管理器底层架构 package com.test.strategy; /** ...

  6. css导航栏

    几个导航栏也算对学过知识的回顾,总有新的收获,下面是学习过程中敲的代码: <!DOCTYPE HTML> <html> <head> <title>&l ...

  7. elasticsearch分词插件的安装

    IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Luen ...

  8. C#实现图标批量下载

    本文略微有些长,花了好几晚时间编辑修改,若在措辞排版上有问题,请谅解.本文共分为四篇,下面是主要内容,也是软件开发基本流程. 阶段 描述 需求分析 主要描述实现本程序的目的及对需求进行分析,即为什么要 ...

  9. [C/C++] VS 2015 C++ 插件

    Visual Studio2015 Community一些必备插件 ReSharper C++ 各种语言版本的代码重构,代码风格,代码修正功能,非常强大,可惜不是免费的,不过好在可以破解呢. Vias ...

  10. 【转】self.myOutlet=nil、viewDidUnload、dealloc的本质剖析

    对于iphone开发人员来说,内存管理是极为重要的技巧,哪怕程序的功能再强大,设计再漂亮,如果内存控制不好,也难逃程序莫名退出的噩运,这与网页开发是完全不同的. 内存控制里面有很多门道,在这里分析一下 ...