TCP/IP协议(二)

news/2024/9/23 6:28:50/

一、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/news/1431120.html

相关文章

vue中如何控制一个全局接口的调用频率

业务说明 在app.vue,created中调用了一个同步用户信息的接口,但不希望每个页面刷新都会调用,并限制在页面的调用频率 具体实现 /*** 判断是否应该调用接口 白名单下的直接调用* param {String} api_name 接口名字* param {String} router_…

Python基于Django的旅游城市关键词分析和提取,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

苹果App Store政策调整,模拟器游戏或成为新机遇

随着智能手机的普及和技术的飞速发展,iPhone和Android手机已深入我们的日常生活,成为不可或缺的一部分。然而,两大系统在应用商店的运营模式上一直存在明显的差异。苹果的App Store以其封闭性和安全性而著称,而Android平台则以其开…

MongoDB 与MySQL的区别?优势?

MongoDB 与 MySQL 是两种不同类型的数据库管理系统,它们各自有独特的数据模型、查询语言、扩展方式以及适用场景。以下是它们的主要区别与各自的优势: 区别: 数据模型: MySQL:基于关系模型,使用表格&#…

【QT进阶】Qt http编程之json解析的简单介绍

往期回顾 【QT进阶】Qt http编程之后端API测试工具postman使用介绍-CSDN博客 【QT进阶】Qt http编程之http相关类的简单介绍-CSDN博客 【QT进阶】Qt http编程之用户登录注册功能实现-CSDN博客 【QT进阶】Qt http编程之json解析的简单介绍 一、JSON字符串 1、基本概念 JSON字…

【Node.js】json-server

概述 json-server 主要用于快速开启一个后端服务,并手动设置模拟接口数据。 以下来源于 json-server - npm (npmjs.com) 安装 npm install json-server用法 创建文件db.json {"posts": [{ "id": "1", "title": "a…

Altair® (澳汰尔)Grid Engine® 分布式资源管理系统

Grid Engine 是可靠的分布式资源管理系统,用于优化数千个数据中心的工作负载和资源,提高性能并提高生产力和效率。 Grid Engine 可通过优化应用程序、容器和服务的吞吐量和性能,同时极大化本地、混合和云基础设施之间的共享计算资源&#xf…

区块链安全应用-------压力测试

基于已有的链进行测试(build_chain默认建的链 四个节 点): 第一步:搭链 1. 安装依赖 在ubuntu操作系统中,操作步骤如下: sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…