前段时间研究tcp性能,猛看详解卷一,由于这个是个非常简单的逻辑,但始终都没看懂,于是就请教了斑竹大侠,在斑竹的大侠指导下一算一查,果然是本书的翻译错误,给大家分享下!!
1.在TCP/IP详解卷一中文版268页中,关于TCP吞吐量计算公式有错误,原文为:
假定发送方传输两个背靠背、满长度的数据报文段,然后接收方为这两个报文段发送一个ACK。于是最大吞吐量(用户数据)为:
2×1460 B 10 000 000b/s
throughput= ————————× ———————— = 1 555 063B/s
22×1538B+84B 8b/B
错误原因:
u
逻辑不对;分母表示为发送字节总量(包括开销),分子为发送有效数据总量。既然题目为只传送两个背对背满长度的数据报文,为何分母为22×1538。
u
计算结果不对,经按此错误公式计算校对结果,此数据与计算结果相差甚多。
应该改正为:
2×1460 B 10 000 000b/s
throughput= ————————× ———————— = 1 155 063B/s.
2×1538B+84B 8b/B
2.TCP窗口开到它的最大值(65535,不使用窗口扩大选项),这就允许一个窗口容纳44个1460字节的报文段。如果接收方每个报文段发送一个ACK,则计算变为:
22×1460 B 10 000 000b/s
throughput= ————————× ———————— = 1 183 667B/s.
22×1538B+84B 8b/B
错误原因:
u
逻辑问题,在接收端未发送窗口更新之前,允许发送端发送44个报文,但其公式的分子却为22×1460。而且接收端对每一个报文段发送一个ACK,所以分母没理由只加上一个84B。
经查过英文原版资料此错误为翻译错误,应改为:如果接收方每接收22个报文发送一个ACK
[ 本帖最后由 ctop17 于 2009-8-6 18:17 编辑 ] |