TCP可靠传输原理
停止等待协议
“停止等待”就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送。
超时重传
发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有送达,从而重新发送分组。
TCP通过以下的方式实现超时重传:
- 超时计时器:每发送完一个分组后,tcp都会设置一个超时计时器。超时计时器的超时时间往往要大于报文的平均往返时间。
- 分组副本:发送分组后,tcp会保留分组的副本,只有收到分组的确认后才会清除
- 分组编号:TCP会对每一个分组编号,确认分组和发送的分组编号对应。
连续ARQ协议
如果TCP每发送一个分组就要等待的话,势必会浪费大量的时间,使得网络利用率降低。所以TCP采用了连续ARQ的方式,也就是每次发送多个分组,然后使用累积确认的方式确认。
- 累积确认:接收方只对按序到达的最后一个分组发送确认。
假如发送方一次性发送了[1,2,3,4,5]五个分组,接收方只接受到了[1,2,4,5]四个分组。按照按序最后一个的规则,接收方只会发送 2 号分组的确认。发送方将收不到后面三个分组的确认,所以会重传3,4,5。
累积确认使用了滑动窗口实现,它的优点是不需要对每个分组发送确认,从而减少了网络开销。缺点是不能向发送方真实反映收到分组的信息,比如上面例子里,发送方认为 3 号分组以后的都没有收到,但是接收方其实是收到了4,5号分组的。
以字节为单位的滑动窗口
发送方和接收方分别维护 发送窗口 和 接收窗口 两个滑动窗口。
发送窗口维护了三个指针p1、p2、p3,它们划分了发送窗口的区域:
- [p1, p2):等待确认区域,记录已发送但没收到确认的分组。
- [p2, p3] :可用窗口,允许发送但是还未发送的分组。
既然是滑动窗口,那么它的左右边界应该是能够移动的,下面来分析发送窗口的左右边界的移动。
p2前移
p2指针指向的是第一个允许发送但还未发送的分组,所以p2的前移是发送方发送了新的分组。
p1前移
p1指针只有在收到确认后才会移动到被确认分组的下一个分组。
因为采用的累积确认的方式,接收方只会发送按序到达最后一个分组的确认,所以p1的前移可能不止一个分组。
比如向上图的情况,假如接收方收到了31,32,33三个分组,它只会发送按序到达最后分组的确认,也就是33号分组的确认。此时发送方的p1指针将会直接从31号位置移动到34号位置,也就是收到确认分组的下一个。
p3前移
p3的前移是收到接收方发送的确认报文的窗口字段控制的。
窗口值表示从确认分组号开始到p3的分组数量。比如确认分组号为101,窗口值为200,那么p3就会移动到301的位置。
接收方通过窗口值来控制发送窗口的大小也叫做流量控制,这里不过多介绍。
TCP缓存
TCP既然能够保留未确认的分组以及按序发送确认,它肯定需要一个内存空间作为缓存,而不是直接用应用进程的内存。
如图所示,接收方和发送方各自维护了一个缓存,发送窗口和接收窗口都在这个缓存中。首先TCP缓存有以下特点:
- 因为缓存空间和序号有限,TCP缓存是循环使用的,是一个环形的结构。
- 滑动窗口只是缓存的一部分,已经确认的数据会被删除。
发送缓存和接收缓存结构相同但是作用不同。
发送缓存
- 缓存应用程序让TCP发送的数据
- 暂存已经发送但未收到确认的数据
接收缓存
- 暂存未按序到达的数据
- 缓存按序到达但没有被应用程序读取的数据
总结
- TCP可靠传输的原理是超时重传和连续ARQ
- 超时重传时间大于分组平均往返时间
- 连续ARQ采用了累积确认的方式发送确认
- TCP通过发送窗口和接收窗口实现可靠传输
- 发送窗口大小受到接收方的窗口值控制
- 滑动窗口是TCP缓存的一部分,TCP缓存是一个环形结构,还负责缓存应用程序数据
TCP可靠传输原理的更多相关文章
- 网络学习笔记(二):TCP可靠传输原理
TCP数据段作为IP数据报的数据部分来传输的,IP层提供尽最大努力服务,却不保证数据可靠传输.TCP想要提供可靠传输,需要采取一定的措施来让不可靠的传输信道提供可靠传输服务.比如:出现差错时,让发 ...
- TCP可靠传输的工作原理
TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...
- TCP可靠传输及流量控制实现原理
一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...
- TCP/IP详解学习笔记(14)-- TCP可靠传输的实现
1.概述 为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口 TCP的滑动窗口是以字节为单位的.为了便于说明,字节编号取得 ...
- TCP可靠传输的实现
TCP可靠传输的实现 1.概述 为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口 TCP的滑动窗口是以字节为单位的.为了 ...
- 计算机网络概述 传输层 TCP可靠传输的实现
TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...
- 运输层6——TCP可靠传输的实现
目录 1. 以字节为单位的滑动窗口 2. 超时重传时间的选择 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3- ...
- TCP 可靠传输与流量控制的实现
TCP 可靠传输与流量控制的实现 一.TCP可靠传输的实现 现在所讲的可靠传输是根据之前所说的可靠传输原理的实现,是现实中应用的技术. 1.1.以字节为单位的滑动窗口 如图A端一份文件分为了多个字节, ...
- TCP可靠传输
1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...
随机推荐
- OpenGL学习笔记(五)变换
目录 变换 向量 向量的运算 向量与标量运算 向量取反 向量加减 求向量长度 向量的单位化 向量相乘 点乘(Dot Product) 叉乘 矩阵 矩阵的加减 矩阵的数乘 矩阵相乘 矩阵与向量相乘 与单 ...
- C作用域
任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定义中 局 ...
- Kong网关安装之Docker版(1)
前言: Kong 是天生的微服务网关.她的官方简介是:Kong 是一个云原生,高效,可扩展的分布式 API 网关. 自 2015 年在 github 开源后,广泛受到关注,目前已收获 1.9w+ 的 ...
- 计算机网络 中国大学MOOC 哈尔滨工业大学 习题答案
转自 https://blog.csdn.net/qq_37514135/article/details/82733651 计算机网络作业题 第一章 第一题 如图所示网络.A在t=0时刻开始向C发送一 ...
- systemd.service — 服务单元配置
转载:http://www.jinbuguo.com/systemd/systemd.service.html 名称 systemd.service - 服务单元配置 大纲 service.servi ...
- C# CS0050 可访问性不一致: 返回类型 错误
今天学习C#代码过程中,遇到可访问性不一致的错误: 严重性 代码 说明 项目 文件 行 禁止显示状态错误 CS0050 可访问性不一致: 返回类型"Transaction"的可访问 ...
- Windows内核基础知识-1-段寄存器
Windows内核基础知识-1-段寄存器 学过汇编的应该都知道段寄存器,在Windows里段寄存器有很多,之前可能只接触了ds数据段,cs 代码段这种,今天这个博客就介绍Windows一些比较常用的段 ...
- wpf 中的 自定义控件的 binding
XMl 代码 --------------------------------------------------------------------------------------------- ...
- WPF日积月累之DataGrid样式以及操作数据模板中的控件
一.效果图 二.代码预览 1 <Window x:Class="Test.MainWindow" 2 xmlns="http://schemas.microsoft ...
- 在VS工程中,添加c/c++工程中外部头文件(.h),lib库,dll库的基本步骤
选择工程,右键-工程属性 其中: VC++目录 -->包含目录,对所有的项目及未来新建的项目都有效 c/c++-->常规-->附加包含目录,仅对当前项目有效 绝对路径设置方法: 在V ...