【计算机网络】TCP原理 | 可靠性机制分析(四)

这篇具有很好参考价值的文章主要介绍了【计算机网络】TCP原理 | 可靠性机制分析(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【网络编程】
本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌

🐬一、延时应答

接收方在接收到数据后并不立即发送ACK报文,而是等待一定的延迟时间,以查看是否有更多的数据到达。如果在延迟时间内收到了更多的数据,接收方可以将多个ACK合并为一个ACK,从而减少ACK报文的发送次数。另外,这种延迟的时间可以给应用程序更多的空间来消费数据,从而避免数据积压和溢出的问题。

举个例子:比如说现在接收方接收数据后,接受区缓存(一共10kb)使用了6kb,所以剩余空间大小就是4kb,此时如果立即返回ACK的话,窗口大小就是4kb;但是如果延时返回ACK的话,假设延时500ms的话,那么应用程序就可以利用这延时的500ms来进行数据的消费,假设又消费了2kb数据的话,返回ACK后窗口大小就是6kb。接收方通过延时应答机制能为数据传输提高多少效率还是要取决于接收方处理数据的能力。

简单来说TCP延时应答可以让ACK的反馈时机变迟。

🐬二、捎带应答

捎带应答则是基于延时应答的基础上让数据进行合并。

下面捎带应答的控制图,请看

【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议

很多情况下,客户端服务器在应用层也是 “一发一收” 的。

【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议如上图:四次挥手也有可能是三次挥手,其实就是延时应答和捎带应答起到的作用。中间的两个数据包合并成一个数据包之后,数据传输的效率就会提高,因为每次数据的传输都是需要封装分用的。
为什么中间的两次挥手能够进行合并:一方面是延时应答中的延时时间允许ACK和响应合并在一起发送出去;另一方面就是ACK数据本身不需要携带载荷,同时不和其它数据发送冲突。所以我们可以让一个数据包既携带载荷数据,又能带有ACK的信息(有ACK标志位、窗口大小、确认序号其实就够了)。

🐬三、面向字节流

TCP使用了多种机制来保证数据的可靠性,其中之一就是面向字节流。通过将数据拆分成字节流,TCP可以跟踪和管理每个字节的传输状态。TCP会对每个字节进行编号,以便在传输过程中检测和纠正任何丢失、重复、失序或损坏的字节。
面向字节流的特性使得TCP能够提供可靠的数据传输,确保数据按照发送的顺序和准确的内容被接收方接收到。

🏀粘包问题

面向字节流的情况下可能出现粘包问题:粘包粘的是应用层数据包

通过TCP的read/write的数据,都是TCP报文的载荷(也就是应用层数据),发送方一次性是可以发送多个应用层数据的。但是在接收的时候,是要对这些应用层数据进行区分,区分从哪里到哪里是一个数据报。如果我们没有设计到的就就有可能出现发送了2个包,但是只读取了1.5个包的bug。

【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议
针对上述的问题在传输层中并没有很好的解决办法;我们只能通过合理地设计应用层协议来解决上述问题。

应用层的解决方式:

  • 引用分隔符来区分包和包之间的边界。
  • 引用包长度来区分包和包之间的边界。

方式一:使用分隔符来区分【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议
接收方的应用程序就可以通过\n来对数据包进行区分。
关于之前写的EchoServer回显服务器就是这样来进行设定的:
发送数据报的时候使用println来进行发送。接收数据报的时候使用scanner.next进行解析,遇到\n就返回。如下图所示:
【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议
【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议

方式二:使用包长度来进行区分
【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议

补充一点:粘包问题不仅仅是在TCP协议中存在,只要是面向字节流的机制(比如说文件)都存在粘包这样的问题。解决方式可以是使用分隔符的方式,也可以是使用长度的方式,无论是哪种方式,本质上都是为了区分包和包之间的边界。我们在自定义应用层协议的时候可以使用这样的思想来解决问题。

🐬四、TCP异常情况的处理

网络有时候不稳定,会有很多种情况导致网络出现故障,这很有可能会导致TCP连接不能正常工作。

  • 情况一:进程崩溃

如果进程崩溃或异常终止,操作系统会检测到该进程的退出,并释放该进程相关的资源,包括进程控制块(PCB)和文件描述符(这相当于调用了socket.close(),注意socket在系统内核中也是一个文件,也会被放到文件描述符表中),崩溃这一方就会发送FIN,然后进一步三次握手四次挥手,之后连接就正常释放了。此时TCP的处理和进程正常退出没有什么太大区别。

  • 情况二:主机关机(正常步骤的关机)

主机正常关机的话就会尝试终止所有进程(这是一个强制终止进程的过程),这和情况一的进程崩溃处理方式是一样的。当然主机关机的时候,会有一定的关机时间,在这个时间内,四次挥手有没有完成我们是不确定的,可能挥完也可能没有挥完,如果四次挥手没有完成的话也没关系。(如下图:)
【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议

  • 情况三:主机掉电(突发的,比如说拔电源,根本没有反应时间)

【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议

TCP协议中虽然已经有了心跳包的支持,但是我们作为开发者往往需要在应用程中重新实现心跳包。因为TCP协议中的心跳包周期太长了,在高并发的场景下我们甚至是需要毫秒级别的心跳包,以便我们能够在更短的时间内发现某个服务器的问题。

  • 情况四:网线断开

这里发生的情况和情况三(即主机掉电)是类似的。网线断开之后,这里假设A是发送方的话,A发生的情况和上述主机掉电的第一种情况(即没有ACK->超时重传->复位报文以重置连接->释放连接);而B发生的情况是主机掉电的第二种情况(B这边会通过发送心跳包发现A已经没法建立通信了,进一步的就会释放连接)。

本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!

【计算机网络】TCP原理 | 可靠性机制分析(四),网络编程,计算机网络,tcp/ip,网络协议文章来源地址https://www.toymoban.com/news/detail-793005.html

到了这里,关于【计算机网络】TCP原理 | 可靠性机制分析(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 计算机网络必会:TCP和UDP,面向连接,无连接,可靠与不可靠

    我在学习计算机网络的过程中,遇到了TCP和UDP解释,其中,无连接,面向连接,对我有很多新启发,下面就简单来聊聊,有兴趣多点个赞收藏一下,有错误可以私信反馈,欢迎打扰 TCP的主要特点: 1、TCP是面向连接的传输层协议。 2、每一条TCP连接只能有两个端点,TCP连接只

    2024年02月06日
    浏览(61)
  • 计算机网络 运输层下 | TCP概述 可靠传输 流量控制 拥塞控制 连接管理

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

    2024年02月04日
    浏览(54)
  • 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述

    当应用程序间需要进行网络通讯,在 TCP/IP 五层协议的应用层需要做的工作是,程序员 自定义应用层协议 。 当前要开发一个关于“点外卖软件”的一个项目,其中有一个功能为:获取用户的订单历史(后端服务器从数据库中取出数据返回给前端页面),类似像这样的功能,

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

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

    2023年04月24日
    浏览(89)
  • 【计算机网络】第三章 数据链路层(可靠传输)

    可靠传输是指在数据通信过程中,确保数据能够准确、完整地按照发送方的意图传输到接收方,并且接收方能够正确地接收和处理数据。 在可靠传输中,通常需要解决以下问题: 确认和反馈 :发送方在发送数据后,需要接收到接收方的确认信息,以确认数据是否正确接收。

    2024年02月12日
    浏览(60)
  • 计算机网络可靠传输的三种基本实现机制

    在数据链路层会给上层网络层提供可靠传输或者不可靠传输,不可靠传输是指检测到传输差错的时候只是丢弃该分组而不进行任何处理,而可靠传输会给发送者一个信号进行重发该分组。 以下给出的三种基本实现机制是提出一些问题,慢慢改进一些地方进行提出的,xdm可以根

    2024年02月02日
    浏览(57)
  • 【计算机网络笔记】传输层——可靠数据传输之流水线机制与滑动窗口协议

    什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率 计算机网络体系结构概念 OSI参考模型

    2024年02月06日
    浏览(45)
  • 计算机网络—TCP

    源端口号和目标端口号:16位字段,用于标识TCP连接的源和目标端口号。 序列号(Sequence Number):32位字段,用于标识发送的数据字节流中的第一个字节的序号。 确认号(Acknowledgment Number):32位字段,确认收到的字节序号,即期望接收的下一个字节的序号。 数据偏移:4位字

    2024年02月13日
    浏览(63)
  • 计算机网络-TCP协议

    TCP被称为面向连接的,因为在应用程序开始互传数据之前,TCP会先建立一个连接,该连接的建立涉及到 三次“握手 ”。 TCP的连接不是一条真实存在的电路,而是一条逻辑链接 ,其共同状态仅保留在两个通信端系统的TCP程序中。 TCP连接也是点对点的,即TCP连接只能存在于一

    2024年02月08日
    浏览(56)
  • 【计算机网络】TCP协议

    实验目的 应用所学知识: 1. 熟悉 TCP 的协议格式。 2. 理解 TCP 对序列号和确认号的使用。 3. 理解 TCP 的流量控制算法和拥塞控制算法。 实验步骤与结果 1.任务一: 将Alice.txt上传到服务器: 使用wireshark捕获数据包,看到计算机和gaia.cs.umass.edu之间的一系列 TCP 和 HTTP 通信,包

    2023年04月20日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包