TCP可靠传输的保证

我们知道传输层提供最主要的两种协议,TCP和UDP,其中TCP是保证可靠传输,为什么他要保证可靠传输呢,IP说:当然是我不能,我只提供尽力而为的服务,不保证你能不能交付,不保证能不能正确的交付,不保证能不能按顺序交付。要不然干嘛要你保证呢。说的好有道理,我呵呵一笑。

那么可靠数据传输到底能保证什么呢?

1.不错:就是传输的数据包没有错误

2.不丢:传输的数据包不丢失

3.不乱:传输的数据包顺序要保持正确的交付。

可靠传输协议凭什么能做出这样的保证呢?

1.差错检测:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。

2.超时重发和确认机制:当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。

3.缓存机制:每个分组都会有一个序列号,对于后一个序列号分组先到的情况,接收端会先进行缓存,等待前一个序列号到达,然后一起交付上层。

重点讲一下流水线可靠传输协议,其实也就是滑动窗问题。

对于使用流水线可靠传输协议,如果出现丢包,损坏或超时会有哪些方法来解决呢?两种方法:回退N步(Go-Back-N,GBN)和选择重传(Selective Repeat,SR)

GBN协议

发送端维持这一个长度为N的滑动窗口,你也可以理解为一个数组。

1.窗口里含有发送但是没收到确认的分组,以及剩下可用的坑位,如果有可用的坑位,上层需要发送数据,则直接发送,否者缓存或返回给上层。

2.接收端实行累积确认,也就是说当接收端传送的确认号为100,也就是前面的序号都是收到了,

3.如果超时未收到确认,发送端会重传所有发送但未确认的分组。只有一个定时器,用来记录窗口的最前端,也就是最早发送的分组。

4.因为此协议是使用的累积确认,所以所有为按序到达的分组都会被丢弃。

选择重传

1.发送端和接收端都会维持一个窗口,大小为N。

2.接收端每收到一个分组就会发送一个确认,并且会缓存不是按序到达的分组

3.发送端会标记已经被确认的分组,当窗口第一个值被确认后,窗口向后滑动。每一个分组为此自己的定时器。

4.当一个分组超时了,只会重传超时的分组。

窗口长度必须小于或等于序号空间大小的一半。

TCP的可靠传输协议是GBN和SR的混合的

1.他是基于累积确认的,

2.但是他是可以缓存的,不会丢弃乱序的分组,

3.只有一个定时器,记录发送端窗口的第一个未确认的分组的时间,超时发送第一个分组。

时间: 2024-12-14 18:04:25

TCP可靠传输的保证的相关文章

数据流和数据报、TCP可靠传输

数据报表明是一个整体,write几次,就读取几次 数据流是基于字节的,1次write100个字节,肯能分10次读取 TCP基于数据流面向连接的,UDP基于数据报面向非连接的 TCP提供可靠服务的理解: 1.基于连接的,3次握手协议 2.差错检验.超时重发.滑动窗口协议保证了可靠性. 1.想象数据包只会出错,一次只能发一个包,确认后才能发下一个包:差错检验.发送端发包,接受段接包,发现错误,发送NCAK,发送端收到后重发包. 当NCAK也出错时,怎么办?当发送端在等待ACK的过程中,收到ACK或N

TCP可靠传输机制

TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接.这一过程与打电话很相似,先拨号振铃,等待对方摘机说"喂",然后才说明是谁.在一个TCP连接中,仅有两方进行彼此通信.广播和多播不能用于TCP. TCP通过下列方式来提供可靠性: 1.面向字节流和缓存机制:应用数据被分割成TCP认为最适合发送的数据块.这和UDP完全不同,应用程序产生的数据长度将保持不变.由TCP传递给IP的信息单位称为

计算机网络(9)-----TCP可靠传输的实现

TCP可靠传输的实现 以字节为单位的滑动窗口 滑动窗口的滑动是以字节为单位的,发送方A和接收方B在TCP三次握手的前两次握手时协商好了发送窗口和接受窗口的大小,发送方A根据B发送来的确认连接报文中标明的窗口的大小,来确定收到确认前的最大发送数据量,如果A接收到的B发来的确认报文中标明的窗口大小为0,则停止发送数据,直到收到不为0的确认报文,再继续发送.发送窗口表示在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去,凡是已发送过的数据,在没有收到确认前都要暂时保留,以便超时重传时使用.

TCP可靠传输及流量控制实现原理

一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些. 出现差错或丢失的时候,发送方会将自己备份的副本再重传一次,直到收到接收的确认信息.当接收方收到重复的数据时,会直接丢弃,但是会给发送方请确认自己已经收到了. 2. 改进的停止等待协议——连续ARQ协议和滑动窗口协议 上面的停止等待协议每发送一组数据就必须等到接收

TCP可靠传输详解

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

tcp可靠传输的机制有哪些(面试必看

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

TCP可靠传输:校验和,重传控制,序号标识,滑动窗口、确认应答

Tcp通过校验和,重传控制,序号标识,滑动窗口.确认应答实现可靠传输 应答码:ACK TCP的滑动窗口机制       TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小:一种是滑动的窗口.这个窗口大小就是我们一次传输几个数据.对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送:同时接收方也维持着一个接收窗口,只有落在接收窗口内

TCP可靠传输的实现

假设我们讨论A向B发送数据,A端有发送窗口,B端有接受窗口 根据 B 给出的窗口值 A 构造出自己的发送窗口,假如A收到了B的确认报文,此时窗口的值为20,确认序号的值为31,那么接收端会构造出下面的窗口 这里面前后沿可以不动和前移,但是前沿可以后移(不建议) 下面我们讨论发送窗口 (1)发送窗口表示,里面的数据在未收到确认数据报之前,都可以连续发送,但是发送了的,必须保留,以便于重传 (2)如果窗口越大,那么可以连续发送的却多,但是前提是接收窗口可以及时接收 (3)发送窗口后沿的部分表示已经确

TCP实现可靠传输的机制

实现可靠传输需要保证三个条件: (1)无比特差错传输 (2)字节流不丢不重不乱序 (3)接收方的处理能力大于发送速率 **************************************************************** TCP的首部检验和会检查首部和数据段,保证报文段无比特差错,满足条件(1). 应用程序把数据缓存到发送缓存,接收方TCP把数据放到接收缓存.发送方根据接收方反馈回来的窗口设置发送窗口,窗口是缓存的前片段,缓存内窗口外的字节不允许发送,实现了流量控制,满