网络协议--TCP的成块数据流

news2024/11/15 12:51:54

20.1 引言

在第15章我们看到TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认。本章我们将介绍TCP所使用的被称为滑动窗口协议的另一种形式的流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。

我们还将介绍TCP的PUSH标志,该标志在前面的许多例子中都出现过。此外,我们还要介绍慢启动,TCP使用该技术在一个连接上建立数据流,最后介绍成块数据流的吞吐量。

20.2 正常数据流

我们以从主机svr4单向传输8192个字节到主机bsdi开始。在bsdi上运行sock程序作为服务器:
在这里插入图片描述

其中,标志-i和-s指示程序作为一个“吸收(sink)”服务器运行(从网络上读取并丢弃数据),服务器端口指明为7777。相应的客户程序运行为:
在这里插入图片描述

该命令指示客户向网络发送8个1024字节的数据。图20-1显示了这个过程的时间系列。我们在输出的前3个报文段中显示了每一端MSS的值。

发送方首先传送3个数据报文段(4~6)。下一个报文段(7)仅确认了前两个数据报文段,这可以从其确认序号为2048而不是3073看出来。

报文段7的ACK的序号之所以是2048而不是3073是由以下原因造成的:当一个分组到达时,它首先被设备中断例程进行处理,然后放置到IP的输入队列中。三个报文段4、5和6依次到达并按接收顺序放到IP的输入队列。IP将按同样顺序将它们交给TCP。当TCP处理报文段4时,该连接被标记为产生一个经受时延的确认。TCP处理下一报文段(5),由于TCP现在有两个未完成的报文段需要确认,因此产生一个序号为2048的ACK(报文段7),并清除该连接产生经受时延的确认标志。TCP处理下一个报文段(6),而连接又被标志为产生一个经受时延的确认。在报文段9到来之前,由于时延定时器溢出,因此产生一个序号为3073的ACK(报文段8)。报文段8中的窗口大小为3072,表明在TCP的接收缓存中还有1024个字节的数据等待被应用程序读取。

报文段11~16说明了通常使用的“隔一个报文段确认”的策略。报文段11、12和13到达并被放入IP的接收队列。当报文段11被处理时,连接被标记为产生一个经受时延的确认。当报文段12被处理时,它们的ACK(报文段14)被产生且连接的经受时延的确认标志被清除。报文段13使得连接再次被标记为产生经受时延。但在时延定时器溢出之前,报文段15处理完毕,因此该确认立刻被发送。
在这里插入图片描述

注意到报文段7、14和16中的ACK确认了两个收到的报文段是很重要的。使用TCP的滑动窗口协议时,接收方不必确认每一个收到的分组。在TCP中,ACK是累积的—它们表示接收方已经正确收到了一直到确认序号减1的所有字节。在本例中,三个确认的数据为2048字节而两个确认的数据为1024字节(忽略了连接建立和终止中的确认)。

用tcpdump看到的是TCP的动态活动情况。我们在线路上看到的分组顺序依赖于许多无法控制的因素:发送方TCP的实现、接收方TCP的实现、接收进程读取数据(依赖于操作系统的调度)和网络的动态性(如以太网的冲突和退避等)。对这两个TCP而言,没有一种单一的、正确的方法来交换给定数量的数据。

为显示情况可能怎样变化,图20-2显示了在同样两个主机之间交换同样数据时的另一个时间系列,它们是在图20-1所示的几分钟之后截获的。

一些情况发生了变化。这一次接收方没有发送一个序号为3073的ACK,而是等待并发送序号为4097的ACK。接收方仅发送了4个ACK(报文段7、10、12和15):三个确认了2 0 4 8字节,另一个确认了1024字节。最后1024字节数据的ACK出现在报文段17中,它与FIN的ACK一道发送(比较该图中的报文段17与图20-1中的报文段16和18)。
在这里插入图片描述

快的发送方和慢的接收方:

图20-3显示了另外一个时间系列。这次是从一个快的发送方(一个Sparc工作站)到一个慢的接收方(配有慢速以太网卡的80386机器)。它的动态活动情况又有所不同。

发送方发送4个背靠背(back-to-back)的数据报文段去填充接收方的窗口,然后停下来等待一个ACK。接收方发送ACK(报文段8),但通告其窗口大小为0,这说明接收方已收到所有数据,但这些数据都在接收方的TCP缓冲区,因为应用程序还没有机会读取这些数据。另一个ACK(称为窗口更新)在17.4ms后发送,表明接收方现在可以接收另外的4096个字节的数据。虽然这看起来像一个ACK,但由于它并不确认任何新数据,只是用来增加窗口的右边沿,因此被称为窗口更新。

发送方发送最后4个报文段(10~13),再次填充了接收方的窗口。注意到报文段13中包括两个比特标志:PUSH和FIN。随后从接收方传来另外两个ACK,它们确认了最后的4096字节的数据(从4097到8192字节)和FIN(标号为8192)。
在这里插入图片描述

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

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

相关文章

安卓APP抓包环境配置

软件下载安装 所需软件 夜神模拟器 Fiddler platform-tools 下载地址 https://wwb.lanzoum.com/b01xhmk5e 密码:hv99 配置Fiddler 由于fiddler只默认抓取HTTP的请求,若想抓取HTTPS的请求,则需要设置HTTPS的各项值 设置HTTPS各项值 在fiddler菜单项…

思维模型 棘轮效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。由俭入奢易,由奢入俭难,到底因为啥?棘轮效应。 1 棘轮效应的应用 1.1 恋爱中的棘轮效应 小美是一个漂亮的女孩,家庭条件也不错,…

R2R 的一些小tip

批次间控制器(Run-to-run Controller),以应对高混合生产的挑战。将最优配方参数与各种工业特征相关联的模型是根据历史数据离线训练的。预测的最优配方参数在线用于调整工艺条件。 批次控制(R2R control)是一种先进的工艺控制技术,可在运行(如批次或晶圆…

网络滤波器/网络滤波器/脉冲变压器要怎样进行测试,一般要测试哪些参数?

Hqst华强盛导读:网络滤波器/网络滤波器/脉冲变压器要怎样进行测试,一般要测试哪些参数?测试网络滤波器的测试方法和步骤如何,需用到哪些测试工具和仪器设备呢? 一,网络流量的监控和过滤能力测试&am…

教你自己动手搭建一个传奇游戏,自己和自己玩,找找当年的感觉

传奇游戏承载了一代人的青春记忆。在那个年代,很多人都会在网吧里玩传奇游戏,与朋友一起组队打怪、刷装备。这些经历不仅让很多8090终生难忘,也成为了我们青春岁月中最珍贵的回忆。 虽然现在的传奇游戏已经逐渐淡出了人们的视线,…

C++: 类和对象(上)

文章目录 1. 面向对象和面向对象初步认识2. 类的引入3. 类的访问限定符4. 类的定义类的两种定义方式成员变量名规则的建议 5. 类的作用域6. 类的实例化7. 类对象模型计算类对象的大小 类的实际存储方式 8. this指针this指针的引入this指针的特性 1. 面向对象和面向对象初步认识…

c++指针【1】

在C中,指针是一种特殊的变量,它存储了一个内存地址。C指针在处理内存、数组、函数参数传递、文件I/O、动态内存分配等方面有着重要的应用。 一个指针变量通常被声明为特定类型的指针。例如,一个整数类型的指针可以指向一个整数。在声明指针变…

【软考】13. 结构化开发方法

《系统分析与设计概述》 当前系统的物理模型 ——> 当前系统的逻辑模型 ——> 目标系统的逻辑模型 ——> 目标系统的物理模型系统开发的目的:当前系统的物理模型 ——> 目标系统的物理模型 系统设计基本原理 抽象、模块化(逐步分解&#xf…

「网络编程」数据链路层协议_ 以太网协议学习

「前言」文章内容是数据链路层以太网协议的讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、以太网协议简介二、以太网帧格式(报头)三、MTU对上层协议的影响四、ARP协议4.1 ARP协议的作用4.2 ARP协议报头 一、以太网协…

【Spring】IOC快速入门

文章目录 1. Spring简介2. IOC快速入门 1. Spring简介 Spring是一个开放源代码的Java SE/EE一站式轻量级开源框架,由Rod Johnson发起并创立。其核心是IOC(控制反转)和AOP(面向切面编程),使得开发者可以将对…

『 C++类与对象』继承

文章目录 继承的概念继承方式与访问限定符基类和派生类对象赋值转换继承中的作用域隐藏 派生类的默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数 继承与友元静态成员与继承关系 继承的概念 继承的机制为,允许在以该类为基础上对类进行扩展,增加功能; 通常原来也就是…

社区买菜系统 JAVA开源项目

目录 项目内容 项目获取 项目截图 项目内容 基于VueSpringBootMySQL的社区买菜系统,包含菜品分类模块、菜品档案模块、菜品订单模块、菜品收藏模块、收货地址模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、…

【网安AIGC专题10.19】论文6:Java漏洞自动修复+数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会

How Effective Are Neural Networks for Fixing Security Vulnerabilities 写在最前面摘要贡献发现 介绍背景:漏洞修复需求和Java漏洞修复方向动机方法贡献 数据集先前的数据集和Java漏洞Benchmark数据集扩展要求数据处理工作最终数据集 VJBenchVJBench 与 Vul4J 的…

Unity编辑器扩展之CustomPropertyDrawer理解

一、引言, 在上一篇文章中提到,CustomEditor只能自定义单一类,被其他类持有的类自定义没有作用,这个时候就需要使用CustomPropertyDrawer属性。 二、PropertyDrawer介绍 PropertyDrawer用于自定义属性绘制器的基类。使用Proper…

【办公自动化】wps word首字下沉/文字宽度/段落底纹/图片缩放/装订线(Word的相关操作)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

『第九章』雨燕新量子引擎:结构化并发

在本篇博文中,您将学到如下内容: 1. 千呼万唤始出来:结构化并发2. async/await3. “结构化(structured)”到底是个神马?3.1 async let3.2 TaskGroup4. 非结构化并发(unstructured concurrency)4.1 非异步上下文中的 Task4.2 Detached Task4.3 延时5. 任务(Task)的取消和…

168. Excel表列名称

168. Excel表列名称 Java代码: 26进制,但是每个进制是从1开始的,不是从0开始;因此要计算要构建从0开始的求余! class Solution {public String convertToTitle(int cn) {StringBuilder sb new StringBuilder();whi…

ElasticSearch快速入门实战

全文检索 什么是全文检索 全文检索是一种通过对文本内容进行全面索引和搜索的技术。它可以快速地在大量文本数据中查找包含特定关键词或短语的文档,并返回相关的搜索结果。全文检索广泛应用于各种信息管理系统和应用中,如搜索引擎、文档管理系统、电子…

Xtuner——报错解决汇总

文章目录 load_dataset读取jsonl文件报错 load_dataset读取jsonl文件报错 alpaca_en dict(typeprocess_hf_dataset,datasetdict(typeload_dataset, data_filesalpaca_file_path),tokenizertokenizer,max_lengthmax_length,dataset_map_fnalpaca_map_fn,template_map_fndict(t…