TCP如何保证可靠性

在这里插入图片描述

  1. 重传机制:针对数据包丢失或者出现定时器超时

  2. 确认应答:停止等待协议,发送之后等待收到应答。

  3. 序列号:针对数据包到达接收端主机顺序乱掉

  4. 流量控制:针对避免网络拥堵时候;针对高效传输数据包的流动窗口的控制

  5. 拥塞控制:针对刚开始启动的时候避免一下子发送大量数据包而导致网络瘫痪的慢启动算法和拥塞控制。

  6. 校验和:发送方和接收方计算校验和并进行对比确认未出错

  7. 连接管理:三次握手与四次挥手

  8. 数据的合理分片和排序

    UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
    tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。

校验和

将发送的数据段都当做是16位的整数,加起来,前面的进位补在后面,最后取反,得到校验和。
发送方发送数据之前计算校验和,并填充;
接收方收到数据之后,同样进行计算,将得出的校验和与发送方的进行对比。
在这里插入图片描述

确认应答与序列号

sequence and ack
序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。
确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。

有了序列号,不仅仅是应答的作用,接收方还可以根据序列号将数据排序,并且去掉重复序列号的数据。(也是TCP传输可靠性的保证之一)
在这里插入图片描述

超时重传

当发送方 发送完数据之后,迟迟没有收到ack,那么原因可能有:

  1. 数据在传输过程中由于网络原因等直接全体丢包,接收方根本没有接收到。
  2. 接收方接收到了响应的数据,但是发送的ACK报文响应却由于网络原因丢包了。

所以引入了超时重传机制,到了指定时间尚未收到ack报文,就重传数据。
这个指定时间(最大超时时间)是动态计算的。

自动重传请求ARQ协议:

发送方每次发送完之后就设置一个超时计时器,重传时间应该比数据传输的平均往返时间更长一些。

连续ARQ协议

也叫回退N帧协议
连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。
缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。

连接管理

就是三次握手与四次挥手,保证了可靠的连接

流量控制

其实就是根据接收方的数据处理能力对发送方的发送速度进行控制。
利用滑动窗口实现。
TCP协议的报文头信息中,有一个16位的字段的窗口大小。数字越大,证明接收端接收缓冲区的剩余空间越大,网络的吞吐量越大。

接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小的值为0,那么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。

注:16位的窗口大小最大能表示65535个字节(64K),但是TCP的窗口大小最大并不是64K。在TCP首部中40个字节的选项中还包含了一个窗口扩大因子M,实际的窗口大小就是16为窗口字段的值左移M位。每移一位,扩大两倍。

在这里插入图片描述

拥塞控制

主要解决在数据传输过程中,网络中拥堵的情况,数据包可能会丢失,大量的超时重传继续影响传输。

拥塞控制的四种算法:慢开始、拥塞避免、快重传和快恢复。

so,慢启动,先发送少量数据探探路,定义了一个拥塞窗口(初始为1),每次收到一个ACK应答(每经过一个RTT往返时间),拥塞窗口加 1。在发送数据之前,首先将拥塞窗口与接收端反馈的窗口大小比对,取较小的值作为实际发送的窗口。
拥塞窗口的增长是指数级别的。 为了控制增长速度,引入了拥塞窗口的阈值(ssthresh)。

拥塞避免:当拥塞窗口大小超过阈值时,不能再按照指数来增长,而是线性的增长。

在慢启动开始的时候,慢启动的阈值等于窗口的最大值,一旦造成网络拥塞,发生超时重传时,慢启动的阈值会为原来的一半(这里的原来指的是发生网络拥塞时拥塞窗口的大小),同时拥塞窗口重置为 1。
在这里插入图片描述

快重传和快恢复

快速重传和恢复(fast retransmit and recovery,FRR

没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。

有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  
当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

常见面试题

TCP异常的情况(常见面试题)

进程终止:进程终止会释放文件描述符。仍然可以发送FIN,和正常关闭没什么区别
机器重启:和进程终止的情况相同
机器掉电/网线断开:接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就会进行reset,即使没有写入操作,TCP自己也内置一个保活定时器,定期访问对方是否还在,如果对方不在,也会把连接释放;
基于TCP的应用层协议有:HTTP、HTTPS、SSH、Telent、FTP、SMTP

TCP一般应用于可靠性传输,应用于文件传输,重要状态更新等重要场景;
UDP用于对高速传输和实时性要求较高的通信领域。

如何用UDP实现可靠性传输?(面试题)
可以参考TCP
引入序列号,保证数据顺序;引入确认应答,保证对端收到了数据;引入超时重传,如果隔一段时间没有应答,就重新发送数据。

转自:https://blog.csdn.net/liuchenxia8/article/details/80428157

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值