TCP如何保证可靠传输?

Tcp如何保证可靠传输呢?

什么是TCP?

TCP是一个运输层的传输协议,是面向连接的、可靠的、基于字节流的协议。
我们来看一下这几个概念:
面向连接:TCP的传输必须是有连接的,即要用三次握手建立可靠的通信信道,当然,这个信道是全双工的。

基于字节流:应用层的数据即应用层报文要在网络中传输,TCP会把报文以字节单位在网络中进行传输。

可靠的:即在传输过程中不会发生数据丢失,这个丢失指的不是数据包在网络中丢失,而是指的是Client发多少包Server就接受了多少包,没有漏传、错传的现象。

TCP如何保证可靠传输呢?

  1. 应用层报文被TCP分成最适合传输的数据块,TCP给这些数据块编上号。这样能保证数据有序。
  2. TCP头部有个检验和,TCP保持它头部和数据的检验和,如果检验有差错则丢弃和不确认接收。
  3. TCP会丢弃重复的数据。
  4. 流量控制
  5. 拥塞控制
  6. 停止等待协议

流量控制

流量控制的前提:以字节为单位的滑动窗口。
TCP如何保证可靠传输?

接收方发送的确认报文中的窗口字段可以控制放松方的发送窗口,若将窗口字段设为0,则发送方不能发送数据。

拥塞控制

  1. 慢开始
    当主机开始发送数据时,大量字节涌入网络会引起阻塞,则将cwnd滑动窗口值先设为1,每传输一次令cwnd * 2 *(1,2,4,8)

  2. 拥塞避免
    而拥塞避免则是每传输一次(经过一个RTT),就令cwnd+1

开始传输时设满开始门限ssthresh,当cwnd < ssthresh时采用慢开始算法 ,cwnd > ssthresh时采用拥塞避免算法,两者相等时可任意二选一。
当发生超时的时候,将ssthresh / 2,开始上述步骤。

  1. 快重传
    TCP如何保证可靠传输?

  2. 快恢复
    丢失个别报文段,不启动慢开始算法,执行快恢复算法。ssthresh = cwnd / 2,同时让cwnd = ssthresh进行快恢复。此时执行的是拥塞避免算法。

停止等待协议

  • 无差错
    TCP如何保证可靠传输?
  • 有差错
    TCP如何保证可靠传输?
    超时重传的前提:
    1)保留发送的分组
    2)对包进行编号
    3)设置超时重传的时间比一个RTT长
  • 确认丢失和确认迟到

确认丢失
TCP如何保证可靠传输?

确认迟到
TCP如何保证可靠传输?

  • 连续的ARQ协议
    可提高信道利用率,发送方维持一个窗口, 位于窗口内的所有数据都可以发送出去,不需要等待确认,接收方采用累计确认的方式。这时候就会产生拥塞控制部分的东西。
上一篇:双缓存解决闪烁问题


下一篇:【华为云技术分享】【资料下载合集】HDC.Cloud华为开发者大会2020