《TCP/IP详解 卷一》第12章 TCP初步介绍

目录

12.1 引言

12.1.1 ARQ和重传

12.1.2 滑动窗口

12.1.3 变量窗口:流量控制和拥塞控制

12.1.4 设置重传的超时值

12.2 TCP的引入

12.2.1 TCP服务模型

12.2.2 TCP可靠性

12.3 TCP头部和封装

12.4 总结


12.1 引言

关于TCP详细内容,原书有5个章节,本章是初步介绍。

IP和UDP没有差错纠正功能。

差错校正码:添加冗余比特,以恢复真实信息。

12.1.1 ARQ和重传

ARQ:自动重传请求协议,许多通信协议使用,如TCP。

        即超时没收到ACK的话,重传数据。

序列号(Sequence Number):

        TCP头中字段,对TCP数据流中的每个字节进行编号。

        作用:

                按顺序重组数据。

                数据丢失或重复检测。

                流量控制。

                拥塞控制。

12.1.2 滑动窗口

滑动窗口分为:

        接收窗口

        发送窗口

接收方根据缓冲空间设置合适接收窗口大小,并将窗口值通知给发送方。

发送方根据接收方的接收窗口大小调整发送窗口大小,控制发送速率,避免接收方缓存溢出。

一个发送窗口包括:

        已发送并收到确认的报文。(此时可释放本地报文副本)

        已发送但未收到确认的报文。

        尚未发送。

12.1.3 变量窗口:流量控制和拥塞控制

流量控制方式:

        1. 基于速率

                方法:给发送方指定最大发送速率。

                使用场景:流应用程序,广播,组播。

        2. 基于窗口

                窗口大小随时变动。

                接收方通过TCP窗口通告/窗口更新向发送方告知的发送窗口大小。

窗口更新和ACK可由同一报文携带。

12.1.4 设置重传的超时值

RTO:重传超时(Retransmission Timeout)

RTT:往返时间(Round-Trip Time)

RTO值通常通过一组RTT以及估计偏差来计算。

RTO略大于RTT均值。

12.2 TCP的引入

12.2.1 TCP服务模型

TCP是面向连接的,字节流。

字节流的意思:

        封包不是一个一个独立的。

        通信两端的所有数据都按字节编号,可看成一个流。

因为无消息边界,导致粘包,所以需要应用程序自己添加记录标志,用于从完整数据中分离一小段独立数据。

12.2.2 TCP可靠性

TCP序列号:

        表示当前分组的第一个字节在整个数据流的偏移。

对UDP,应用程序每次write/send就产生一个UDP数据

而TCP不会,write/send数据会被分段或合并成一个或多个TCP段。

TCP丢弃无效校验和报文

TCP不会为每个报文段设置一个重传计时器。而是一个发送窗口的数据只设置一个计时器。

ACK延迟累积发送:

        接收方不会立即对每个接收的数据发送确认,而是等一定时间,将所有ACK合并成一个ACK发送。

12.3 TCP头部和封装

报文格式:

源端口:

目的端口:

序列号:

        本次传输数据在整个数据流中位置,用字节表示。初始的序列号是随机数。

确认号:

        表示期望接收的下一个包的序列号,之前的数据已确认收到。

头部长度:

        TCP头长度。头最长60字节,默认是最小的20字节

标志位:

        CWR:

                拥塞窗口减小,告知发送方降低它的发送速率。

        ECE:

                ECN回显,向指示对方网络拥塞。

        URG:

                是否包含紧急数据,如有,紧急指针字段有效,使用少。

        ACK:

                确认号字段是否有效。

        PSH:

                暗示接收方应尽快将数据传给应用程序。

        RST:

                重置连接(常因为错误)

        SYN:

                用于发起TCP连接。

        FIN:

                用于关闭连接。

窗口大小:

        向对方通告自己的接收窗口大小。

TCP校验和:

        对整个TCP报文段的校验,包括TCP头和数据。

紧急指针:

        URG标志为1时,代表一个偏移量,该偏移处有紧急数据。

选项:

        提供额外配置信息。

        常见选项:

                时间戳:

                MSS:表示希望接收的报文段最大值。三次握手时通过该值。

                SACK:向发送方指示哪些段已成功接收,发送方只重传丢失部分,而不是整个段。

                窗口缩放:包含一个缩放因子,按比例放大窗口值,以适应高速网络。

数据字段:

        可选。不带数据字段的报文:

                SYN,FIN,纯ACK,RST等

可在数据报文中顺带ACK,也可只发ACK不带数据。

12.4 总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【YOLO v5 v7 v8 小目标改进】新CNN架构 InceptionNeXt:怎么让大卷积核既好用又快

新CNN架构 InceptionNeXt:怎么让大卷积核既好用又快 提出背景问题: 如何提高大核心卷积的效率,同时保持或提升模型性能? 改进思路MetaNeXtInception深度卷积InceptionNeXt 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改 提出背景 论文&am…

【改进算法】【IHAOAVOA】天鹰优化算法和非洲秃鹫混合优化算法

目录 1 主要内容 IHAOAVOA流程图 主要创新点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《IHAOAVOA: An improved hybrid aquila optimizer and African vultures optimization algorithm for global optimization problems》,天鹰优化算法&am…

【c++】理解vec.push_back(vector<int>())

vector<vector> vec; vec.push_back(vector()); vec.back().push_back(10); 定义一个二维向量&#xff08;动态数组&#xff09;: vector<vector> vec; 这行代码定义了一个名为vec的变量&#xff0c;它是一个向量&#xff08;动态数组&#xff09;&#xff0c;其中…

Apache Echarts介绍与入门

介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 入门案例 Apache Echarts官方提供的快…

MySQL误truncate截断后数据恢复2024.3.1

近期很多MySQL数据丢失情况&#xff0c;很多是人为误操作导致。MySQL数据库丢失可能由truncate截断表、delete删除表中数据行、delete删除表、delete删除库、操作系统rm删除数据库文件、硬盘坏道等情况导致。本案例是一个误截断表导致的丢失。 不管哪种情况&#xff0c;第一时…

STM32USART串口数据包

文章目录 前言一、介绍部分数据包两种包装方式&#xff08;分割数据&#xff09;HEX数据包文本数据包 数据包的收发流程数据包的发送数据包的接收固定包长的hex数据包接收可变包长的文本数据包接收 二、实例部分固定包长的hex数据包接收连接线路代码实现 可变包长的文本数据包接…

JavaScript DOM操作笔记记录回忆总结

一、什么是DOM&#xff1f; 1、通过 HTML DOM&#xff0c;可访问 JavaScript HTML 文档的所有元素。 2、当网页被加载时&#xff0c;浏览器会创建页面的文档对象模型&#xff08;Document Object Model&#xff09; 二、操作DOM 1、在操作DOM之前&#xff0c;我们需要先获取到…

设计模式-结构型模式-外观模式

外观模式&#xff08;Facade&#xff09;&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。[DP] 首先&#xff0c;定义子系统的各个组件接口和具体实现类&#xff1a; // 子系统组件接…

1美元持有ZKFair PFP-CyberArmy,潜在收益分析

3月2日&#xff0c;ZKFair PFP-CyberArmy 将在 Element 上正式开始Public Sale。

yolov9从头开始训练

yolov9从头开始训练 一、准备数据集 数据集相关文件存放布局如下 yolov9-datasets ├── train │ ├── images │ │ ├── image.jpg │ │ ├── │ └── labels │ ├── image.txt │ ├── ├── valid │ ├── images │ │ ├── image.jpg │ │ ├─…

Android minigbm框架普法

Android minigbm框架普法 引言 假设存在这么一个场景&#xff0c;我的GPU的上层实现走的不是标准的Mesa接口&#xff0c;且GPU也没有提专门配套的gralloc和hwcompoer实现。那么我们的Android要怎么使用到EGL和GLES库呢&#xff0c;并且此GPU驱动是支持drm实现的&#xff0c;也有…

【Sql Server】Update中的From语句,以及常见更新操作方式

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

翻译论文:Beating Floating Point at its Own Game: Posit Arithmetic(一)

仅作记录学习使用&#xff0c;侵删 原文Beating Floating Point at its Own Game: Posit Arithmetic 参考翻译Posit: 替换IEE754的新方式 | SIGARCH 摘要 IEEE标准754浮点数&#xff08;浮点数&#xff09;的直接接点替换 Posit的优势 不需要区间算术或可变大小操作数 如…

Freesia 项目引用的依赖

UML图 项目总依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version> </parent> <groupId>com.freesia</groupId> <artifa…

Java ElasticSearch面试题

Java ES-ElasticSearch面试题 前言1、ElasticSearch是什么&#xff1f;2. 说说你们公司ES的集群架构&#xff0c;索引数据大小&#xff0c;分片有多少 &#xff1f;3. ES的倒排索引是什么&#xff1f;4. ES是如何实现 master 选举的?5. 描述一下 ES索引文档的过程&#xff1a;…

【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

目录 PodKubernetes 网络模型同一Pod上的容器之间进行通信同一Node上的不同Pod之间进行通信不同Node上的Pod之间进行通信Service参考 Pod 首先来回顾一下Pod&#xff1a; Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载&#xff0c;并封装一…

mybatisPlus中 Mapper层以及Service层的方法 整理分类 以及代码实操

MyBatis-Plus是一个基于MyBatis的增强工具&#xff0c;旨在简化开发、提高效率。它提供了通用的mapper和service&#xff0c;可以在不编写任何SQL语句的情况下&#xff0c;快速实现对单表的CRUD、批量、逻辑删除、分页等操作。 功能代码测试前提&#xff1a; 需要对mybatisPl…

git介绍4.2

git(版本控制工具) 一、git 介绍 1、git是目前世界上最先进的分布式版本控制系统&#xff0c;可以有效&#xff0c;高速的处理从小到大的项目版本管理。 2、git是linux torvalds 为了帮助管理linux内核开发二开发的一个开放源码的版本控制软件。 3、git作用&#xff1a;更好…

Kubernetes(k8s第二部分)

资源清单相当于剧本 什么是资源&#xff1a; k8s中所有的内容都抽象为资源&#xff0c;资源实例化后&#xff0c;叫做对象。 1.K8S中的资源 集群资源分类 名称空间级别&#xff1a; kubeadm k8s kube-system kubectl get pod -n default 工作负载型资源&#xff0c;&a…

光栅化算法

多数计算机图形图像&#xff0c;是通过光栅显像显示给用户的&#xff0c;这种系统将图像作为像素阵列进行显示&#xff0c;像素&#xff08;pixel&#xff09;即图像元素&#xff08;picture element&#xff09;的简称。这些像素采用RGB颜色空间。本文讨论光栅显像的基本原理&…