计网第五章(运输层)(四)(TCP的流量控制)

news2024/11/15 8:58:57

一、基本概念

流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。

注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现的。

二、具体实现

接收方通过向发送方发送带有自己接收窗口值的报文段来控制发送方的发送窗口。注意:TCP的窗口单位是字节(这里也进一步体现了TCP是面向字节的)。

你妈(发送方)给你(接收方)盛了三碗米饭(发送窗口的值),你吃完了感觉只能再吃一碗,就告诉你妈你再吃一碗(设置接收窗口的值),于是你妈就再给你盛了一碗饭(实现流量控制)

如图:假设A和B已经完成TCP连接,A向B发送数据,在连接建立时B告诉A自己的窗口值。设B的接收窗口值为400。

(1)A发送的每个TCP数据报文段可携带100字节数据,因为B的窗口值为400,所以A将自己的发送窗口值也设置为400。开始时,A先将序号1到100的数据封装成一个报文段中发送出去,此时发送窗口内还可以发送300字节。seq是TCP报文段首部中的序号字段,表示数据载荷的第一个字节的序号,这里应该为1,DATA表示TCP数据报文段。

(2)A又向B发送序号101到200,还能再发送200字节。这里seq=101。

(3)A又向B发送序号201到300 ,但是该报文段在传输过程中发生丢失。

(4)B向A发送收到的201号之前的数据的累积确认 ,并将接收窗口改为300,对A进行流量控制。其中,ACK是TCP报文段首部中的标志位,取值为1表示该报文段是一个确认报文段。ack是TCP报文段首部中的确认号字段,表示201号之前的数据都已正确接收,希望收到201及之后的数据。rwnd是TCP报文段首部中的窗口字段,表示接收窗口为300。

(5)主机A收到累积确认后,让发送窗口向前滑动 ,并将自己的发送窗口值调整为300。虽然A之前发送了201-300的数据,但是没有收到该段数据的累计确认,于是该段数据不能移出窗口。

(6)201到300号数据在超时重传计时器到时后会进行重传, 这中间会将新落入发送窗口内的数据发送出去。当发送完序号401到500后,A暂时不再发送数据,超时重传到时后只将201-300的数据重新发送,而不发送新数据。之后B对A发送累计确认,在该确认报文段还可以封装新设置的接收窗口值来对A进行流量控制,这些过程和上面类似,不再做演示。

这里还有一个特别的地方:假设B向A发送的累积确认中,B将窗口值改为了0,也就是说B不再接收数据。相应地,A也会把自己的发送窗口值改为0,A不会再发送一般的报文段。

后来B又有一些缓存空间,又向A发送一个接收窗口值为300的报文段。但是发生丢失,这时候如果不采取措施就会陷入这种死锁局面。

于是,经典的重传计时器措施再次出现,当发送方收到窗口值为0的通知时,就会启动该持续计时器,当计时器到时后,A就发送一个携带1字节数据的零窗口探测报文(前面故意将一般两个字标红,也就意味着这个零窗口探测报文不是一般的报文段,即便接收方的接收窗口值为0,也得接收该报文段)。

B确认这个报文段时,给出自己现在的接收窗口的值,如果还为0,那么就A收到后,重启该计时器。

这时候可能有人会想到,那要是这个零窗口探测报文段也丢失了呢?

那就给这个零窗口报文段也加一个计时器,如果计时器超时就重发该报文段。

三、示例

1、主机A向主机B连续发送了2个TCP报文段,其序号分别是80和220
(1)第1个报文段携带了多少字节的数据?主机B收到第1个报文段后发回的确认中的确认号是多少?
(2)若主机B收到第二个报文段后发回的确认号300,则A发送的第二个报文段至少携带了多少字节的数据?
(3)如果在情况(2)中A的第二个报文段中实际携带了100字节的数据,而B返回的窗口值为100字节,那么主机A接下多最多可以发送多少字节的数据,这些数据的起止编号分别是多少?

解:

(1)

根据前面所述,序号是每个报文段的第一个字节的序号,也就是说第一个报文段的序号应该是80到219,共140个字节。B收到后返回的确认号应该为220。(返回的确认号是已经收到x-1及之前的,想要x及之后的。

(2)

299-220+1=80,所以第二个报文段至少携带了80个字节。

(3)

实际携带了100个字节,但是B得确认号是300,也就是80个字节。并且B的接收窗口现在为100。

那么A的发送窗口也要改为100,并且A的发送窗口向前移动80个字节。但是之前发送过的20字节完全不知道什么情况,那么A接下来最多可以发送80字节的数据,起止编号为320和399。

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

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

相关文章

学生在线查询系统

在教育管理中,学生查询系统是一个必不可少的工具,它能够方便学生、家长和教师快速获取学生的各项信息。而易查分作为一个功能强大的在线查询工具,能够帮助教育机构快速搭建一个高效便捷的学生查询系统。通过注册易查分账号,创建查…

Java毕业设计 SSM SpringBoot 水果蔬菜商城

Java毕业设计 SSM SpringBoot 水果蔬菜商城 SSM 水果蔬菜商城 功能介绍 首页 图片轮播 关键字搜索商品 分类菜单 折扣大促销商品 热门商品 商品详情 商品评价 收藏 加入购物车 公告 留言 登录 注册 我的购物车 结算 个人中心 我的订单 商品收藏 修改密码 后台管理 登录 商品…

element ui - el-table 表头筛选

element ui - el-table 表头筛选 前言**场景**:根据表头筛选出表格中符合条件的数据;**效果**: 情况一:表格没有分页方法代码 前言 场景:根据表头筛选出表格中符合条件的数据; 效果: 筛选结果…

代码随想录--栈与队列-用栈实现队列

使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。 i…

CSDN中,如何创建目录或标题

创建目录或标题 1.复制,自动生成目录2.复制,自动生成标题3.CSDN标准写法如下图 1.复制,自动生成目录 [TOC]或 [TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录2.复制,自动生成标题 # 一级目录 ## 二级目录 ### 三级目…

Java 多种获取项目路径下的文件

目标文件放在项目的resources文件夹下 的 mytxt文件里面,文件名叫 file Test.txt: 其实可以看到,项目运行后,这个文件被丢到了target文件夹下: 拿到这个文件的 InputStream : 比如我们在FileUtil里面写个获…

懒人制作企业期刊的秘籍

企业期刊是展示企业文化、提升形象、传递信息的重要工具。但是,制作企业期刊需要投入大量的时间和精力,对于忙碌的企业来说是一项艰巨的任务。 所以肯定也有人需要一款不会花费大量时间就能制作出高级感的企业期刊,大家不妨试试FLBOOK在线制…

Feign远程接口调用

概述 目的:解决微服务调用问题。如何从微服务A调用微服务B提供的接口。 特性: 声明式语法,简化接口调用代码开发。像调用本地方法一样调用其他微服务中的接口。集成了Eureka服务发现,可以从注册中心中发现微服务。集成了Spring…

SpringBoot:返回响应,统一封装

说明 接口的返回响应,封装成统一的数据格式,再返回给前端。 返回响应,统一封装实体,数据结构如下。 代码 package com.example.core.model;import io.swagger.v3.oas.annotations.media.Schema; import lombok.*;/*** 返回响应…

英飞凌TC3xx--深度手撕HSM安全启动(四)--TC3xx HSM使能和配置技巧

上一章,我们简单聊了下英飞凌TC3xx的HSM的系统框架、相关UCB、Host和HSM通信模块。今天着重分析HSM的使能。 1. 系统引入HSM的思考 为什么要增加HSM 信息安全方面考虑,系统的安全启动、ECU之间安全数据的交互、ECU内部的敏感信息保存 TC3xx使能HSM后,HSM的代码应该…

spring aop源码解析

spring知识回顾 spring的两个重要功能:IOC、AOP,在ioc容器的初始化过程中,会触发2种处理器的调用, 前置处理器(BeanFactoryPostProcessor)后置处理器(BeanPostProcessor)。 前置处理器的调用时机是在容器基本创建完成时&#xff…

安防监控系统/视频云存储/视频AI智能分析:人形检测算法应用汇总

随着人工智能的飞速发展,TSINGSEE青犀智能AI算法功能也日渐丰富,除了常见的人脸、工服、安全帽检测以外,人形检测算法的应用也十分广泛,主要可以应用在以下场景: 1、安防监控系统 人形检测算法可以应用于监控摄像头中…

ChatGPT OpenAI 针对HR与财务岗位一键核对工资表差异

HR人力资源与财务部门关于奖金的计算,两个部门计算的结果有差异如何将差异内容显示。 如何快速找出不相同的单元格。 我们给ChatGPT来提出需求来解决。 prompt: 请写出一个VBA程序找出E3:E12单元格区域与E16:E25单元格区域中不相同的单元格,并填充为红色背景显示,请写出完…

23062QTday1

自己制作一个登录界面 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QApplication>#include <QLineEdit> #include <QLabel> #include <QMovie> class Widget : public QWidget {Q_OBJECTpublic:Widget(…

概率统计笔记:从韦恩图的角度区分 条件概率和联合概率

联合概率&#xff1a;两个或多个事件同时发生的概率。用 P(A∩B) 或 P(A,B) 表示 条件概率&#xff1a;在已知某个事件发生的条件下&#xff0c;另一个事件发生的概率。用P(A∣B) 表示在事件 B 发生的条件下&#xff0c;事件 A 发生的概率。 不难发现联合概率的样本空间更大&am…

多线程|多进程|高并发网络编程

一.多进程并发服务器 多进程并发服务器是一种经典的服务器架构&#xff0c;它通过创建多个子进程来处理客户端连接&#xff0c;从而实现并发处理多个客户端请求的能力。 概念&#xff1a; 服务器启动时&#xff0c;创建主进程&#xff0c;并绑定监听端口。当有客户端连接请求…

华为云云耀云服务器L实例评测 | 搭建docker环境

目录 &#x1f352;docker的概念 &#x1f352;Docker 的优点 &#x1fad0;1、快速&#xff0c;一致地交付您的应用程序 &#x1fad0;2、响应式部署和扩展 &#x1fad0;3、在同一硬件上运行更多工作负载 &#x1f352;云耀云服务器L实例 &#x1fad0;产品优势 &#x1f95d…

如何使用反 CSRF 令牌保护您的网站和 Web 应用程序

防止跨站点请求伪造攻击 (CSRF/XSRF)的最常见方法是使用反 CSRF 令牌&#xff0c;该令牌只是一个唯一值集&#xff0c;然后由 Web 应用程序需要。CSRF 是一种客户端攻击&#xff0c;可用于将用户重定向到恶意网站、窃取敏感信息或在用户会话中执行其他操作。幸运的是&#xff0…

组件自定义事件学习笔记

组件自定义事件_绑定 JS中有内置事件比如click&#xff0c;keyup。内置事件是给标签使用的&#xff0c;而自定义事件是给组件使用的。 子组件给父组件传递数据有两种方式 App父组件&#xff0c;School和Student是子组件。 子组件给父组件传递函数类型的props实现&#xff…

【深度学习】 Python 和 NumPy 系列教程(廿五):Matplotlib详解:3、多子图和布局:subplot()函数

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 简单示例 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0c;并且具有强大的功能…