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

news2024/11/26 12:19:27

系列文章目录

什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 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.coloradmin.cn/o/1169516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!

Facebook 于前日发布了新的 JavaScript 引擎:Hermes,专注于提高 React Native 应用的性能,并且在市面上那些内存较少、存储速度较慢且计算能力低下的移动设备上都有良好的表现。但是不是为了追赶Flutter?这块作者没有说明。 移动应…

XXL-JOB默认accessToken身份绕过RCE漏洞复现 [附POC]

文章目录 XXL-JOB默认accessToken身份绕过RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 XXL-JOB默认accessToken身份绕过RCE漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从…

python模块的介绍和导入

python模块的介绍和导入 概念 在Python中,每个Python代码文件都是一个模块。写程序时,我们可以将代码分散在不同的模块(文件)中,然后在一个模块中引用另一个模块的内容。 导入格式 1、在一个模块中引用(导入)另一个模块可以使用import语句…

海康Visionmaster调试脚本:对脚本进行调试的方法

第一步,在脚本模块中使用导出工程功能,将模块中的代码导出 第二步,找到导出的工程,并打开 第三步,生成解决方案,设置断点,点击 VS 菜单调试中的附加到进程,选择 ShellModuleManage…

六氟化硫气体监测装置单位VOL%/LEL%/PPM分别是什么意思?

我们在使用六氟化硫等气体监测装置仪器时,经常看到VOL%、LEL%、PPM等单位,以及仪器中反复性、响应时间、灵敏度等这些词在气体检测仪中代表什么意思呢?今天主要给大家解释气体检测仪一些常见的单位及常用术语的意思。 一、常见单位 &#xff…

VSCode实用远程主机功能

作为嵌入式开发者,经常在各种系统平台或者开发工具之间切换,比如你的代码在Linux虚拟机上,如果不习惯在Linux下用IDE,那么我尝试将Linux的目录通过samba共享出来,在windows下用网络映射盘的方式映射出来,VS…

关于股价比较好的预测方案,仅供参考

1,导包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import keras 2,读取数据 data pd.read_csv(000300.SH.csv) shszdata.rename(columns{收盘价(元):Close,"日期":"Date"}) 3,均值预测法…

代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I

739. 每日温度 题目: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来…

东北大学python大作业

目前金属矿开采,爆破还是主要的破岩方式,为了保证巷道采场的安全,需要对爆破震动进行监测,获取的监测数据如附件,第1列数据为震动的序号,第2、3、4列为x,y,z三个方向的震动速度,往往由于各种因素…

GNU ld 链接器lang_process() (一)

一、lang_process() 从现在开始介绍 lang_process()函数,是GNU ld(GNU链接器)的一个核心函数,负责执行链接过程中的各个关键操作。lang_process(void) 函数涵盖了整个链接过程中的各个关键步骤,包括符号解析、重定位、…

误删的文件恢复了成乱码 误删的文件恢复了成乱码怎么调整

电脑系统:Windows11 电脑型号:惠普 软件版本:EasyRcovery14 关于电脑,我们可以说是非常熟悉,并熟练掌握了对电脑的最基本操作,比如复制、粘贴、新建、删除文件。但我们真的很懂它吗?比如误删…

常见的单token登录方案

现在主流的单token方案为jwttoken和redis token 常用的跟jwt token集成框架有shrio、spring security、aop切面。redis也能跟这三者集成。跟redis相比,jwt token比较难注销,得等到有效期过了才行,实际根据项目需求来就行。 简单介绍如下&am…

奇偶校验码和循环冗余码

在数据链路层的传输中,1可能变成0,0可能变成1,这是比特差错。 为了应对比特差错,有两种方式,即自动重传请求ARQ(Automatic Repeat-reQuest)和前向纠错FEC(Forward Error Correction&…

数字电路与逻辑设计 触发器

与非门构成的RS触发器 在这个中禁止RS 00 要记住s对应Q 或非门构成的RS触发器 注意这里的RS换了位置 且不允许RS 11 同步触发器 钟控RS触发器 钟控D触发器 cp 为 0 的时候不变 钟控JK触发器 00不变11改,JK不同随J摆 钟控T触发器 什么是空翻&am…

APLHA开发板系统启动

一. 简介 前面学习了 uboot的移植,在 NXP的 Kernel内核源码里添加 ALPHA开发板的工作。本文为设置CPU主频做准备,开发板从 Nand-Flash中启动根文件系统。 具体来说,我的目的是开发板能正常启动(从Nand-Flash加载根文件系统&#…

MyBatis底层原理(小白版本)

!特别声明!:这篇文章只是单纯用来应对面试,并不能用来当作深度解析的文章来看。本人才疏学浅,文章也可能有不对的地方,望指正。 此源码分析使用的是Java11 基本使用流程: String resource &q…

DAY43 完全背包理论基础 + 518.零钱兑换II

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

【51单片机】串口与LED点阵屏(学习笔记)

一、串口 1、串口的概述 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用…