目前已经有了英文版第二版的TCPIP详解,中文版暂时还没有,但是英文版还是有好几处错误,作者和官方竟然没有维护一个勘误表。

个人阅读过程中针对TCP部分可能有问题的地方简单勘误一下

P596:示意图中最后一条TCP消息,Seq=K+1,作者写成了Seq=K。

P600:TCP同关示意图中最后一条TCP消息Seq=K+1,作者写成了Seq=K。

P609:第二行应该为Timestamp Echo Reply。

P650:tcp_retries1和tcp_retries2这两个参数控制的是重传总时间,而不是重传次数。这两个参数man page里面也错误的描述为控制重传次数了,网上的错误描述也很多。另外SYNACK的重传次数除了受到tcp_synack_retries影响外,还会受到SOCKET选项TCP_SYNCNT、TCP_DEFER_ACCEPT等的影响。

P737:Tahoe是4.3版本的BSD发布的,慢启动和拥塞避免也是4.3版本的BSD发布的。作者都描述为4.2版本了。

P768:在linux中关闭TCP连接的时候,rttvar、cwnd确实会保存到TCP metrics中,但是tcp建立连接时候并不会使用rttvar,而cwnd是拥塞窗口的最大值,并不是拥塞窗口,而且只有在lock情况才会使用到cwnd。

P742:对于limited transmit,作者描述是每一对dup ACK发送一个unsent数据,协议描述的是对于收到的前两个dup ACK,每个dup ACK都可以触发一个unsent数据包的发送。实际上limited transmit可以扩展为对于收到的前(dupthresh-1)个dup ACK,每个dup ACK都可以触发unsent数据包的发送,这个对应linux中disorder状态。[RFC3042]

P743:对于application-limited发送端,作者解释为发送端有数据需要发送,但是受限于底层协议或者计算机忙于处理其他任务而没有发出去,显然正好理解错了,协议中application-limited状态就是指发送端没有更多数据等待发送的场景。[RFC2861]

P769:TFRC中发送端的速率公式给错了,参考RFC5348及论文<Modeling TCP Throughput:A Simple Model and its Empirical Validation>的section 2.2,实际的速率计算公式为:

                                s
X_Bps = ----------------------------------------------------------
R*sqrt(2*b*p/3) + (t_RTO * (3*sqrt(3*b*p/8)*p*(1+32*p^2)))

即书中公式[2]应该给分母添加一个括号。

P775:在计算K的时候作者首先说β默认是0.2,然后按照β=0.8给出一组K、Wmax、C的示例参数,紧接着下一段又说CUBIC中β默认值为0.8。实际上β叫做multiplicative decrease factor,CUBIC中β默认值确实是0.2,但是在具体代码实现上一般使用一个beta变量保存(1-β)的值,因此beta=0.8。一般讨论代码实现的时候我们可以说beta为0.8,但是讨论协议或者论文中的拥塞控制的时候我们一般说β为0.2。所以作者这里举例给出的K、Wmax、C的参数也就有问题了。另外linux内核cubic实现上beta=0.7,β=0.3。另外作者前面介绍的rate halving相关内容,应该更新为PRR才和这里相匹配

P776:Figure 16-20这个图右上角W(t)的公式中第一个系数应该为0.4。另外Wtcp的计算公式中β实际上又混为(1-β)的值了,我在ncsu cubic主页上看到过作者给出的那个公式,估计作者直接copy过来的。改为下面的计算公式更为合理。可以参考<CUBIC: A New TCP-Friendly High-Speed TCP Variant>,感兴趣的可以自己推导一下下面的这个公式

P777:倒数第二行括号里面应该改为"up to 3, the value for β",这段对于buffer的描述比较简略,看不懂的可以参考Vegas原始论文<TCP Vegas: End to End Congestion Avoidance on a Global Internet>的 Section III-B。

TCP/IP Illustrated Vol1 Second Edition即英文版第二版,TCP部分个人勘误的更多相关文章

  1. 【TCP/IP详解 卷一:协议】第二十章 TCP的成块数据流

    本章节主要内容: ACK的累积 滑动窗口协议(即 接收方TCP数据报缓存的大小) 流量控制(慢启动 -发送方TCP的 拥塞窗口(cwnd) 以及接受方的 通告窗口) 20.1 引言 在教材的之前章节中 ...

  2. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  3. TCP/IP协议(5):传输层之TCP

    一.TCP报文 上图为TCP报文的格式,可以看到TCP头部占20个字节,其中红色圆圈中每一项占一位,表示TCP报文的类型,置1表示该项有效. SYN表示建立连接.    FIN表示关闭连接.    A ...

  4. 【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能

    来到了TCP的最后一个章节,未来与性能.在当时(1991年)的未来,如今已经部分变为现实,部分就只是历史中的实验. 主要内容: 路径MTU的发现与TCP的结合. 长肥管道 和 高速千兆比网络. 窗口扩 ...

  5. 【TCP/IP详解 卷一:协议】第二十一章 TCP的超时与重传

    作为TCP的重头戏,本章节涉及了许多关于计算方面的内容,使用了大量的例子来指明一些观点. 我使用的理解方法是:通过别人的博客,以及实例结合进行理解,不然会很吃力. 21.1 引言 reliable T ...

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

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

  7. TCP/IP,三次握手四次挥手,TCP/UDP , HTTP/HTTPS

    internet:通用名词,由多个计算机网络组成的网络,网络间的通信协议是任意的 Internet:专用名词,当前全球最大的开放计算机网络,采用TCP/IP协议族作为通信的规则.www万维网是广泛应用 ...

  8. [网络必学]TCP/IP四层模型讲解【笔记整理通俗易懂版】

    OSI七层模型     表示层:用来解码不同的格式为机器语言,以及其他功能. 会话层:判断是否需要网络传输. 传输层:识别端口来指定服务器,如指定80端口的www服务. 网络层:提供逻辑地址选路,即发 ...

  9. TCP/IP详解 卷1 第十九章 TCP的交互数据流

    19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...

随机推荐

  1. Linux系统编译Openssl步骤

    参照:  https://blog.csdn.net/luckydog612/article/details/80396077 1.提前准备工作 去https://www.openssl.org网站下 ...

  2. 【转载】怎样在C++工程中集成C#窗口

    原文:http://www.cnblogs.com/clever101/archive/2009/12/14/1624204.html 本文转自博客园,此文作者依据codeproject英文版本翻译! ...

  3. 【SDOI2017】新生舞会

    题面 题解 一眼\(0/1\)分数规划 二分答案\(mid\),我们要\(\sum\limits_i a^{'}_i - mid\sum\limits_i b_i^{'}\)最大 那么我们将\(a_{ ...

  4. 有哪些 Bootstrap 的学习案例?

    bootstrap经典实用案例 bootstrap经典实用案例(非常详细),从菜鸟到高手的过程是艰辛的,你渴望救助.这本教程就是你无言的助手,默默的帮你到永远. 带奋斗一起飞翔,因为有了它,让我拥有理 ...

  5. Git的原理简介和常用命令

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

  6. pycharm专业版激活码

    K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  7. Android Library开发注意事项

    Android Library开发注意事项 App Module添加依赖Android Library时可以设置library的优先级, 在编译时,app按照library从低到高的优先级依次与每个l ...

  8. [转载]使用mpvue搭建一个初始小程序

    1. 初始化一个 mpvue 项目 现代前端开发框架和环境都是需要 Node.js 的,如果没有的话,请先下载 nodejs 并安装. 然后打开命令行工具: # 1. 先检查下 Node.js 是否安 ...

  9. SICP读书笔记 3.4

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  10. Intellij IDEA创建maven项目无java文件问题

    在idea开发工具中创建工程时,点击右键没有创建包.接口.java类的提示, 如图: 解决之前的项目目录为: 针对这种情况,对idea开发工具做以下设置. 选择File->Project Str ...