TCP可靠性表现在它向应用层提供的数据是无差错,有序,无丢失,即递交的和发送的数据是一样的。
可靠性依赖于流量控制、拥塞控制、连续ARQ等技术
《TCP/IP详解》中的“分组”是不是就是报文段的意思?
1,停止等待协议
ARQ(Automatic Repeat reQuest)自动重传请求。
顾名思义,当请求失败时它会自动重传,直到请求被正确接收为止。这种机制保证了每个分组都能被正确接收。停止等待协议是一种ARQ协议。
停止等待协议的原理
1. 无差错的情况
A向B每发送一个分组,都要停止发送,等待B的确认应答;A只有收到了B的确认应答后才能发送下一个分组。
2. 分组丢失和出现差错的情况
发送者拥有超时计时器。每发送一个分组便会启动超时计时器,等待B的应答。若超时仍未收到应答,则A会重发刚才的分组。
分组出现差错:若B收到分组,但通过检查和字段发现分组在运输途中出现差错,它会直接丢弃该分组,并且不会有任何其他动作。A超时后便会重新发送该分组,直到B正确接收为止。
分组丢失:若分组在途中丢失,B并没有收到分组,因此也不会有任何响应。当A超时后也会重传分组,直到正确接收该分组的应答为止。
综上所述:当分组丢失 或 出现差错 的情况下,A都会超时重传分组。
3. 应答丢失 和 应答迟到 的情况
TCP会给每个字节都打上序号,用于判断该分组是否已经接收。
应答丢失:若B正确收到分组,并已经返回应答,但应答在返回途中丢失了。此时A也收不到应答,从而超时重传。紧接着B又收到了该分组。接收者根据序号来判断当前收到的分组是否已经接收,若已接收则直接丢弃,并补上一个确认应答。
应答迟到:若由于网络拥塞,A迟迟收不到B发送的应答,因此会超时重传。B收到该分组后,发现已经接收,便丢弃该分组,并向A补上确认应答。A收到应答后便继续发送下一个分组。但经过了很长时间后,那个失效的应答最终抵达了A,此时A可根据序号判断该分组已经接收,此时只需简单丢弃即可。
停止等待协议的注意点
-
每发送完一个分组,该分组必须被保留,直到收到确认应答为止。
-
必须给每个分组进行编号。以便按序接收,并判断该分组是否已被接收。
-
必须设置超时计时器。每发送一个分组就要启动计时器,超时就要重发分组。
-
计时器的超时时间要大于应答的平均返回时间,否则会出现很多不必要的重传,降低传输效率。但超时时间也不能太长。
2,滑动窗口协议(流量控制)
连续ARQ协议
在ARQ协议发送者每次只能发送一个分组,在应答到来前必须等待。而连续ARQ协议的发送者拥有一个发送窗口,发送者可以在没有得到应答的情况下连续发送窗口中的分组。这样降低了等待时间,提高了传输效率。
注意:
1)TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节。一个滑动窗口包含多个分组(报文段)。
2)TCP连接建立时会协商MSS(每一个报文段所能承载的最大数据长度)。
3)通知对方各自的窗口长度win。
2.1 窗口
(1)接收端窗口 rwnd
接收端缓冲区大小。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。
(2) 拥塞窗口 cwnd (congestion window)
受网络拥塞限制的发送段窗口
(3)发送窗口swnd
发送窗口的上限值 = Min [rwnd, cwnd]
当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。
当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
2.2滑动窗口
发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。还可发送 300 字节。
发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。现在发送端最多还可发送 400 字节的数据。
3,拥塞控制
3.1慢开始
1)拥塞窗口cwnd=1 (即一个最大报文段的长度 MSS 的数值)
2)开始指数增长报文段个数,1,2,4,,,
3)当拥塞窗口的报文段个数大于等于 满开始门限(ssthresh=16)时,即从指数增长变为加法增长。
4)如果遇到网络拥塞,则又“慢开始”,即开始从cwnd=1开始。