本文主要是介绍(两百七十八)《TCP/IP详解》读书笔记(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第12章 TCP:传输控制协议(初步)
ARQ和重传
问题:
1)发送方对一个ACK需要等待多久?
TODO
2)如果ACK丢失了怎么办?
重传
另外涉及一个序列号的设计,这里重传分两种情况,一种是超时重传,一种是丢失重传,接收方可能能解收到两个包,序列号可以用来标记判断是否是重复包。
3)如果分组被接收到了,但是里面有错怎么办?
编码可检查差错,但简单的不能纠正差错,TCP使用了校验和来检查差错,如果错了就不回ack了丢弃该包,发送方会重传。
分组窗口和滑动窗口
窗口的含义:如果你把在一个通信对话中发送的所有分组排成长长的一行,但只能通过一个小孔来观察他们,你就只能看到他们的一个子集——像通过也给窗口观看一样。
分组窗口:已被发送方注入但还没得到确认的分组的集合
滑动窗口协议:分组分为已被接收、已发送待接收和未被发送三个部分,当一个已发送待接收的包收到ack后,分组窗口可以往未被发送方向移一下,发送下一个报文,这就像滑动了下窗口。
流量控制分为基于速率的流量控制和基于窗口的流量控制(使用滑动窗口最流行的方法)。ack包会带回来窗口通告和窗口更新,发送方往往会在它窗口滑动到右边的时候同时调整它的大小。
拥塞控制:当包发送过程中有有限内存的路由器,他们比较低速,发送方速率可能超过路由器的能力,从而导致丢包,这由一种叫做拥塞控制的流量控制形式来处理。(基于窗口的流量控制是由接收方的能力来制约的,拥塞控制是传输过程中的设备制约)
序列号:每个分组第一个字节在整个数据流中的字节偏移,而不是分组号
确认号:指示字节号N的ACK暗示着直到N字节(不包括N)已经被成功接收了(这另外还带来了鲁棒性,如果一个ACK丢失了,后续的ACK就足以确认前面的报文段了)
TCP不带选项是20字节,带了选项可达60字节,TCP的头部长度以32位字为单位,即4个字节,本身是4位,所以最长可达4*15,60字节。
TCP头部示意
----------------------------------------------------------------------
源端口(16)|目的端口(16)
序列号(32)
确认号(32)
头部长度(4)|保留(4)|TAG(8)|窗口大小(16)
TCP校验和(16) |紧急指针(16)
选项
----------------------------------------------------------------------
重传计时器:这里没说的很明白,有提及RTT(往返时间)来估算重传的计时器,当计时器计时完后进行重传。
这篇关于(两百七十八)《TCP/IP详解》读书笔记(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!