TCP/IP协议(二)

一、TCP-选项

1.简介

在TCP/IP报文中,固定头部下边就是 "选项"部分。
(1)TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的
(2)大多数的TCP选项部分出现在TCP连接建立阶段

2.构成

2.1 最大报文传输段

最大报文传输段(Maximum Segment Size — MSS ):表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。
(1)MSS只出现在SYN数据包中。
(2)对于以太网MSS可以达到 1460byte.

2.2 窗口扩大选项

窗口扩大选项(window scaling)

2.3 选择确认选项

选择确认选项(Selective Acknowledgements — SACK)

二、TCP的十种核心机制

TCP有十种机制来保证 传输的效率和可靠性。10种机制如下:

1.确认应答	(可靠机制)
2.超时重传	(可靠机制)
3.连接管理	(可靠机制)
-----------------------
4.滑动窗口	(效率机制)
5.流量控制	(效率机制)
6.拥塞控制	(效率机制)
7.延时应答	(效率机制)
8.捎带应答	(效率机制)
-----------------------
9.面向字节流(粘包处理)
10.特殊情况 (异常处理)

1.确认应答

在 TCP 协议中,发送方发送数据后,接收方需要对数据进行确认应答(ACK acknowledge的缩写),以确保数据已经被正确接收。
如果发送方没有收到确认应答,就会重新发送数据,直到接收方发送确认应答为止。
这样可以保证数据的可靠传输,避免数据丢失或损坏。
TCP 进行可靠传输,最主要的就是靠这个确认应答机制。

三、窗口和滑动窗口

1.窗口

根据上述的TCP确认应答得知:
TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包受到了应答,再发送下一个。这个模式就有点像面对面聊天,你一句我一句,这种方式的缺点就是效率极低。
为了解决这个问题, TCP 引入了"窗口"这个概念。
“窗口”,它是操作系统开辟的一个缓存空间.

2.窗口的大小

TCP 头里有一个字段叫 Window(win),也就是窗口大小。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。
于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。
所以通常窗口的大小是由接收方的窗口来决定的。发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。

3.滑动窗口(以字节为单位)

3.1 定义

TCP滑动窗口是TCP协议中的一种流量控制机制,用于调节发送方和接收方之间的数据传输速率,以避免网络拥塞和提高传输效率。
滑动窗口机制允许发送方在不等待确认应答的情况下连续发送多个数据段

4.滑动窗口的组成

4.1 发送窗口

发送方维护一个发送窗口,表示可以连续发送的数据段的范围。发送窗口的大小取决于网络的情况和接收方的能力。
发送窗口的大小会在和接收方三次握手时,根据对方的通告给自己的对方的窗口大小而生成发送窗口大小

4.2 接收窗口

接收方维护一个接收窗口,表示可以接收的数据段的范围。接收窗口的大小取决于接收方的缓冲区大小和处理能力。

4.3 滑动操作

随着数据的发送和接收,发送窗口和接收窗口会不断滑动。
(1)当接收方成功接收到数据后,会将窗口向前滑动,通知发送方可以发送更多的数据。
(2)当发送方收到接收方的确认后,也会将发送窗口向前滑动

4.4 流量控制

接收方通过调整接收窗口的大小来控制发送方的发送速率。
(1)如果接收方的缓冲区已满或者处理能力有限,可以减小接收窗口的大小,通知发送方减缓发送速率。
(2)如果接收方的缓冲区有足够的空间,可以增大接收窗口的大小,提高发送速率。

5.滑动窗口的本质

(1)滑动窗口的本质就是: 允许发送方在不等待确认应答的情况下连续发送多个数据段,从而提高了网络的利用率.
(2)滑动窗口具体的动作: 批量发送,批量等待,把多份等待时间,合并成一份

6.未引入滑动窗口示意图

讲了这么多理论,使用示意图来展示一下滑动窗口,更便于理解

在这里插入图片描述

发送方和接收方一应一答,可靠性确实能得到保证,但其实大部分的时间都消耗在等待ACK上了.

7.引入滑动窗口

在这里插入图片描述

引入了滑动窗口,就可以连续发送窗口大小的多个数据。然后花费等待一个ack的时间来等待多个ACK的回复。

图1:

H-5表示要发送的所有数据。这里的窗口大小只是举例。真正的窗口大小远不止如此。

在这里插入图片描述

图2:

s端收到c端的数据后,不用回复3次,可以回复一次累计应答。ack=4,说明seq=3以前的数据都收到了。

在这里插入图片描述

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

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

相关文章

Java面试八股之简述Servlet体系结构

简述Servlet体系结构 Servlet是Java Web开发中的核心组件,用于接收和响应HTTP请求,生成动态内容。它具有平台无关性、协议无关性和动态内容生成能力,遵循明确的生命周期。尽管现代Web开发中更多使用高级框架,但Servlet作为基础&a…

【SAP ME 18】SAP ME创建开发组件ear

1、说明 SC开发组件ear项目是所有sap me二次开发项目的编译入和部署入口,通过ear可以有效的针对子项目的编译和部署 2、创建开发组件

【MATLAB源码-第190期】基于matlab的32QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

云打印怎么下单?网上云打印下单教程来了!

近些年来,随着移动互联网的发展,云打印也越来越火热。如今有越来越多的用户选择云打印服务。但是现在仍有很多不知道如何下单。那么云打印怎么下单呢?今天小易就来和大家介绍一下网上云打印的下单教程。 云打印怎么下单?网上云打印…

MYSQL45道练习题---持续更新中

来源: Mysql_45道练习题 - 简书 共四张表: ①、course表: CId:课程id Cname:课程名称 TId:老师id ②、student学生表: SId:学生id Sname:…

【Linux】进程的程序地址空间①

目录 前言: 1.什么是地址空间 区域划分 页表: 2.为什么要有地址空间 2.1 进程与内存解耦合 2.2安全 3.凭什么说进程具有独立性: 4.用地址空间解释一下申请内存 前言: 在C语言中,我们说我们将内存分为,栈区…

vue3组件之间的传参

1、父传子 defineProps 父组件 <script setup>import { reactive } from vue;import Children from ./children.vue;const parentProps reactive({name:zhangsan,age:20})</script><template><div>这是父组件</div><div>子组件:<Chil…

探索大型语言模型(LLM)在人类性格个性评估(MBTI)中的前景与应用

1.概述 大型语言模型&#xff08;LLM&#xff09;如ChatGPT在各个领域的应用确实越来越广泛&#xff0c;它们利用庞大的数据集进行训练&#xff0c;以模拟人类的语言理解和生成能力。这些模型在提供信息、解答问题、辅助决策等方面表现出了强大的能力&#xff0c;但它们并不具…

AI大模型之路 第二篇: Word2Vec介绍

你好&#xff0c;我是郭震 今天我来总结大模型第二篇&#xff0c;word2vec&#xff0c;它是大模型的根基&#xff0c;一切NLP都会用到它。 Word2Vec Word2Vec 是一种流行的自然语言处理&#xff08;NLP&#xff09;工具&#xff0c;它通过将词汇表中的每个单词转换成一个独特的…

优先级队列(概念理解/底层模拟/时间复杂度分析)

目录 1.概念理解 2.优先级队列的底层模拟 2.1堆的概念 2.2优先队列的模拟实现 2.2.1把Heap类定义好 2.2.2初始化堆 2.2.3创建大堆 1.思路 以此二叉树为例&#xff1a; 图文理解&#xff1a; 2.思路转化为代码 2.2.4堆操作之offer&#xff08;进队列&#xff09; 1…

机器学习-10-基于paddle实现神经网络

文章目录 总结参考本门课程的目标机器学习定义第一步&#xff1a;数据准备第二步&#xff1a;定义网络第三步&#xff1a;训练网络第四步&#xff1a;测试训练好的网络 总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍基于paddle实现神经网络。 参考 MNIST 训练_副…

【Node.js】01 —— fs模块全解析

&#x1f525;【Node.js】 fs模块全解析 &#x1f4e2; 引言 在Node.js开发中&#xff0c;fs模块犹如一把万能钥匙&#xff0c;解锁着整个文件系统的操作。从读取文件、写入文件、检查状态到目录管理&#xff0c;无所不能。接下来&#xff0c;我们将逐一揭开fs模块中最常用的那…

vue ant form validate如何对数组下的表单校验

问题 使用Ant Design Vue校验表单时&#xff0c;通过validateFields&#xff0c;但是如何一个数组内部的校验呢&#xff1f; 效果图&#xff1a; 实现方式&#xff1a; 通过 v-for 循环渲染:name"[]"实现&#xff0c;我们直接看代码。 <template><a-for…

Spring Boot中JUnit 4与JUnit 5的如何共存

文章目录 前言一、先上答案二、稍微深入了解2.1 maven-surefire-plugin是什么2.2 JUnit4和JUnit5有什么区别2.2.1 不同的注解2.2.2 架构 前言 在maven项目中&#xff0c;生成单测时是否有这样的疑问&#xff1a;该选JUnit4还是JUnit5&#xff1f;在执行 mvn test 命令时有没有…

三、SpringBoot整合MyBatis

本章节主要描述MyBatis的整合&#xff0c;以及使用mybatis-generator-maven-plugin生成代码骨架&#xff0c;源码&#xff1a; jun/learn-springboot - Gitee.com 一、首先建数据库 本示例用的是MySQL8.0.23&#xff0c;建表t_goods、t_orders&#xff0c;略... 二、goods模块…

Java | Leetcode Java题解之第36题有效的数独

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isValidSudoku(char[][] board) {int[][] rows new int[9][9];int[][] columns new int[9][9];int[][][] subboxes new int[3][3][9];for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {char …

随机森林原理及应用

目录 一、随机森林原理、优点、应用场景 1.1基本原理 1.2主要优点 1.3使用场景 二、具体实例 一、随机森林原理、优点、应用场景 随机森林是一种流行且强大的机器学习算法&#xff0c;属于集成学习方法的一部分&#xff0c;主要用于分类和回归任务。它通过组合多个决策树…

SSTV音频转图片

SSTV工具有很多&#xff0c;这里使用RX-SSTV慢扫描工具 下载安装 RX-SSTV解码软件 下载地址&#xff1a;https://www.qsl.net/on6mu/rxsstv.htm 一直点下一步&#xff0c;安装成功如下图: 虚拟声卡e2eSoft 由于SSTV工具是根据音频传递图片信息&#xff0c;正常解法需要一…

在【laravel框架】学习中遇到的常见的问题以及解决方法

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Marching Cubes算法

Marching Cubes算法 1. 简介2. 算法原理的理解2.1 如何找到面经过的这些小块(六面体)&#xff1f;2.2 找到后&#xff0c;如何又进一步的找到面与这些小块(六面体)的交点&#xff1b;2.3 这些交点按照怎么的拓扑连接关系连接&#xff0c;是怎么操作的&#xff1f; 3. 总结4. 参…