概述:
由于ip层是尽最大努力交付——不可靠的通信;所以为了保证可靠传输,TCP必须采取适当的措施才能保证两个传输层的通信变得可靠。理想的通信是:1.传输的信道不产生差错;2.无论发送方以多快的速度发送,接收方都来得及接收处理数据。但是实际上并不存在这样理想的传输,所以我们需要采取一些可靠传输的协议,当出现差错的时候让对方重传出现差错的数据(超时重传机制),同时在接收方来不及处理数据的时候,及时告知发送方降低发送数据的速度(滑动窗口机制——TCP报文段首部有一个窗口的字段,就是用来告知发送方,接收方目前能处理的数据的能力)。
停止等待协议:
停止等待就是每发送完一个报文段就停止发送,等待对方进行确认。
主要有3种情况:
1.无差错的情况
2.出现差错
3.接收方发送的确认包丢失和确认迟到
1.无差错情况
最简单的情况,发送方A每次发送完一个报文段就设置一个超时计时器,每次都能在超时计时器超时之前接收到接收方B发送回来的确认报文,往复这样进行通信。
2.出现差错
这种情况是:接收方B收到了发送方发送过来的TCP报文段,但是在对数据进行校验(TCP报文段首部有校验和字段,用来检测发送过来的报文数据是否出现差错)的时候,发现接收到的报文段出现差错,这个时候接收方B什么也不做(不会通知A说收到了差错的报文段);也可能是报文段在传输的过程中丢失了,这种情况B自然不知道,在这两种情况下,B不会发送任何信息,直到A为刚刚发送的报文段设置的超时计时器超过了时间,就会认为B没有收到刚发送的报文段,就会重新发送刚刚发送的报文段——超时重传
3.接收方发送的确认宝丢失和确认迟到
这种情况是接收方正确的接收到发送方发送的报文段,并且发出确认报文,但是确认报文由于某些原因丢失了,或者是由于网络延迟没有在发送方设置的关于这个报文段的超时计时器内达到,这个时候——发送方就会重新发送这个报文段,而接收方又收到了重传的这个报文段,会做2件事:1.丢弃这个报文段(因为刚刚已经正确接收过了,并且已经向上一层交付),不向上一层交付;2.向发送方A发送确认报文(不能因为刚刚已经发送了确认就不发送,A之所以重传该报文就是因为没有收到确认;所以需要再次发送确认,不然发送方A就会一直发送……)
这里有几个小问题需要注意:
1.发送方在发送完一个报文段后必须暂时保存已经发送的报文段的副本——为了超时重传的时候使用。
2.分组和确认分组都必须编号,所以才知道是对哪个发送的分组收到了确认……
3.超时计时器的重传时间的设定——应该比数据在分组传输的平均往返时间更长一些。
停止等待协议很简单,但是有很明显的缺点——信道利用率很低;因而引入了连续ARQ协议