关于TCP的可靠性

TCP 传输可靠性保障 TCP传输可靠性的保障主要通过以下几个核心机制实现:‌1. 三次握手与连接管理‌:TCP在建立连接时采用三次握手过程,确保通信双方实体真实存在,并同步连接参数。这一过程为后续的可靠数据传输打下了坚实基础。同时,TCP还使用四次挥手来正常终止连接,确保最后的数据能够完整传输‌。‌2. 序列号和确认应答‌:TCP给发送的每个字节都分配一个序列号,接收方则通过发送确认号(ACK)来确认接收到的数据。确认号是接收方期望接收的下一个字节的序列号。 阅读详情

关于TCP的可靠性

TCP是一个可靠的协议。有时人们会说:"TCP能够保证它所发送数据的可靠传输。"这种说法尽管很常见,但却非常不恰当。

首先,只要稍微想一下就会知道这不可能是对的。比如,假设在数据传输的过程中将一台主机从网络上断开,TCP这侧不管做出何种努力,都无法获取其余 的数据。网络确实会中断,主机确实会崩溃,用户确实会在TCP连接仍然活跃的时候关机。这些事件或其他类似的事件都使得TCP无法将它从应用程序收到的数 据传送出去。

但更重要的是,TCP"确保可靠传输"这种说法会对不够谨慎的网络程序员产生微妙的影响。当然,没人真的会相信TCP有某种魔法总是可以将数据安全 地传送到其目的地。但是,相信TCP能够保证可靠传输会让人觉得没必要进行防御性编程,也没必要考虑对故障模式的处理,还是那句话,毕竟TCP可以确保可 靠传输。

可靠性--是什么,不是什么

在考虑TCP中可能出现的各种故障模式之前,要弄清楚TCP的可靠性意味着什么。如果TCP不能保证将提交给它的所有数据都传送出去,它又能保证什 么呢?第一个问题是向谁保证?图2-41显示,数据流从应用程序A通过它所在主机的TCP/IP栈向下传输,经过几台中间路由器,通过应用程序B所在主机 的TCP/IP栈向上传输,最后抵达应用程序B。一个TCP段离开应用程序A所在主机的TCP层时,会被封装到一个IP数据报中,传送给其对等实体主机。 它所走的路由可能要经过很多路由器,但如图2-41所示,这些路由器都没有TCP层,它们只是转发了IP数据报。

 

实际上,有些"路由器"可能是拥有完整TCP/IP协议栈的通用计算机,但在这种情况下,它们的路由功能也不涉及TCP或应用层。

我们知道IP是个不可靠的协议,那就应该很清楚,在数据传输路径上,第一个可以讨论确保可靠传输问题的地方就是应用程序B所在主机的TCP层。当一 个段抵达应用程序B所在主机的TCP层时,唯一可以确定的就是这个段已经到达了,但它可能损坏了,可能是重复的数据,可能是错序的,或者是由于其他一些原 因无法接受的。注意,发送端TCP无法对这些抵达接收端TCP的段做出任何保证。

但接收端TCP要向发送端TCP确认,也就是说它ACK的数据以及在此数据之前到达的所有数据在TCP层都已经正确收到了,发送端TCP可以安全地 删除这些数据的副本了。这并不意味着已经将数据传送,或者总是可以将数据传送给应用程序。比如,接收端主机可能在刚刚对数据进行了ACK,但应用程序还没 有将其读走之前,就崩溃了。这个问题值得进一步讨论:TCP向发送端提供的唯一一个数据接收通知就是这个ACK。发送端应用程序无法从TCP自身判断对等 实体应用程序是否真的收到数据了。稍后我们会说明,这是应用程序编写者要弄清楚的一种TCP故障模式。

另一个可以讨论确保可靠传输问题的地方是应用程序B。我们知道,无法保证应用程序A发送的所有数据都会到达。TCP能够向应用程序B保证的是所有到达的数据都是按序且未受损的。

前面已经提到过一种TCP故障模式了:TCP已经ACK了的数据实际上可能不会抵达目的应用程序。这是相当罕见的事情,即使发生这种事情,影响也不会太严重。重要的是网络程序员要知道这种可能性的存在,要对这种或其他所有故障模式可能带来的不良后果有所预防。要避免这样一种看法:TCP会做好一切准备,我们不需要为应用程序协议的健壮性操心。

前面讨论的故障模式有很明确的解决方案。对应用程序来说,明确地知道对等实体收到了某个特定的报文是非常重要的,其对等实体就必须将收到报文的信息通知发送端。通常,这种确认信息都是隐式的。比如,如果客户端向服务器请求一些数据,服务器进行了响应,那么,这个响应就隐式地确认收到了原始请求。

一个更难解决的问题是如果服务器没有对收到的报文进行确认,客户端会怎么做?当然,这与特定的应用程序有很大的关系,很可能没有一个统一的解决方 案。但我们应该注意到,仅仅重发请求很可能无法解决问题:我们不想请求银行进行两次转账。数据库系统使用三阶段提交协议来处理这种类型的问 题,某些应用程序可能会使用类似的策略来确保操作"最多执行一次"。

TCP是一个端对端协议,也就是说它自己要在对等实体之间提供可靠的传输机制。但是,认识到"端点"位于对等的TCP层,而不是对等的应用程序中是非常重要的。要求进行端到端确认的应用程序必须自身提供此项功能(比如WCF实现的WS-RM)。

看看其他一些"常见的"故障模式。只要两个对等实体仍然连着,TCP就能保证将数据按序、无损坏地传送。只有连接中断时才会出现故障。什么类型的事件会造成这种中断呢?有三种情况可能引发这类问题:

(1) 永久或临时的网络中断;

(2) 对等的应用程序崩溃;

(3) 运行对等应用程序的主机崩溃。

我们会看到,在发送端应用程序中,这些事件会以不同的方式显现出来。

 

转载自http://www.cnblogs.com/lwzz/archive/2011/07/03/2096967.html

TCP连接及可靠性、提高性能详解 一、TCP协议的特点 TCP全称为 “传输控制协议”(Transmission Control Protocol),顾名思义, 要对数据的传输进行一个详细的控制。有如下特点: 1、面向连接的 2、面向字节流 3、保证可靠传输(丢包重发,超时重传) 4、支持全双工通信 5、支持端口到端口的连接,每一条TCP连接只能有两个端点 二、TCP协议段格式 如下图: 解释各字段... 阅读详情

相关推荐

TCP和UDP的传输过程以及TCP如何保障传输的可靠性

TCP和UDP都是传输层的协议,传输层的主要任务就是建立应用程序端对端的连接,并且为数据传输提供可靠或不可靠的通信服务。 TCP:提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。 UDP:在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。 TCP建立连接的过程? TCP三次握手: 1、客户端向服务器发送连接请求,请求中包含连接请求的同步序...

fight252的博客 1284

TCP主要特点和可靠性实现

一、主要特点 TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式: (1)基于流的方式; (2)面向连接; (3)可靠通信方式; (4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销; (5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。 为满足TCP协议的这些特点,TCP协议做了如下的规定: ①数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组; ②到达确认:接收端接收到分片数据时

lzg_na的博客 1932

OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域

OpenCV是一个强大的计算机视觉库,广泛应用于图像处理、计算机视觉和机器学习等领域。本文将介绍OpenCV中的一些基础功能,包括如何绘制图形、创建图像金字塔以及如何处理感兴趣区域(ROI)。

吾家有猫名探花的博客 1962

最新java笔试题目(含答案55题)

接口:一个接口允许一个类从几个接口继承而来,Java 程序一次只能继承一个类但可以实现几个接口,接口不能有任何具体的方法,接口也可用来定义可由类使用的一组常量。答:因为类A、B不是接口,所以是不可以直接继承的,但可以将A、B类定义成父子类,那么C类就能实现A、B类的功能了。A) 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过。3、如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢?

WuMingHua_的博客 1万+

Syzkaller实战教程2:运行环境配置+实例运行

本文详细介绍了在linux系统上搭建Syzkaller内核模糊测试环境的完整流程。 1.环境配置:通过VMware创建Ubuntu20.04虚拟机A,配置QEMU/KVM虚拟化环境,安装Go语言工具链和Syzkaller; 2.内核编译:下载Linux内核源码并配置KCOV等调试选项,编译生成带覆盖率支持的bzImage内核镜像; 3.测试环境构建:使用debootstrap创建Debian虚拟机镜像,通过QEMU启动嵌套虚拟机B; 实例测试: 4.演示两种测试场景 - 提供完整上手教程

cuguanren的博客 1376

Linux实战:rMATS可变剪切分析从零到一,避坑指南与结果深度解析

本文详细介绍了在Linux系统上从零开始部署rMATS进行可变剪切分析的完整流程,包括环境搭建、安装避坑指南、参数优化及结果解读。特别针对gfortran依赖、数学库配置等常见问题提供解决方案,并深入解析JC与JCEC结果的差异及可视化技巧,帮助生物信息学研究者高效完成可变剪切分析。

weixin_30394669的博客 409

TCP和UDP是否保证了数据的可靠传输

是的,TCP协议保证了数据的可靠传输。它使用滑动窗口协议来确保数据包的正确接收,如果发现数据包丢失或者损坏,它会自动重新发送这些数据包。 UDP协议并没有保证数据的可靠传输。它是一种无连接协议,所以不会对数据包进行确认,因此在传输过程中可能会丢失数据包。但是,UDP的传输速度比TCP快,因为它没有握手和确认的过程,所以在对实时性要求较高的场合,通常会选择使用UDP协议。 ...

weixin_42581846的博客 495

LLC谐振电路增益公式推导

LLC谐振电路增益公式理解

金凯*博客 1万+

TCP 如何保证可靠性

首先,TCP 的连接是基于三次握手,而断开则是四次挥手。确保连接和断开的可靠性。 其次,TCP 的可靠性,还体现在有状态;TCP 通过校验和、ACK 应答、超时重传来记录哪些数据发送了,哪些数据被接受了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。 再次,TCP 的可靠性,还体现在可控制。通过流量控制(滑动窗口)和拥塞控制来控制发送方发送速率。 1. 校验和 TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部。计算

青鸟飞鱼 1万+

爬虫:一文掌握网站加密和混淆以及浏览器调试的技巧

面对加密和混淆技术的网站,传统的爬虫方法可能难以奏效。通过结合浏览器调试工具(如Puppeteer、Playwright)、代理工具(如Burp Suite、Fiddler)以及动态和静态分析技巧,可以深入理解网站的运行机制,绕过加密和混淆,实现有效的数据抓取。同时,务必注意合法合规,尊重目标网站的规则和用户的隐私,确保爬虫行为的正当性和可持续性。

数据知道的博客 9890

手撕Lua字节码:从黑盒到透明

lua 字节码 怎么‘手撕’一个 chunk 看看里面啥样?我手里有一个.luac或出来的二进制字节码,想知道里面到底是什么结构、哪些字段、有哪些指令,怎么一步一步“拆箱”,从一个黑盒变成有迹可循的东西?也就是:不满足于只会loadpcall而是想亲眼看看一个 chunk 内部长啥样,甚至写点工具把它解析出来。这篇就用带你从“拿到一坨.luac不搞高深玄学,尽量让你看完就能自己动手。注:以 Lua 5.3/5.4 为主,细节各版本略有不同,但大体套路是一致的。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 99

TCP 可靠性

TCP 通过序列号和确认号的机制,能够检测丢失的数据包,并请求重传,从而确保数据的可靠传输。这些机制使得 TCP 成为一个可靠的传输协议,广泛应用于需要高可靠性的数据传输场景,如文件传输、电子邮件和网页浏览等。通过上述示例,您可以看到如何在 C# 中实现基本的 TCP 可靠性机制。虽然这个示例是简化的,但它展示了如何使用序列号和确认号来确保数据的可靠传输。我们可以进一步扩展 TCP 可靠性机制的实现,增加一些更复杂的功能,比如序列号和确认号的管理、超时重传机制、流量控制等。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1355

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 121

TCP的“可靠性”(上)

整个网络中,就可能存在,某个路由器/交换机,某个时刻,突然负载量很高,短时间内可能有大量的数据包要几个这个设备转发。这个时候,如果瞬间的高负载超出了这个设备能转发的数据量的极限,多出来的部分,就无了,就被设备丢包了。上述谈到的,ack,重传,保证顺序,自动去重,都是 TCP 内置的。这个说法是很不准确的,因为三次握手四次挥手只有初次建立连接的时候才会,但是可靠性是整个过程都可靠,那靠的什么呢?此处可靠性,只能“退而求其次”,只要尽可能的去进行发送了,发送方能够指定对方是否收到,就认为是可靠传输了。

t1750982356的博客 1995

2026 AI Agent Harness Engineering 生态报告:开源工具链的现状与未来趋势

IEEE P2863-2025《通用人工智能自主代理技术架构与评估规范》于2025年11月正式发布,将AI Agent(通用人工智能自主代理)定义为:一种具备感知(Perception)、记忆(Memory)、推理(Reasoning)、规划(Planning)、行动(Action)五大核心能力闭环,能够在无显式指令覆盖全部环节的前提下,自主完成特定领域或开放领域复杂任务的智能实体。

AI 算法实战派 497

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TCP可靠性传输

第三个ACK报文丢失 --- 在发送这个报文后客户端已经处于ESTABLISHED建立完成状态,而服务器还在等待客户端的ACK,服务器等不到认为自己出现问题触发超时重传机制并再次发送SYN+ACK报文,如果服务器收到客户端ACK则进入建立完成阶段,如果收不到待达到最大重传次数则服务器关闭连接。MSS --最大段长度 --- TCP建立连接需要协商的参数 --- TCP在建立三次握手时前两个SYN报文中将携带该参数,并且双方的该参数允许不同,如果不同,将按照数值较小的执行。

m0_73907449的博客 1170

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【TCP专题】TCP的可靠性传输

一说到TCP,大家印象中出现的第一个词一定是“可靠”,所以,TCP到底是如何树立的“可靠人设”呢?我们下来就一起分析分析。

Linkjiee的博客 840

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TCP如何保证传输可靠性

TCP协议传输的特点主要就是面向字节流、传输可靠、面向连接。这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的。 确保传输可靠性的方式 TCP协议保证数据传输可靠性的方式主要有: 校验和 序列号 确认应答 超时重传 连接管理 流量控制 拥塞控制 校验和 计算方式:在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。 发送方:在发送数据之前计算检

淘小欣的博客 527

TCP协议的可靠性

保证数据能到达对端: 超时重传和确认应答机制、滑动窗口(发送方发送速率与接收端的接收缓冲区空间匹配) 、拥塞控制(发送方发送速率与网络环境匹配) 保证数据不乱序,不重复:TCP报头中的32位序号,序号值为随机值ISN+报文段所携带数据的第一个字节在整个字节流中的偏移量。 保证数据不失真: TCP报头中的16位冗余校验码,接收端对TCP的头部和数据部分通过CRC算法进行冗余校验 1.检验和冗...

上道的程序员 1270

Linux:TCP保证可靠性的方案(2)

根据冯诺依曼体系结构,网卡也算是外设,所以按道理来说发送方发送更多的数据,发送的效率也就更高!!窗口越大, 网络吞吐量就越大, 传输效率就越高. 我们的目标是在保证网络不拥塞的情况下尽量提高传输效率!

weixin_51142926的博客 5727

简单聊聊 TCP 的可靠性

作者 | 田伟然回首向来萧瑟处,归去,也无风雨也无晴。杏仁工程师,关注编码和诗词。前言传输控制协议(缩写:TCP )是一种面向连接的、可靠的、基于字节流的传输层通信协议...

杏仁技术站 1376

TCP如何保证可靠性

TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。这也是TCP可靠传输的一个重要保障。在TCP中,窗口的大小是在TCP三次握手后协定的,并且窗口的大小并不是固定的,而是会随着网络的情况进行调整。

master-dragon的专栏 1310

TCP的可靠性

应用数据被分割成TCP认为最适合发送的数据块。(这和UDP完全不同,应用程序产生的数据报长度将保持不变)。确认响应:对于一个收到的请求,将发送一个确认。这个确认通常要延迟几分之一秒。超时重传: 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。TCP给发送的每一一个包进行编号 ,接收方对数据包进行排序,把有序数据传送给应用层。

only_tian的博客 344
上一篇: 临界区(锁)windows/linux通用
下一篇: qtp10.0下鼠标滚轮事件
quiteman
博客等级 码龄16年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值