TCP/IP协议(二)

devtools/2024/10/18 16:50:16/

一、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.ppmy.cn/devtools/10012.html

相关文章

使用Azure AI Search和LlamaIndex构建高级RAG应用

RAG 是一种将公司信息合并到基于大型语言模型 (LLM) 的应用程序中的常用方法。借助 RAG,AI 应用程序可以近乎实时地访问最新信息,团队可以保持对其数据的控制。 在 RAG 中,您可以评估和修改各个阶段以改进结果&#x…

jenkins修改全局安全配置之后登录错误

教训(流泪) 事情是这样的,第一次我需要用单点登录集成jenkins,jenkins可以通过插件的方式支持cas协议,我当时也不很懂,经过我学网上的一顿乱配置,jenkis上不去了,虽然这是公司本地环…

如何将本地项目上传到gitlab

具体步骤如下: 1. 登录 gitLab账号,成功创建一个项目文件,生成对应的http/https地址 2.打开本地项目,初始化git $ git init 3.将本地git和服务器上的连接(确保项目没有其他远程连接的服务器端口) $ gi…

LINUX固定USB设备名称

在Linux系统中,USB串口设备的名称通常是根据设备连接的顺序动态分配的。因此,当设备重新连接时,它可能会被分配不同的设备文件名(如/dev/ttyUSB0、/dev/ttyUSB1等)。要固定USB串口设备的名称,你可以使用ude…

抖音ip切片带货靠谱吗?抖音切片带货怎么拿授权?切片视频带货详细教程来了,单条视频收益500~800

今天分享一个真正做到让关注我们的粉丝朋友,学到、学懂、能落地,每一次项目分享都秉承高收益、低风险,可行性,有结果的原则,新手朋友可以直接按照我们分享的流程快速上手操作项目,项目老鸟们能够掌握更多信…

【Web前端笔记14】函数与对象

提示:本文开始正式进入JavaScript的重点学习,各位友友们看完别忘了点赞收藏哦,以防下次找不到咯! 文章目录 前言一、函数概述1.函数的声明2.函数名的提升3.函数的属性和方法4.函数作用域5.函数参数6.函数返回值7.自执行函数二、对象概述

【Spring Cloud】服务容错中间件Sentinel进阶——五大规则

文章目录 Sentinel的概念和功能基本概念资源规则 重要功能流量控制熔断降级系统负载保护 SentineI 规则流控规则简单配置配置流控模式直接流控模式关联流控模式链路流控模式 配置流控效果 熔断规则慢调用比例异常比例异常数 热点规则热点规则简单使用热点规则增强使用 授权规则…

类似nohup在windows通过cmd后台运行进程方法

Linux后台运行进程时,通常使用如下方法: nohup "运行的内容" &windows相应功能的命令行如下(此方法进程有页面,可能会在桌面展示,关闭窗口后进程消失。 call start /min "n" "运行的内容"cmd…