【计算机网络笔记】传输层——TCP的可靠数据传输

系列文章目录

什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)——速率、带宽、延迟
计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求
Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
Cookie技术
Web缓存/代理服务器技术
传输层服务概述、传输层 vs. 网络层
传输层——多路复用和多路分用
传输层——UDP简介
传输层——可靠数据传输原理之Rdt协议
传输层——可靠数据传输之流水线机制与滑动窗口协议
传输层——TCP特点与段结构


  • 系列文章目录
  • TCP的可靠数据传输
  • RTT和超时
  • TCP发送方要处理的事件
  • TCP接收方如何生成ACK
  • 快速重传机制
  • TCP流量控制机制


TCP的可靠数据传输

前面学习了可靠数据传输的原理,而TCP是要提供可靠数据传输服务的,那我们下面来看下TCP运用了哪些前面学过的原理、TCP的可靠数据传输是怎样实现的。

概括地来看:

  • TCP 在IP层提供的不可靠服务基础上实现可靠数据传输服务
  • 使用流水线机制,以便提高性能
  • 使用累积确认
  • 使用单一重传定时器
  • 触发重传的事件有:超时、收到重复ACK

我们在这里暂时不考虑重复ACK、拥塞控制、流量控制对可靠数据传输带来的影响。所以并不完整。

RTT和超时

要想处理丢失,就要设置定时器的超时时间,那这个时间多少是合理的?

我们有个重要的参考指标可以利用,那就是RTT,首先是要大于RTT。但是RTT是变化的,若超时时间过短可能造成不必要的重传, 若过长则可能对段丢失时间反应慢。

那首先要计算/估计RTT:使用SampleRTT测量对段丢失时间反应慢从段发出去 到收到ACK的时间。在这个过程中要忽略重传。为了更准确,我们测量多个SampleRTT,求平均值 ,形成RTT的估计值EstimatedRTT。使用一种指数加权移动平均的方法。阿尔法的典型值是0.125。

在这里插入图片描述

定时器超时时间的设置:EstimatedRTT + “安全边界“。若EstimatedRTT变化大,那就要加一个较大的边界。那我们继续测量RTT的变化值:,计算SampleRTT 与EstimatedRTT的差值,然后得到DevRTT。

在这里插入图片描述

然后就可以设置定时器超时时间:

在这里插入图片描述

TCP发送方要处理的事件

  • 从应用层收到数据

    • 创建Segment,序列号是Segment第一个字节 的编号
    • 开启计时器,设置超时时间TimeOutInterval
  • 如果超时

    • 重传引起超时的那一个Segment(这一点和SR一样)
    • 重启定时器
  • 收到ACK

    • 如果确认此前未确认的Segment,就滑动窗口,更新SendBase。如果窗口中还有未被确认的分组,重新启动定时器

上面的过程写成伪代码如下:

在这里插入图片描述

TCP接收方如何生成ACK

在这里插入图片描述

快速重传机制

TCP的实现中,如果发生超时,超时时间间隔将重新设置,也就是将超时时间间隔加倍,导致其很大。

可以通过重复ACK检测分组丢失。如果发送方收到对同一数据的 3 个ACK,则假定该数据之后 的段已经丢失,那就要执行快速重传机制,即在定时器超时之前就重传。

TCP流量控制机制

接收方会为TCP连接分配buffer。如果发送方传输的数据过快或过多的话,可能导致buffer溢出,这时可能会淹没接收方。所以流量控制的基本思想是发送方不会传输的太多 、太快以至于淹没接收方(buffer溢出)

所以本质上流量控制机制就是速度匹配机制

大概实现是这样的:

  • 接收方在段的头部字段将RcvWindow告诉接收方,告诉接收方自己还能接收多少字节的数据。发送方就会限制自己已经发 送的但还未收到ACK 的 数据不超过接收方的空闲RcvWindow尺寸。

那如果Receiver告知Sender RcvWindow=0,那么发送方就不再发了,那如果接收方又可以接收数据的话,发送方也还是不知道可以发送数据,这就可能导致死锁。所以要增加一个额外的处理,即使是RcvWindow=0的情况下,发送方仍然可以发送一个很小的段,从而从接收方带回来一个新的RcvWindow信息,避免发生死锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/159748.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法题:870. 优势洗牌

该算法是临时想出来的,Java代码的实现在时间上不占优,之后有时间要优化一下,目前就是给大家提供一下思路。 解题思路:田忌赛马的思想 贪心法。 Step1. 对两个数组进行排序。 Step2. 同时遍历排序后的nums2和nums1,将…

操作系统的线程模型

操作系统的线程调度有几个重要的概念: 调度器(Thread Scheduler):内核通过操纵调度器对内核线程进行调度,并负责将线程的任务映射到各个处理器上内核线程(Kernel Level Thread):简称…

测试用例设计方法:正交试验法详解!

01、正交试验法介绍 正交试验法是研究多因素、多水平的一种试验法,它是利用正交表来对试验进行设计,通过少数的试验替代全面试验,根据正交表的正交性从全面试验中挑选适量的、有代表性的点进行试验,这些有代表性的点具备了“均匀…

css基础之实现轮播图

原理介绍 图片轮播的原理是通过控制显示和隐藏不同的图片来实现图像的切换,从而创建连续播放的效果。用到的知识点有定位和定时器。 实现步骤: HTML 结构: 首先,需要在HTML中创建一个包含轮播图片的容器,通常使用 &l…

JavaScript设计模式之发布-订阅模式

发布者和订阅者完全解耦(通过消息队列进行通信) 适用场景:功能模块间进行通信,如Vue的事件总线。 ES6实现方式: class eventManager {constructor() {this.eventList {};}on(eventName, callback) {if (this.eventL…

块级作用域的理解

块级作用于的概念 由一对花括号{}中的语句集都属于一个块,在这个{}里面包含的块内定义的所有变量在代码块外都是不可见的,因此称为块级作用域。 作用域永远都是任何一门语言的重中之中,因为它控制着变量和参数的可见性和生命周期。讲到这里&…

搭建第一个区块链网络与一键部署WeBASE步骤

官网 搭建第一个区块链网络 — FISCO BCOS v2 v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io) 一键部署 — WeBASE v1.5.5 文档 (webasedoc.readthedocs.io) 步骤 默认如MySQL、Python、java等依赖已经引入 1.创建操作目录, 下载安装脚本 创建操作目录 cd ~ &a…

​实现1个电脑打开多个微信​

实现1个电脑打开多个微信:1、快速双击打开微信,可打开多个微信。2、按住回车键,双击打开微信,并快速放开回车键即可打开多个微信。3、用命令符也可打开多个微信。4、建立一个批处理文件实现打开多个微信。 方法一:最简…

故障诊断模型 | Maltab实现SVM支持向量机的故障诊断

效果一览 文章概述 故障诊断模型 | Maltab实现SVM支持向量机的故障诊断 模型描述 Chinese: Options:可用的选项即表示的涵义如下   -s svm类型:SVM设置类型(默认0)   0 – C-SVC   1 --v-SVC   2 – 一类SVM   3 – e -SVR   4 – v-SVR   -t 核函数类型:核函…

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核,解决编…

如何卸载干净 IDEA(图文讲解)windows和Mac教程

大家好,我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢? 本文通过图片文字,详细讲解具体步骤: 如何卸载干净 IDEA(图文讲解) Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…

Openssl生成证书-nginx使用ssl

Openssl生成证书并用nginx使用 安装openssl yum install openssl -y创库目录存放证书 mkdir /etc/nginx/cert cd /etc/nginx/cert配置本地解析 cat >>/etc/hosts << EOF 10.10.10.21 kubernetes-master.com EOF10.10.10.21 主机ip、 kubernetes-master.com 本…