TCP协议的可靠传输

一、TCP协议的可靠传输

TCP的可靠传输基于ARQ协议;

TCP的滑动窗口以字节为单位;

考虑一种情况:窗口中的数据全部都发送出去了,但是全都没有收到确认号,可用窗口为0,窗口是不能向前推进的。

一种特殊情况:窗口中所有数据都已经发送出去了,但确认号不是按顺序收到的

so:可靠传输的效率不是很高。

选择重传:选择重传需要指定需要重传的字节;每一个字节都有一个唯一的32位序号,选择重传需要指定的就是这个序号;这个指定的字节序号是存储在TCP选项里面的。

选择重传更多时候是对一段字节进行重传的。重传的数据是一个边界,重传的序号不是指字节,而是指一个范围

二、TCP协议的流量控制---TCP特有的功能

接收方希望发送方可以将数据发送的慢一些。

流量控制是指让发送方发送速率不要太快;流量控制是使用滑动窗口来实现的。

接收方通过窗口的大小调整来告诉发送方继续进行数据的发送。

考虑一种情况:接收方在告诉发送方可以接收数据的时候发生了报文丢失:发送方会一直等待,接收方认为发送方应该给自己发送报文,也会一直等待,两者都在等待,进入了死锁状态。

TCP的可靠传输是对数据的确认,对特殊消息(如窗口大小)是没有超时重传的机制的,所以会导致发送方接收方进入死锁状态。-----解决方法为 坚持定时器

坚持定时器:

(1)当发送方接收到窗口为0的消息,就会启动坚持定时器

(2)坚持定时器每隔一段时间发送一个窗口探测报文(询问到窗口是否变大)

三、TCP的拥塞控制

一条数据链路结果非常多的设备;数据联路中各个部分都有可能成为网路传输的瓶颈;

流量控制与拥塞控制:

(1)流量控制考虑点对点的通信量的控制,流量控制通过窗口进行通信量的限制

(2)拥塞控制考虑整个网络,是全局性的考虑。报文超时则认为是拥塞

拥塞控制的算法:

(1)慢启动算法:

  由小到大逐渐增加发送数据量;

  每收到一个报文确认,就加一;   1  2  4  8  16   -----   指数增长   --- 慢启动阈值  --  到达阈值之后就会进行下一个算法

(2)拥塞避免算法:

  维护一个拥塞窗口的变量

  只要网络部不拥塞,就试探着将拥塞窗口调大,每一次加一;1 2 4 8 16  17  18  19

四、TCP连接的建立

TCP标记位:重要的有3个

(1)ACK:acnowledgement----确认位,ACK=1,确认位才生效

(2)SYN:synchronization---同步位,SYN=1,表示连接请求报文

(3)FIN:finish---终止位,FIN=1,表示连接释放

为什么发送方要发出第三个确认报文呢?为什么TCP连接的建立要三次握手呢?

两次握手就可以建立起连接了,但是还是需要第三次。

(1)三次握手可以避免:已经失效的连接请求报文传送到对方,引起错误

有了第三次握手,就不会对一开始延迟了的报文再进行第三次的处理。

四、TCP连接的释放----四次挥手

发送方:断开连接的第一个等待状态;断开连接的第二个等待状态;

主动释放连接的这一方有一个等待计时的状态,只有在等待计时之后才会进入关闭状态。

等待计时器:等待时间为2MSL,

  MSL(Max Segment Lifetime):最长报文段寿命,MSL建议设置为2分钟

为什么需要等待2MSL?

  最后一个报文没有确认 ;

  计时器---确保发送方的ACK可以到达接收方;如果第四个报文没有被接收方接收到,2MSL时间内没有收到,则接收方会重发

  计时器---确保当前所有连接的所有报文都已经过期,如果最后一个报文都已经超过2MSL了,那么其他的报文也肯定超过了2MSL,都已经过期了。

原文地址:https://www.cnblogs.com/1220x/p/11762108.html

时间: 2024-10-07 19:03:25

TCP协议的可靠传输的相关文章

为什么说TCP协议是可靠的

问题背景 日常面试时,几乎所有学过计算机的都知道,TCP协议是可靠的,UDP协议不可靠的.为什么TCP协议是可靠的?它用什么机制保证可靠呢? 提出问题 由于IP 数据包的 MTU 有长度限制, TCP报文段过大时,需要切割.切割之后发送出去,由于网络链路的不确定性,接收端接收到包的次序和发送次序很大概率是不一致的.接收端如何把接收到的"同一批"TCP报文段数据拼接成预期的二进制数据? 发送方发送了一个TCP报文,怎么样确认接收方接收到了这个报文? 发送方发送了一个TCP报文,接收端如何

TCP如何保证可靠传输

一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报. tcp会按MTU合理分片,接收方会缓存未按序

python 基于tcp协议的文件传输3_解决粘包问题

server import jsonimport structimport socket# 接收sk = socket.socket()sk.bind(('127.0.0.1',9001))sk.listen() conn,_ =sk.accept()msg_len = conn.recv(4)dic_len = struct.unpack('i',msg_len)[0]msg = conn.recv(dic_len).decode('utf-8')msg = json.loads(msg) w

3.9.2.TCP协议的学习1

本节详细借助TCP协议的特性,重点是TCP协议如何保证实现可靠书擦拭的是指 3.9.2.1.关于TCP理解的重点 (1)TCP协议工作在传输层,对上服务socket接口,对下调用IP层 (2)TCP协议面向连接,通信前必须先3次握手建立连接关系后才能开始通信. (3)TCP协议提供可靠传输,不怕丢包.乱序等. 3.9.2.2.TCP如何保证可靠传输 (1)TCP在传输有效信息前要求通信双方必须先握手,建立连接才能通信 (2)TCP的接收方收到数据包后会ack给发送方,若发送方未收到ack会丢包重

可靠的传输层协议——TCP协议

TCP协议 TCP协议工作在传输层,虽然它与UDP的下一层都是IP但是它却和UDP的效果完全不同,它是一种可靠的传输层协议 一.TCP协议封装 TCP数据段头部共有20个字节,包括16位的源端口号,16位的目的端口号,端口号与前面各层中的协议类型相似,都指的是上层将要交给谁,这个端口号就是主机上一个进程所绑定的一个入口,所以通过端口号和IP就能找到唯一主机的唯一进程. 32位序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节.如果将字节流看作在两个应用

TCP可靠传输的保证

我们知道传输层提供最主要的两种协议,TCP和UDP,其中TCP是保证可靠传输,为什么他要保证可靠传输呢,IP说:当然是我不能,我只提供尽力而为的服务,不保证你能不能交付,不保证能不能正确的交付,不保证能不能按顺序交付.要不然干嘛要你保证呢.说的好有道理,我呵呵一笑. 那么可靠数据传输到底能保证什么呢? 1.不错:就是传输的数据包没有错误 2.不丢:传输的数据包不丢失 3.不乱:传输的数据包顺序要保持正确的交付. 可靠传输协议凭什么能做出这样的保证呢? 1.差错检测:TCP将保持它首部和数据的检验

TCP可靠传输详解

TCP提供了可靠的传输服务,这是通过下列方式提供的: 分块发送:应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给IP的信息单位称为报文段或段(segment) 定时确认重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段.如果不能及时收到一个确认,将重发这个报文段. 当TCP收到发自TCP连接另一端的数据,它将发送一个确认.这个确认不是立即发送,通常将推迟几分之一秒 数据校验:TCP将保持它首部和数据的检验和.这是一个端到端的检验和,目的是检测数据在传输过程中的

TCP协议的三次握手+四次断开

TCP协议的三次握手 1.TCP/IP协议概述 TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础.TCP/IP是网络中使用的基本的通信协议.虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录.文件传输和电子邮件等,而TCP协议和IP协议是保证数

Http协议与TCP协议简单理解

在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解. TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的.所以Http连接是一种短连接,是一种无状态的连接.所谓的无状态,是指浏览器每次向服务器发起请求的时候,