TCP可靠传输的工作原理

一、停止等待协议

1.1.简介

  • 在发送完一个分组后,必须暂时保留已发送的分组的副本。
  • 分组和确认分组都必须进行编号。
  • 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。

1.2.确认数据包丢失和迟到

  • 当确认M1的数据包丢失时,A经过一段超时时间后重传M1,B接收并丢弃重复的M1之后,重传确认M1数据包;
  • 当B发送的确认M1数据包由于网络原因,绕远路了,在A端规定的超时时间内未到达A,A端就会重传M1,B接收并丢弃重复的M1之后,重传确认M1数据包,并继续通信。当迟到的确认M1数据包到达A时,A收下数据包但什么也不做。

记住一点:只要没有告诉我你收到了,就表明你没收到,我就要重发。

1.3.可靠通信的实现

  • 使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
  • 这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。
  • ARQ 表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组 。

1.4.信道利用率

停止等待协议的优点是简单,但缺点是信道利用率太低。

  • TD表示发送分组数据包用的时间,RTT是数据包传输往返的时间,TA是接受确认用的时间。

  • 信道的利用率 U

可以到这样信道的利用率U是很低的。

1.5.流水线传输

由以上公式可知,只要提高发送数据包时间TD就可以提高信道利用率U,采用流水线传输方式。

  • 发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。
  • 由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率 。

ACK表示确认报文。

现在大多采用这种方式,那如何保证可靠传输呢?采用连续ARQ协议。

1.6.连续 ARQ 协议

  • 假设发送窗口是5,也就是发送方一次性能发5个数据包。当发送方收到数据包1的接收确认后表示接收方接收了数据包1,之后发送窗口向前滑动一个数据包,在发送窗口中删除数据包1的缓存。
  • 即如果发送了5个数据包后没有收到确认信息就会停止继续发送数据包。
  • 滑动窗口方式仍需每个数据包对应一个确认,效率不高,接收端可采用累积确认。

1.7.累积确认

  • 接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了
  • 累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的有分组的信息。

1.8.Go-back-N(回退 N)

  • 如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
  • 这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。
  • 可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。

1.9.TCP 可靠通信的具体实现

  • TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口
  • TCP 的可靠传输机制用字节的序号进行控制。TCP 所有的确认都是基于序号而不是基于报文段。
  • TCP 两端的四个窗口经常处于动态变化之中。
  • TCP连接的往返时间 RTT 也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。

TCP可靠传输的工作原理的更多相关文章

  1. 运输层4——TCP可靠运输的工作原理

    目录 1. 停止等待协议 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控制协议TCP概述 运输层4- ...

  2. 运输层6——TCP可靠传输的实现

    目录 1. 以字节为单位的滑动窗口 2. 超时重传时间的选择 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3- ...

  3. TCP可靠传输原理

    停止等待协议 "停止等待"就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送. 超时重传 发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有 ...

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

    一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...

  5. TCP可靠传输的实现

    TCP可靠传输的实现 1.概述      为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口      TCP的滑动窗口是以字节为单位的.为了 ...

  6. 计算机网络概述 传输层 TCP可靠传输的实现

    TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...

  7. TCP 可靠传输与流量控制的实现

    TCP 可靠传输与流量控制的实现 一.TCP可靠传输的实现 现在所讲的可靠传输是根据之前所说的可靠传输原理的实现,是现实中应用的技术. 1.1.以字节为单位的滑动窗口 如图A端一份文件分为了多个字节, ...

  8. TCP 重置攻击的工作原理

    原文链接:https://fuckcloudnative.io/posts/deploy-k3s-cross-public-cloud/ TCP 重置攻击 是使用一个单一的数据包来执行的,只有几个字节 ...

  9. TCP可靠传输

    1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...

随机推荐

  1. RAID和LVM

    EXT家族支持度最广,但创建文件系统慢修复慢存储容量有限 XFS同样是日志文件系统:容量大,支持大存储高性能,创建/修复文件系统快inode与block都是系统需要用到时,才动态配置产生 基本分区(静 ...

  2. 在Linux中#!/usr/bin/python之后把后面的代码当成程序来执行。 但是在windows中用IDLE编程的话#后面的都是注释,之后的代码都被当成文本了。 该怎么样才能解决这个问题呢?

    本文转自:http://bbs.csdn.net/topics/392027744?locationNum=6&fps=1 这种问题是大神不屑于解答,小白又完全不懂的问题... 同遇到这个问题 ...

  3. Qt platform plugin 'windows' 问题的解决方法

    关于Qt 发布程序时遇到qt platform plugin ‘windows’问题的解决方法如下  遇到这个问题,一般应该已经把一部分dll拷贝到了发布的可执行文件同级目录, 我是直接添加C:\Qt ...

  4. python语法基础-函数-基础-长期维护

    ###############    函数的定义调用,返回值和返回值接收    ############## def mylen(): s = "myname" i = 0 for ...

  5. crm项目-权限组件

    ###############    表结构分析     ################ """ 表结构设计: 1,四张表 用户表,userinfo,这个表本身不会被创 ...

  6. Excel-DNA开发包:ExcelDna-0.34.6.zip下载

    Excel-DNA可以用VB.Net或C#开发Excel自定义函数.制作.xll格式的加载宏. 点此下载 ExcelDna-0.34.6.zip

  7. linux下安装glibc-2.14,解决“`GLIBC_2.14' not found”问题

    下载安装包:http://ftp.gnu.org/gnu/glibc/ 我下载的是glibc-2.14.1.tar.gz 解压:tar xzf glibc-2.14.1.tar.gz cd glibc ...

  8. 前端之css引入方式/长度及颜色单位/常用样式

    1.css三种引入方式 <!DOCTYPE html><html><head> <meta charset="UTF-8"> < ...

  9. Java反射的应用 --- 内省

    一.基础概念 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.Java JDK中提供了一套 API 用来访问某个属性的 getter/sette ...

  10. Java 的 ArrayList 的底层数据结构

    1. 数据结构--ArrayList源码摘要 ublic class ArrayList<E> extends AbstractList<E> implements List& ...