《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.rhkb.cn/news/268407.html

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

相关文章

上位机图像处理和嵌入式模块部署(上、下位机通信的三个注意点)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 如果最终部署在客户现场的是一个嵌入式设备,那么上位机在做好了算法编辑和算法部署之后,很重要的一步就是处理上位机和下位…

【网站项目】139选课排课系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

spring注解驱动系列--自动装配

Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;依赖注入是spring ioc的具体体现,主要是通过各种注解进行属性的自动注入。 一、Autowired:自动注入 一、注解介绍 1、默认优先按照类型去…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先,导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作: 1.1.2.1 点击开启虚拟机: 1.1.2.2 默认选择回车CentOS Linux(3.10.0-1127.e17.x86_64) 7 …

kafka同步副本集及关键参数

上篇文章讲了副本机制是什么,一文读懂kafka内部怎么运行的-CSDN博客 这里深挖下同步副本集及里面的关键参数。副本会去leader副本拉去数据追加到自己日志中。 我们知道kafka副本的作用是提高系统的高可用。当leader副本挂了时,会从候选副本集中选者一个当…

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例:基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1:自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2:使用方法级安全进行细…

贪吃蛇(C语言)步骤讲解

一:文章大概 使用C语言在windows环境的控制台中模拟实现经典小游戏 实现基本功能: 1.贪吃蛇地图绘制 2.蛇吃食物的功能(上,下,左,右方向控制蛇的动作) 3.蛇撞墙死亡 4.计算得分 5.蛇身加…

冒泡排序(C语言详解)

原理:从左到右一次比较,如果左侧数字比右侧数字大(小),则两数交换,否则比较下一 组数字,每一次大循环比较可以将乱序的最右侧数字改为最大(最小)&#xff0c…

低代码中的可视化表单:效率与灵活兼备的设计工具

近年来,随着数字化转型的加速推进,企业对于高效率、灵活性和可定制性的软件开发需求不断增长。传统的软件开发过程通常需要耗费大量的时间和资源,而低代码开发平台的出现为企业提供了一种更加快速和灵活的解决方案。在低代码开发平台中&#…

docker版本 jenkins配置gitlab自动部署

前端项目 Build steps pwd npm config set registry https://registry.npm.taobao.org npm -v node -v #npm install npm run build:prod tar -czvf QASystem.tar.gz distpwd cd /data/zhouxy37/vue_deploy tar -zxvf QASystem.tar.gz sudo mv dist QASystem cp -r QASyste…

(已解决)emoji及其特殊符号在vue中的使用

问题叙述 使用问题&#xff1a;在表情库中点击后无法展示对应的emoji表情&#xff0c;仅仅显示Unicode代码编号&#xff0c;按照vue eslint规则更改添加分号后&#xff0c;没有报错但是依旧无法正确渲染。 问题源码&#xff1a; <template><div><!-- 被点击的…

electron nsis 安装包 window下任务栏无法正常固定与取消固定 Pin to taskbar

问题 win10系统下&#xff0c;程序任务栏在固定后取消固定&#xff0c;展示的程序内容异常。 排查 1.通过论坛查询&#xff0c;应该是与app的api setAppUserModelId 相关 https://github.com/electron/electron/issues/3303 2.electron-builder脚本 electron-builder…

Chrome插件 | WEB 网页数据采集和爬虫程序

无边无形的互联网遍地是数据&#xff0c;品类丰富、格式繁多&#xff0c;包罗万象。数据采集&#xff0c;或说抓取&#xff0c;就是把分散各处的内容&#xff0c;通过各种方式汇聚一堂&#xff0c;是个有讲究要思考的体力活。君子爱数&#xff0c;取之有道&#xff0c;得注意遵…

Network LSA 结构简述

Network LSA主要用于描述一个区域内的网络拓扑结构&#xff0c;包括网络中的路由器和连接到这些路由器的网络。它记录了每个路由器的邻居关系、连接状态以及连接的度量值&#xff08;如带宽、延迟等&#xff09;&#xff0c;以便计算最短路径和构建路由表。display ospf lsdb n…

ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载

ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号&#xff1a; FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接&#xff1a;https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码&#xff1a;0d46 原厂系统自带所有驱动、…

【JS 算法题: 将 json 转换为字符串】

题目简介 其实就是手撕 JSON.stringfy()。 算法实现 输入 原则上来说&#xff0c;输入的是一个 json 对象。但需要考虑到异常情况&#xff0c;即输入了其它类型的数据&#xff0c;比如&#xff1a;12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。 输出 …

关于脉冲负载应用中电阻器,您需要了解的 11 件事?

不幸的是&#xff0c;电阻器在脉冲负载下可能会失效。当脉冲功率耗散到器件的电阻元件时&#xff0c;它会产生热量并增加电阻器的温度。过热会损坏电阻元件&#xff0c;导致电阻变化甚至设备开路。为了避免在设计中出现这种情况&#xff0c;以下是您在选择元件时应了解的有关电…

基于springboot的宠物咖啡馆平台的设计与实现论文

基于Spring Boot的宠物咖啡馆平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于Spring Boot的宠物咖啡馆平台的设计与实现的开发全过程。通过分析基于Spring Boot的宠物咖啡馆平台的设计与…

【大厂AI课学习笔记NO.65】机器学习框架和深度学习框架

笔记思维脑图已上传&#xff0c;访问我的主页可下载。 https://download.csdn.net/download/giszz/88868909 广义上&#xff0c;机器学习框架包含了深度学习框架。 本质上&#xff0c;机器学习框架涵盖分类、回归、聚类、异常检测和数据准备等各种学习方法。 深度学习框架涵…