回顾上一章节的内容,
1。滑窗是传输层通讯两端用于协调彼此收发能力的技术,免得你顾着说,我都来不及听。
2。TCP有3个字段(序号seq,确认号ack,窗口)用于实现滑窗技术。
现在我们来讲讲恶劣环境中滑窗的技术实现要点。
1。滑动窗口的建立:在连接建立后双发都知道对方的确认号ack(确认号ack是由seq产生的,接收方在接收到seq后,消耗的字节数+seq = ack,然后把确认号返回给发送方就可以了)。根据接收方的确认号和接收窗口大小,发送方就可以知道自己的发送窗口大小了。比如窗口大小为20,确认号为31,(ps:发送缓存中每个字节都会在连接建立后被编码,保存在传输控制块TCB中)那么缓存中可以发送的字节序号范围为:【31~50】。接收方的窗口也是31~50。
这里我要说一下,上面的概念我是直接从教科书上搬过来的,其实课本有存在过度描述的嫌疑,如果按照课本的理解,客户端有发送和接收窗口,服务端也有发送和接收窗口,那岂不是一个TCP链接就有4个窗口了。
而事实上经过理解,发送窗口其实就是接收窗口,只是站在发送端,被认为是发送窗口,站在接收端被认为是接收窗口。为了统一概念,我们认为从发送端到接收端,方向只有一个窗口那就是接收窗口(发送窗口,是接收窗口的映射,所以我们认为他不存在了)。
结论:一个TCP链接有2个接收窗口,分别位于客户端和服务端。
2。在接收端的角度,窗口的头永远是未确认的,如果接收程序处理了确认号为开头的连续字节窗口才会滑动,否则永远不滑动窗口。(站在发送端的角度可理解为,发送端在发送分组数据后接收到返回的确认前不会移动窗口)。窗口不可以滑动,但是可以根据需要扩大。
3。接收窗口中的数据为:
- 按顺序到达,却未被处理的。
- 没按顺序到达的数据。
这两类数据为未确认数据,如果接收端在一定时间内未收到确认(RTT超时了),就会重发。4。接收端只要窗口头部存在已处理的连续的(有顺序)的字节,就会向发送返回确认ACK,然后滑动窗口。
5。发送端只需要一股脑的发送分组数据,只要发送的字节数不超过接收窗口的大小就行。
整个滑窗的技术要点就这些了,其实教科书讲的很复杂,因为原本只有一个东西“接收端的滑动窗口”,硬要分成2个来讲。
所以,我们只要理解接收窗口的特点就行了(2。3。4。为重点)。
下一章,讲TCP的三次握手和四次挥手的要点:
3次握手的要点:
1。TCB的生命(什么时候创建什么时候死亡),
2。为什么要进行第三次握手?
四次挥手的要点:
1。什么是半关闭状态?
2。第四次挥手中涉及的时间等待计时器TIME-WAIT timer 的作用,以及2MSL是什么(最长报文段寿命)?为什么为2MSL(而不是1MSL)?