《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 总结

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

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

相关文章

【C++ map和set】

文章目录 map和set序列式容器和关联式容器键值对setset的主要操作 mapmap主要操作 multiset和multimap map和set 序列式容器和关联式容器 之前我们接触的vector,list,deque等,这些容器统称为序列式容器,其底层为线性序列的的数据结构,里面存…

【LV14 day4 字符设备驱动基础框架】

一、字符设备驱动框架解析 设备的操作函数如果比喻是桩的话(性质类似于设备操作函数的函数,在一些场合被称为桩函数),则: 驱动实现设备操作函数 ----------- 做桩 insmod调用的init函数主要作用 --------- 钉桩 rm…

都说了能不动就别动,非要去调整,出生产事故了吧

MyBatis 替换成 MyBatis-Plus 背景介绍 一个老项目,数据库用的是 MySQL 5.7.36 , ORM 框架用的 MyBatis 3.5.0 , mysql-connector-java 版本是 5.1.26 新来了一个干练的小伙,精力充沛,看着就是一个喜欢折腾的主 他…

leetcode 3.1

leetcode hot 100 双指针1.三数之和2.接雨水 多维动态规划1.最长公共子序列 双指针 1.三数之和 三数之和 排序 双指针的方法&#xff0c;固定一个数nums[i], 用两数和找target - nums[i] 的数需要注意两点: 1.需要去掉重复数字 while (l < r && nums[l] nums[…

社交APP开发能给用户带来什么

现在的社交软件也非常的多&#xff0c;每款社交软件都有自己的特色&#xff0c;社交软件是日常中必备的软件&#xff0c;不管是生活交流还是感情工作交流都是比较方便的&#xff0c;因为社交软件满足了日常的远程交流问题&#xff0c;所以开发社交软件也会逐渐的流行起来的。 …

Error: T doesn‘t have .length

Error: T doesn‘t have .length 在 TypeScript 中&#xff0c;当我们使用泛型 <T> 时&#xff0c;有时会遇到一个常见问题&#xff1a;编译器提示错误&#xff0c;指出泛型类型 T 不具备 .length 属性。在本文中&#xff0c;我们将探讨这个问题的解决方案&#xff0c;并…

【Qt学习】QLCDNumber的介绍与实例使用(倒计时功能)

文章目录 1. 介绍2. 实例 - QLCDNumber倒计时3. 资源文件 1. 介绍 QLCDNumber是Qt框架中用于显示数字的控件&#xff0c;它模拟了一个液晶数字显示屏。 在Designer界面中显示如下&#xff1a; 有以下 常用属性&#xff1a; 属性描述intValue获取或设置QLCDNumber显示的整数…

Redis高级特性详解:事务处理、发布订阅、持久化和集群

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的基于内存的数据结构存储系统&#xff0c;被广泛应用于缓存、队列、计数器等场景中。除了基本的键值存储功能外&#xff0c;Redis还提供了许多高级特性&#xff0c;包括事务处理、发布订阅、持久化和集群。在…

js截取图片地址后面的参数和在路径中截取文件名或后缀名

文章目录 前言截取地址 &#xff1f;后面的参数在路径中截取文件名或后缀名总结 前言 在处理网页上的图片资源或者其他类型的文件资源时&#xff0c;你可能会遇到需要使用这些技巧的情况。以下是一些具体的使用场景&#xff1a; 动态修改图片参数&#xff1a;如果你有一个图片U…

【BBuf的CUDA笔记】十四,OpenAI Triton入门笔记三 FusedAttention

0x0. 前言 继续Triton的学习&#xff0c;这次来到 https://triton-lang.org/main/getting-started/tutorials/06-fused-attention.html 教程。也就是如何使用Triton来实现FlashAttention V2。对于FlashAttention和FlashAttention V2网上已经有非常多的介绍了&#xff0c;大家如…

Win11系统安装安卓子系统教程

随着Win11系统的不断普及&#xff0c;以及硬件设备的更新换代&#xff0c;我相信很多同学都已经更新并使用到了最新的Win11系统。那么&#xff0c;Win11系统最受期待的功能“Windows Subsystem for Android”&#xff08;简称WSA&#xff09;&#xff0c;即《安卓子系统》。他可…

spring.factories的常用配置项

概述 spring.factories 实现是依赖 spring-core 包里的 SpringFactoriesLoader 类&#xff0c;这个类实现了检索 META-INF/spring.factories 文件&#xff0c;并获取指定接口的配置的功能。 Spring Factories机制提供了一种解耦容器注入的方式&#xff0c;帮助外部包&am…

掘根宝典之C语言字符串输入函数(gets(),fgets(),get_s())

字符串输入前的注意事项 如果想把一个字符串读入程序&#xff0c;首先必须预留该字符串的空间&#xff0c;然后用输入函数获取该字符串 这意味着必须要为字符串分配足够的空间。 不要指望计算机在读取字符串时顺便计算它的长度&#xff0c;然后再分配空间(计算机不会这样做&a…

ai图生文的软件!分享4个受欢迎的!

在数字化时代&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI图生文软件已经成为自媒体人、创作者和广告从业者手中的得力助手。这些软件能够将静态的图片转化为生动的文字&#xff0c;为图片注入灵魂&#xff0c;让观者仿佛置身于画面之中。今天&#xff0c;就让我们一…

LabVIEW和Python开发微细车削控制系统

LabVIEW和Python开发微细车削控制系统 为满足现代精密加工的需求&#xff0c;开发了一套基于LabVIEW和Python的微细车削控制系统。该系统通过模块化设计&#xff0c;实现了高精度的加工控制和G代码的自动生成&#xff0c;有效提高了微细车削加工的自动化水平和编程效率。 项目…

cjson报错

今天遇到个问题&#xff0c;使用CJSON把一个cjson对象给一个cjson对象的时候报错&#xff0c;是segment问题 &#xff0c;原因是我在个cjson对象数据的时候&#xff0c;有几个是char的&#xff0c;但是是个时间的字符串&#xff0c;一般20位就够了&#xff0c;但是由于是通过mo…

1950-2022年各省逐年平均降水量数据

1950-2022年各省逐年平均降水量数据 1、时间&#xff1a;1950-2022年 2、指标&#xff1a;省逐年平均降水量 3、范围&#xff1a;33省&#xff08;不含澳门&#xff09; 4、指标解释&#xff1a;逐年平均降水数据是指当年的日降水量的年平均值&#xff0c;不是累计值&#…

ONLYOFFICE 桌面编辑器 v8.0 更新内容详细攻略

文章目录 引言PDF 表单RTL 支持电子表格中的新增功能Moodle 集成用密码保护 PDF 文件从“开始”菜单快速创建文档本地界面主题下载安装桌面编辑工具总结 引言 官网链接&#xff1a; ONLYOFFICE 官方网址 ONLYOFFICE 桌面编辑器是一款免费的文档处理软件&#xff0c;适用于 Li…

面试经典 150 题 ---- 买卖股票的最佳时机 II

面试经典 150 题 ---- 买卖股票的最佳时机 II 买卖股票的最佳时机II方法一&#xff1a;贪心 买卖股票的最佳时机II 方法一&#xff1a;贪心 贪心策略&#xff0c;我们可以考虑局部最优以达到整体最优&#xff0c;仅需要判断相邻两天之间的利润是否大于 0&#xff0c;若大于 0…

uniapp实现-审批流程效果

一、实现思路 需要要定义一个变量, 记录当前激活的步骤。通过数组的长度来循环数据&#xff0c;如果有就采用3元一次进行选择。 把循环里面的变量【name、status、time】, 全部替换为取出的那一项的值。然后继续下一次循环。 虚拟的数据都是请求来的, 组装为好渲染的格式。 二…