【网络协议】聊聊TCP如何做到可靠传输的

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

网络是不可靠的,所以在TCP协议中通过各种算法等机制保证数据传输的可靠性。生活中如何保证消息可靠传输的,那么就是采用一发一收的方式,但是这样其实效率并不高,所以通常采用的是累计确认或者累计应答。

如何实现一个靠谱的协议?

TCP为了保证顺序性,每个包都有一个ID,这个是建立连接之后开始使用的ID,一般确认包都是采用累计确认或者累计应答的模式。

发送端和接收端需要记录已经发送和处理确认的包的记录。
主要几种情况:

  • **已确认:**发送端已经发送,接收端已经确认。
  • **处理中:**发送端已经发送,接收端正在处理。
  • **等待发送:**发送端准备发情,接收到准备接收。
  • **没有发送:**发送端没有发送,接收端没有接收。

我们来聊聊为什么还要区分等待发送和没有发送这部分,本质其实为了控制接收端可以处理的数据能力。也就是滑动窗口大小就是接收端的,在TCP的保文中接收到会给发送端一个窗口的大小,暗示自己可以处理的数据。如果过多就处理不过来了。 Advertised window

发送端维护的数据结构:
【网络协议】聊聊TCP如何做到可靠传输的,# 计算机网络,网络协议,tcp/ip,网络

  • LastByteAcked 已经确认的数据
  • LastByteSent 已发送但是还没有确认的。
  • LastByteAcked + AdvertisedWindow 接收端最大处理数据量

接收端维护的数据结构
【网络协议】聊聊TCP如何做到可靠传输的,# 计算机网络,网络协议,tcp/ip,网络
MaxRcvBuffer:最大缓存的量
LastByteRead 已经接收,但是还没有被应用层读取的。
NextByteExpected 第一部分和第二部分的分界线

顺序问题与丢包问题

【网络协议】聊聊TCP如何做到可靠传输的,# 计算机网络,网络协议,tcp/ip,网络
假设上面的1,2,3 发送端和接收端已经达成共识,但是 4 ,5发送端还没有接收到,可能丢包了。
接收端8,9已经接收,但是 6,7没有接收,6,7可能丢包了。这种情况其实丢包和顺序问题都出现了,如何解决。
对于丢包问题,采用的是确认与重发机制
也就是设置一定的时间,发送端对于每个发送的包,如果一定的时间没有ACK的话,那么就进行重新发送,这个时间不宜过长和过短,一般是往返时间RTT。但是RTT也是TCP会进行算出一个平均值。也就是自适应重传算法。Adaptive Retransmission Algorithm。

但是对于再次丢包的,TCP 的策略是超时间隔加倍。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送

另一种快速重传的机制是,接收方收到一个大于下一个期望的报文段时,检测数据流中的一个间格。发送三个冗余的ACK,客户端收到后,就在定时器之前,重传丢失的报文端。

丢包问题采用的是确认机制,而顺序问题是通过序号确认的。

流量控制问题

流量控制其实在发送TCP报文的时候,就会携带一个窗口的大小。

【网络协议】聊聊TCP如何做到可靠传输的,# 计算机网络,网络协议,tcp/ip,网络
会实时的根据接收方的数据大小进行调整,当接收方的处理增大是,发送方会增加可发送的数据,如果缩小,那么发送方就停止发送。
发送方会定时发送窗口探测数据包,看是否有机会调整窗口的大小。这个其实就是流量控制。

拥塞控制问题

流量控制是担心发送方把接收方缓存塞满,而拥塞控制是担心网络塞满。

LastByteSent - LastByteAcked <= min {cwnd, rwnd} ,是拥塞窗口和滑动窗口共同控制发送的速度。

水管有粗细,网络有带宽,也即每秒钟能够发送多少数据;水管有长度,端到端有时延。在理想状态下,水管里面水的量 = 水管粗细 x 水管长度。对于到网络上,通道的容量 = 带宽 × 往返延迟

TCP 的拥塞控制主要来避免两种现象,包丢失和超时重传
网络拥塞的判定?

  • 当网络发生拥塞时,路由器就会丢掉分组,因此,只要发送端没有按时收到应当到达的确认报文 ack,就可认为网络出现了拥塞

慢启动(2的N次增加)-拥塞避免(回退到一半窗口大小 +1操作) 当出现丢包 快速重传和快速恢复解决
【网络协议】聊聊TCP如何做到可靠传输的,# 计算机网络,网络协议,tcp/ip,网络
快重传

  • 快重传算法规定:发送端只要一连收到三个重复 ack,即可断定有分组丢失,就应该立即重传丢失的报文,而不需要等待为该报文设置的重传计时器超时。
  • 与慢开始不同,拥塞窗口不设为 1,,而设为慢开始门限+3*mss(mss:最大报文段)。

【网络协议】聊聊TCP如何做到可靠传输的,# 计算机网络,网络协议,tcp/ip,网络

流量控制和拥塞控制的理解吗?
流量控制考虑点对点的通信量的控制,也就是客户端和服务端直接数据传输数据量的大小。
拥塞控制考虑的问题是整个网络,是全局性的考虑。

小结

顺序、丢包、流量控制是通过滑动窗口来解决的。而拥塞控制是通过拥塞窗口来解决的,不能太快,也不能太慢,需要寻找到中间值。文章来源地址https://www.toymoban.com/news/detail-713828.html

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

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

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

相关文章

  • 计算机网络 运输层下 | TCP概述 可靠传输 流量控制 拥塞控制 连接管理

    TCP是面向连接的运输协议 每一条TCP只能有两个端点,点对点 提供可靠的全双工交付 面向字节流,但占用很多资源 不提供广播和多播服务 所以从某种意义来说 UDP是一种更加有效的工作方式 TCP面向流的概念 把字节写入发送缓冲,加上TCP首部构成TCP报文段,从接收缓存读取字

    2024年02月04日
    浏览(35)
  • TCP协议如何实现可靠传输

    TCP是面向连接的运输层协议,在无连接的、不可靠的IP网络服务基础之上提供可靠交付的服务。为此,在IP的数据报服务基础之上,增加了保证可靠性的一系列措施。 TCP最主要的特点: TCP是面向连接的输出层协议             每一条TCP连接只能有两个端点,每条TCP连接只能是

    2024年02月15日
    浏览(47)
  • 【计算机网络】传输层协议 -- TCP协议

    认识可靠性 现在的计算机大多都是基于冯诺依曼体系结构的 虽然这里的输入设备、输出设备、内存、CPU是在同一个机器上的,但是它们彼此间却是相互独立的。如果它们之间要进行通信,那就必须要用“线”连接起来,其中连接内存和外设之间的“线”叫做IO总线,连接CP

    2024年02月14日
    浏览(39)
  • TCP协议是如何实现可靠传输的

    1.TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。 2.TCP最主要的特点 (1)TCP 是面向连接的运输层协议。         每一条 TCP 连接只能有两个端点 (endp

    2024年02月08日
    浏览(31)
  • 【计算机网络-传输层】TCP 协议

    端到端通信 :提供应用进程间的端到端通信(逻辑通信)。因此传输层又称为端到端协议。 差错检测 :对首部和数据部分进行检测。 两种协议 :面向连接的 TCP、无连接的 UDP。 复用和分用 : 概念 解释 传输层 TCP 复用 发送方的部分应用进程的报文在传输层使用 TCP 协议进

    2023年04月13日
    浏览(37)
  • 【计算机网络】传输层协议——TCP(上)

    TCP报文 等于报头 加 有效载荷 TCP的标准报头长度 整体为20字节 报头的宽度是0-31,表示报头所对应的字节数 (4字节)报文对应的宽度 为0-31 有效的标准报头长度一共 5行,所以 整体为20字节 选项 如:客户端和服务器建立好了链接,但这个链接长时间不关,并且也不发数据,所

    2024年02月09日
    浏览(29)
  • 【计算机网络】传输层协议——TCP(中)

    SYN: 是一个连接请求的报文 (三次握手), 发送的是TCP报头 操作系统内会存在多个已经建立好的链接,操作系统是需要把这些建立好的链接 管理起来的 而管理的本质是 先描述 在组织 操作系统内为了管理连接维护的数据结构 先使用 struct tcp_link结构体,内部包含链接的各种字

    2024年02月08日
    浏览(31)
  • 【计算机网络】传输层协议——TCP(下)

    整个网络中的所有主机和设备 遵守的是 TCP/IP协议 如: 一个班中有30个人,进行考试,只有2个或者3个人挂科了,这很正常 但若只有2个或者3个人过了,其他人都挂科了,就很不正常 同样是挂科,挂少和挂多 是不同的事情 当主机A给主机B发送消息时 若发送1000个报文,只有

    2024年02月08日
    浏览(28)
  • 计算机网络笔记:TCP协议 和UDP协议(传输层)

    TCP 和 UDP都是传输层协议,他们都属于TCP/IP协议族。 TCP的全称是 传输控制协议 是一种 面向连接的、可靠的、基于字节流 的 传输层 通信协议。TCP 是面向连接的、可靠的流协议(流就是指不间断的数据结构) TCP报文 是TCP层传输的数据单元,也称为 报文段 ,一个TCP报文段由

    2024年02月02日
    浏览(39)
  • [计算机网络]深度学习传输层TCP协议

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录专栏:深度学习传输层TCP协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 TCP全称为\\\"传输控制协议(Transmission Control Protocol\\\"),要对数据的传输进行⼀个详细的控制; 端口号(Port):标识了⼀个主机上进行通信的不同的应用程序; 端口号范围划

    2024年02月20日
    浏览(73)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包