TCP 可靠传输

TCP报文段首部

序号:

    TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。

    例如,一报文段的序号字段值是301,而携带的数据共有100字节。这就表明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400。

确认号:

    期望收到的下一个报文段的第一个数据字节的序号。

    例如,B收到A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节。这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。

可靠传输

  1. 传输过程不产生差错。
  2. 不管发送发以多快的速度发送数据,接收方总是来得及处理收到的数据。

为了保证条件1,TCP采取了以下4种手段:

  1. 字节编号
  2. 超时重传
  3. 确认应答
  4. 校验和

字节编号是超时重传和确认应答的基础。

超时重传

    发送方在某个分组发送出去一段时间内,如果没有收到对该分组的确认应答,则假定该分组在传输过程中丢失,从而重新发送该分组。

确认应答

    接收方在成功收到一个分组后,发送一个确认应答分组给发送方。

这4种手段结合使用,可以处理传输过程中发生的任何错误。

1. 分组M在传输过程中丢失

    发送方收不到确认应答,会重发M。

2. 分组M在传输过程中出错

    接收方直接丢弃M,不发送确认应答。发送方收不到确认应答,会重发M。

3. M的确认应答丢失

    发送方收不到确认应答,会重发M。接收方丢弃第二次收到的M,再次发送M的确认应答。

4. M的确认应答迟到

    发送方收不到确认应答,会重发M。接收方丢弃第二次收到的M,再次发送M的确认应答。

    发送方收到M的确认,继续发送剩余数据。

    发送方收到迟到的M的确认,什么也不做。

      

5. 发送方多个分组乱序到达

    见下文的Go-back-N。

为了提高传输效率,发送方不必每发完一个分组就停顿下来等待对方的确认,而是采用连续发送多个分组的流水线发送方式。

接收方一般采取累积确认、捎带确认的方式。

累积确认是指,接收方可以在收到几个分组之后,对按序到达的最后一个分组发送确认。这种方式的缺点就是有Go-back-N问题。

Go-back-N

    如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,只好把后面的三个分组都再重传一次。 

为了保证条件2,TCP采用了流量控制、拥塞控制。暂时不表。

参考资料:

TCP协议可靠性数据传输实现原理分析

转载于:https://www.cnblogs.com/gattaca/p/7673677.html

猜你喜欢

转载自blog.csdn.net/weixin_34217773/article/details/93401968