TCP如何保证传输的可靠性

这篇具有很好参考价值的文章主要介绍了TCP如何保证传输的可靠性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TCP采用哪些方式保证数据传输可靠?

答:

1、数据分块:将数据包划分为合适的大小,这样更能适应网络的限制,如果数据发生错误或丢失,只要重传有问题的部分即可,减少重传的数据量。方便进行流量和拥塞控制。

2、数据包有序号,可以根据序号对失序的数据包进行重新排序、并且可以去重,丢弃重复的数据包。

3、校验和,TCP会用头部信息和数据进行校验,来确保传输过程中有没有发生变化,如果认为被修改了会丢弃这个数据包。

4、超时重传机制,发送数据包后,会启动定时器等待接收方的确认信息,如果超过一定时间都没收到之后会进行重传。

5、流量控制。TCP连接的两方都有自己的缓冲区,接收方只允许发送方发送自己能承受的数据量,如果接收方处理不过来,会要求降低发送速度,避免丢包。

6、拥塞控制:网络拥塞时,减少数据的发送。

TCP如何实现流量控制?

答:

为什么要实现流量控制:为了控制发送方的发送速率,保证接收方能够及时接收。因为TCP通信的时候,双方发送和接收的速度不一定是相等的,如果发送方速度太快,接收方处理不过来,会将数据放在接收缓存区,但是如果缓存区满了,发送方仍然在发送,接收方只好丢失新的数据包。这样不仅会发生丢包还占用了网络,非常低效。

如何实现流量控制:通过滑动窗口实现流量控制,接收方返回ACK时包含一个窗口字段,表示当前接收方能接收的窗口大小,以次控制发送方的发送滑动窗口大小。

发送方的窗口分为四个部分:已发送已确认的数据、已发送还未确认部分、待发送部分(可用窗口)、不可发送部分。

而被控制的滑动窗口大小实际上包括已发送未却部分和待发送部分两个部分。

接收方的窗口分为三个部分:已接收已确认、等待接收、不可接收部分。

接收方滑动窗口和发送方滑动窗口大小不一定相同,这两个窗口根据各自缓冲区可用空间、处理速度和网络条件独立调整

TCP 的拥塞控制是怎么实现的?

答:进行拥塞控制,TCP首先要维护一个拥塞窗口的状态变量,发送方控制自己的发送滑动窗口为cwnd和接收端返回的窗口中的较小的一个。

主要通过以下几种方式实现拥塞控制:

1、慢启动:刚开始发送数据时,不会刚开始就把大量数据注入网络,这样很可能引发网络拥塞。而是由小增大的发送数据,cwnd的初始值是1,每经过一个往返的传输,就成倍增长cwnd的大小。

2、拥塞避免:设置了一个ssthresh变量,初始门限值,如果cwnd成倍增长达到ssthresh之后,每次只增加1。避免一次增加太多导致拥塞发生。

3、拥塞发生算法:如果发生了超时重传,说明网络已经开始拥塞了,这时会启动拥塞发生算法,即ssthresh=cwnd/2,且cwnd设为1重新开始慢启动。容易造成网络卡顿。

4、快速重传算法:当接收方收到三个一样的ACK时,认为发生了数据丢失,马上启动快速重传,TCP认为这种情况不严重,cwnd=cwnd/2,ssthresh=cwnd 。

5、快速恢复:一般和快速重传一起使用,快速重传后就进入快恢复阶段。此时ssthresh和cwnd已经被更新了。此时cwnd=ssthresh+3,重传丢失的数据包。如果再收到重复的ACK,cwnd加一,如果收到新的ACK,ssthresh恢复原来的,恢复原来的状态。

超时重传和快速重传的区别:超时重传是指发送方没在时间范围内收到ACK信息,认为数据丢失发送方重新发送。是根据时间确定的;快速重传是指发送方连续收到三个一样的ACK,判断有数据包丢失,马上重传。是根据接收方的反馈判断的。

流量控制和拥塞控制的区别:流量控制主要是根据接收方的处理速度和要求来控制发送方的滑动窗口,避免接收方缓存溢出。是端到端之间的决策处理。拥塞控制是全局的,包括路由器和交换机。主要是避免发送方的数据量溢出网络容文章来源地址https://www.toymoban.com/news/detail-847818.html

到了这里,关于TCP如何保证传输的可靠性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP消息传输可靠性保证

    三次握手 TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。 所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。 第一次握手:客

    2024年02月12日
    浏览(45)
  • 计算机网络学习09(TCP传输可靠性保障)

    1、TCP 如何保证传输的可靠性? 基于数据块传输 : 应用数据被分割成 TCP 认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。 对失序数据包重新排序以及去重: TCP 为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号

    2024年02月01日
    浏览(52)
  • TCP如何保证服务的可靠性

    TCP保证可靠性一般有以下几种方法: (1) 确认应答 :ACK和序列号 (2) 超时重传 :发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送 (3) 流量控制 :控制发送方发送窗口的大小来实现流量控制 (4) 拥

    2024年02月15日
    浏览(41)
  • 【计算机网络】TCP原理 | 可靠性机制分析(三)

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 滑动窗口可以保证在TCP可靠性传输的前提下,数

    2024年01月24日
    浏览(37)
  • 【计算机网络】TCP原理 | 可靠性机制分析(四)

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 接收方在接收到数据后并不立即发送ACK报文,而是等待一定的延迟时间,

    2024年01月16日
    浏览(39)
  • 【计算机网络】TCP原理 | 可靠性机制分析(一)

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 无连接:知道对端的IP和端口号就可以直接进行传

    2024年02月03日
    浏览(42)
  • 2.6 TCP与UDP的可靠性传输

    参考小林图解网络 1.1、超时重传 超时重传,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据。 TCP 会在以下两种情况发生超时重传: 数据包丢失 确认应答丢失 超时重传时间 RTO是一个动态变化的值,其值应该略

    2024年02月09日
    浏览(42)
  • rabbitmq如何保证消息的可靠性传输(简述版本)?

    我需要从三点去考虑, 生产者弄丢了数据,生产者将消息发送的Exchange并且路由到队列 队列需要将消息给它持久化 消费者要成功消费队列中的消息 RabbitMQ提供了confirm机制,保证了消息消息发送的Exchange交换机,那么还提供了return机制,可以保证消息从exchange路由到队列中,如

    2024年02月13日
    浏览(37)
  • 【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略

    主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B; 如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发 发送方如何判定丢包了呢? 其实真正有没有丢包,发送方其实不知道。定的策略,超时了,就判定丢包了 但是,主机A未收到

    2024年02月10日
    浏览(43)
  • 【网络原理进阶篇】自定义协议,协议约定符,三次握手,四次挥手,TCP(保证可靠性机制)和UDP原理

    前言: 大家好,我是 良辰丫 ,我们已经学习了网络原理基础版,初步认识了网络,还学习了网络编程,了解了网络通信的各种程序,接下来我们更深入的了解网络是如何工作的.这篇文章我们主要介绍协议,UDP和TCP的一些原理.💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎

    2023年04月24日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包