TCP怎样保证可靠传输
TCP的可靠性保证
TCP主要提供了检验和,序列号/确认应答,超时重传,最大消息长度,滑动窗口控制等方法实现了可靠性传输。
检验和
通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部,TCP数据和TCP伪首部。

序列号/确认应答
发送端发送信息给接收端,接收端会回应一个确认应答包。上述过程中,只要发送端有一个包传输,接收端没有回应确认包(ACK),都会重发。或接收端的应答包,发送端没有收到也会重发数据。这样就保证了数据的完整性。

超时重传
超时重传的时间指发送出去的数据包到接收确认包之间的时间,若超过了这个时间会被认为丢包,需要重传。如何确定这个时间值的大小呢?
我们知道一来一回称为一个RTT,然后可能由于网络等问题,时间会有偏差,这个偏差称为抖动(方差)。超时重传的时间大概就是比RTT+抖动值稍大的时间。

- 在重发的过程中,假如一个数据包经过多次重发也没有收到对端的确认包,就会认为接收端异常,强制关闭连接。并且通知应用通信异常终止。
最大消息长度
在建立TCP连接时,双方约定一个最大的长度(MSS)作为发送的单位,重传时也是按照这个单位来进行。理想的情况下该长度刚好不被网络层分块。

滑动窗口控制
- 超时重传存在效率低下,滑动窗口机制窗口的大小即是无需等待确认包情况下,发送端还能发送的最大数据量。此机制的实现利用了大量缓冲区,通过对多个段进行确认应答的功能。通过下一次的确认包即可判断接收端是否已经接收到数据,若已经接收从缓冲区删除数据。

- 如图,若接收端没有收到自己所期望的序列号数据之前,会对之前的数据进行重复确认;这时发送端如果在收到某个ack应答包后又连续三次收到同样的应答包,此时就会判断数据已经丢失,需要重发。
拥塞控制
- 窗口控制解决了两台主机因传送速率不同引起的丢包。但若网络非常拥堵,此时再发数据可能导致发送的数据段超过最大生存时间,导致未到达接收方。为此TCP引入慢启动,先发出少量数据探路,再决定。
- 慢启动:在启动初期以指数增长;设置一个慢启动阈值,以指数增长达到阈值开始按照线性增长至拥塞窗口;达到网络拥塞时立刻把拥塞窗口置为1,进行新一轮慢启动,同时新一轮的阈值为达到网络拥塞时拥塞窗口的一半。

TCP怎样保证可靠传输的更多相关文章
- TCP如何保证可靠传输
TCP 协议如何保证可靠传输 一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...
- TCP如何保证可靠传输(转)
TCP协议传输的特点主要就是面向字节流.传输可靠.面向连接.这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的. 确保传输可靠性的方式TCP协议保证数据传输可靠性的方式主要有: 校验和 序列 ...
- TCP 协议如何保证可靠传输
一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层 ...
- TCP是如何保证可靠传输的
TCP 协议如何保证可靠传输 一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...
- TCP协议如何保证可靠传输?
一.TCP的可靠传输如何保证? 在TCP连接中,数据流必须以正确的顺序传送给对方.TCP的可靠性是通过顺序编号和确认(ACK)实现的.TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中, ...
- TCP协议如何保证可靠传输
TCP协议如何保证可靠传输 概述: TCP协议保证数据传输可靠性的方式主要有: (校 序 重 流 拥) 校验和: 发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化.如果收到段的检 ...
- 转载:TCP协议如何保证可靠传输
转载至:https://www.cnblogs.com/xiaokang01/p/10033267.html TCP协议如何保证可靠传输 概述: TCP协议保证数据传输可靠性的方式主要有: (校 序 ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- TCP协议是如何保证可靠传输的【经典】
参考:http://blog.csdn.net/cmm0401/article/details/77878998 从特点上我们已经知道,TCP 是可靠的但传输速度慢 ,UDP 是不可靠的但传输速度快. ...
- TCP协议中是如何保证报文可靠传输的
1.什么是TCP的可靠传输 它向应用层提供的数据是无差错的.有序的.无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. 2.TCP保证可靠传输的办法有哪些? TCP采用 ...
随机推荐
- day04-功能实现03
家居网购项目实现03 8.功能07-后台管理 显示家居 8.1需求分析/图解 给后台管理提供独立登录页面,管理员登录地址不对外公开 管理员登录成功后,显示管理菜单页面 管理员点击家居管理,显示所有家居 ...
- Spring IOC官方文档学习笔记(二)之Bean概述
1.Bean概述 (1) Spring IoC容器管理一个或多个bean,这些bean是根据我们所提供的配置元数据来创建的,在容器内部,BeanDefinition对象就代表了bean的配置元数据,它 ...
- [OpenCV实战]2 人脸识别算法对比
在本教程中,我们将讨论各种人脸检测方法,并对各种方法进行比较.下面是主要的人脸检测方法: 1 OpenCV中的Haar Cascade人脸分类器: 2 OpenCV中的深度学习人脸分类器: 3 Dli ...
- [seaborn] seaborn学习笔记5-小提琴图VIOLINPLOT
文章目录 5 小提琴图Violinplot 1. 基础小提琴图绘制 Basic violinplot 2. 小提琴图样式自定义 Custom seaborn violinplot 3. 小提琴图颜色自 ...
- 腾讯出品小程序自动化测试框架【Minium】系列(二)项目配置及测试套件使用说明
一.写在前面 真的人这一散漫惯了,收心就很难了,上午把小程序开发环境启动后,在QQ游戏里,杀了三把象棋,5把2D桌球,一上午没了,还是没法心静下来去学点东西. 那就老样子,逼着自己开始,找到 &quo ...
- 【高并发】AQS中的CountDownLatch、Semaphore与CyclicBarrier用法总结
CountDownLatch 概述 同步辅助类,通过它可以阻塞当前线程.也就是说,能够实现一个线程或者多个线程一直等待,直到其他线程执行的操作完成.使用一个给定的计数器进行初始化,该计数器的操作是原子 ...
- golang主协程等待子协程执行完毕
无限等待 计时等待 channel通信 select 等待组
- 主线程-创建Thread类的子类
主线程 Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码.Jav ...
- 一键部署nfs、rsync、sersync
一键部署nfs.rsync.sersync 项目代码: 链接:https://pan.baidu.com/s/13I0BBAYsdK-KmPekZ5VpdA 提取码:u2tw --来自百度网盘超级会员 ...
- 笔记:C#Quart帮助类 定时器 拿来即用
using Quartz.Impl; using Quartz.Impl.Triggers; using System; using System.Collections.Generic; using ...