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. LeetCode131:Palindrome Partitioning

    题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...

  2. Hibernate Validator

    http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#example-group-interfaces

  3. HDU 2577---How to Type

    HDU  2577 Description Pirates have finished developing the typing software. He called Cathy to test ...

  4. Struts2中 Result类型配置详解

    一个result代表了一个可能的输出.当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出.在com.opensymphony.xwor ...

  5. PHP学习笔记:万能随机字符串生成函数(已经封装好)

    做验证码用到的,然后就把这个函数封装起来,使用时候要设置2个参数: $str设置里要被采集的字符串,比如: $str='efasfgzsrhftjxjxjhsrth'; 则在函数里面生成的字符串就回从 ...

  6. js小数计算小数点后显示多位小数(转)

    首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num ...

  7. ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

    1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NE ...

  8. Exchange 2013 申请证书

    最近在了解Exchange2013,Exchange2013相对于Lync安装相对容易一点,安装完成并不代表就可以用了,还要一些基本的配制,首先介绍一下如何从证书服务器申请 CA. 一.DNS 创建解 ...

  9. javascript数组浅谈2

    上次说了数组元素的增删,的这次说说数组的一些操作方法 join()方法: ,,] arr.join("_") //1_2_3 join方法会返回一个由数组中每个值的字符串形式拼接而 ...

  10. English Training Material - 04

    Inviting What kinds of social activities in your city could be appropriate ways of entertaining visi ...