当前位置: 首页 > news >正文

【linux】网络基础(3)——tcp协议

文章目录

  • TCP协议概括
  • TCP头部格式
  • TCP连接管理
  • 建立连接(三次握手)
  • 数据传输
    • 确认应答机制
      • 捎带应答
    • 滑动窗口
      • 丢包问题
    • 拥塞控制
    • 延时应达
  • 终止连接(四次挥手)

TCP协议概括

TCP是一个面向连接的协议,在传输数据之前需要建立连接,确保通信双方的准备工作。它提供可靠的数据传输服务,通过确认、重传、流量控制和拥塞控制机制,保证数据准确且按顺序地到达目的地。

TCP头部格式

在这里插入图片描述
源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去。
32位序号: 数据段的序列号,用于重组数据流和检测丢失数据
32位确认号:确认收到的数据段的序列号(当收到确认序列号时,可以保证的是,此序列号之前的序列号都已经处理完成,即使没有收到对应的序列号)。
如下图:(1-100)是客户端发给服务器的数据段序号,101则是服务端对客户端发送过来数据的确认(确认应答机制)。
在这里插入图片描述
4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 (1111)* 4 = 60(注意乘4)
6位标志位:
URG: 紧急指针是否有效
ACK: 确认号是否有效
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段

在每次发送报文以及应答报文时,对于以上六中的请求,会分别对对应请求的标志位的值标志位1,来表示此数据的意义!
16位窗口大小:流量控制窗口大小,接收方可以接受的最大数据量。(每次进行报文通信时,都会将自己的接受缓冲区的具体大小告诉对方,好让对方发送我们所能接受的字节流,以防于数据过大,导致丢包问题!)
16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分
16位紧急指针: 标识哪部分数据是紧急数据(配合标志位的URG使用)。
选项:可选字段,用于扩展TCP协议的功能
数据:实际传输的数据。

TCP连接管理

TCP是面向连接的协议,通信双方在传输数据之前必须先建立连接。连接管理包括连接建立、数据传输和连接终止三个阶段。

建立连接(三次握手)

在这里插入图片描述
TCP使用三次握手机制建立连接,确保双方同步并准备好数据传输。
SYN:客户端发送一个SYN(同步)报文段,表示请求建立连接,同时发送初始序列号。
SYN+ACK:服务器接收到SYN报文段后,发送一个SYN-ACK报文段,确认收到SYN,并发送自己的初始序列号。
ACK:客户端接收到SYN-ACK报文段后,发送一个ACK(确认)报文段,确认收到服务器的SYN。
通过三次握手,客户端和服务器确认彼此的存在,并交换初始序列号,准备传输数据。

为什么要进行三次握手?
解决SYN洪流问题!因为如果是一次或者两次握手,一些恶意的客户端,对服务器进行多次连接攻击,只要服务端收到来自客户端的连接,不论是一次还是两次,都会直接建立连接快速消耗内存,导致服务器挂掉,而三次握手需要客户端的再次确认返回,才会进行建立连接,虽然也会有SYN洪流问题,但要比之前的方式减少些许负担,同时还可以最小成本的验证全双工,客户端可以验证发送以及接受正常通信,服务端也可以验证发送以及接受的正常通信。

数据传输

确认应答机制

每收到一个数据段,接收方都会发送一个确认报文段(ACK),确认收到的数据段序列号。发送方如果在一定时间内没有收到确认,则会重传该数据段。
在这里插入图片描述
如上图是一种串行发送消息,效率可见是非常慢。所以有下图的多行发送消息,特别注意这里每次发送数据都是报头携带数据的。而返回的应答ACK则只有报头,在报头内将ACK标志位置为1
在这里插入图片描述
而这样收到的报文可能是乱序的这样就可以靠TCP报头的序列号进行排序,处理。

捎带应答

对于上面的ACK应答报文,也可以被携带在返回数据中,例如你向服务器发问1+1等于多少?服务器会给你回应2同时报头中ACK的标志位置为1,表示对你1+1的信息收到了。这样就可以将两个通信合并为一条。大大提高效率。

滑动窗口

针对确认应答机制中的多行并发消息的解决。滑动窗口的初始大小是根据接收方返回报头数据中自己的的接受缓冲区的大小来决定的,同时也达到流量控制的目的当然对于网络中进行通信有多个路由器等硬件设施,具体的滑动窗口的大小会根据这些硬件设施所能接受的大小与对方接受缓冲区的大小取最小值来设定!!
TCP使用滑动窗口机制进行流量控制,接收方根据自己的接收能力设置窗口大小,告诉发送方可以发送的最大数据量
在这里插入图片描述
如下图一次性发送一个窗口内所有的内容。倘若接受到2001的确认信号,那么窗口的左坐标就会移动到2001的位置,右坐标也会相应的增加到6001
在这里插入图片描述
把窗口的前坐标比作win_start,结尾坐标比作win_end,具体滑动就是根据下面的公式进行更变。
在这里插入图片描述

丢包问题

在这里插入图片描述
在这里插入图片描述
因为有应答序号,保证次序号之前的消息都已经收到,所以1001——2000丢包,后面数据即使收到,也只会返回1001这个确认序号,经过多次重复应答,主机A就知道,1001——2001丢了,对方没有收到,则会再次发送此数据。
这种机制被称为 “高速重发控制”(也叫 “快重传”)

拥塞控制

控制滑动窗口大小的另一个决定因素
TCP通过慢启动、拥塞避免、快重传和快恢复等算法进行拥塞控制,防止网络过载。

慢启动:在连接初始阶段,发送方以指数增长方式增加发送窗口大小,快速探测网络容量。

拥塞避免:当慢启动阈值达到一定值时,发送方以线性增长方式增加发送窗口大小,避免网络拥塞。

快重传和快恢复:当发送方收到重复确认(ACK)时,快速重传丢失的数据段,并进行快速恢复,减少网络等待时间。
在这里插入图片描述

发送开始的时候, 定义拥塞窗口大小为1;
每次收到一个ACK应答, 拥塞窗口加1;
每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口;
像上面这样的拥塞窗口增长速度, 是指数级别的. “慢启动” 只是指初使时慢, 但是增长速度非常快.
为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍.
此处引入一个叫做慢启动的阈值
当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长

在这里插入图片描述
少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;
当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;
拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案

延时应达

当收到多个数据请求时,接收方的接收缓冲区就会变小,此时如果对多个数据请求先来的做出应答,那么对于应答携带的报头中发送给对方的可接受缓冲区的大小是非常小,会降低下一次发送的效率,所以我们引入延时应达,我们可以等一次性收到的全部数据都处理完,通过序列号的排序,仅仅应答最后一个序列号即可(因为确认序列号可以保证携带之前序列号的数据已经收到并处理
具体的延时应答策略:
数量限制: 每隔N个包就应答一次;
时间限制: 超过最大延迟时间就应答一次

具体的数量和超时时间, 依操作系统不同也有差异; 一般N取2, 超时时间取200ms
在这里插入图片描述

终止连接(四次挥手)

TCP使用四次挥手机制终止连接,确保双方都能够正常结束数据传输。

FIN:一方(通常是客户端)发送一个FIN(终止)报文段,表示不再发送数据,但仍然可以接收数据。
ACK:另一方(服务器)接收到FIN报文段后,发送一个ACK报文段,确认收到FIN。
FIN:服务器发送自己的FIN报文段,表示不再发送数据。
ACK:客户端接收到FIN报文段后,发送一个ACK报文段,确认收到服务器的FIN。

在这里插入图片描述

相关文章:

【linux】网络基础(3)——tcp协议

文章目录 TCP协议概括TCP头部格式TCP连接管理建立连接(三次握手)数据传输确认应答机制捎带应答 滑动窗口丢包问题 拥塞控制延时应达 终止连接(四次挥手) TCP协议概括 TCP是一个面向连接的协议,在传输数据之前需要建立连…...

[Day 21] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的智能合約運行機制 區塊鏈技術自比特幣誕生以來,便以其去中心化、安全性和透明性等特點引起了廣泛的關注和應用。而智能合約作為區塊鏈技術的一大創新,進一步擴展了區塊鏈的應用場景,使其不僅僅局限於數字貨幣,還可以應用…...

使用ps给gif动图抠图

目录 导入gif图片 打开时间轴 选择图片 魔棒抠图-初步抠图 套索抠图-精准抠图 导入gif图片 打开时间轴 因为gif动图实际上多张图片实现的效果,所以如果要给gif抠图,就得挨个给每个时间线的图片抠图 点击窗口->时间轴 选择图片 在时间轴上选择要…...

pmp顺利通关总结

目录 一、背景二、总结三、过程 一、背景 人活着总是想去做一些事情,通过这些事情来证明自己还活着。 而我证明自己还会活着并且活得很好的方式和途径,是通过这些东西去让自己有一个明确的边界节点;借此知识来验证自己的学习能力。 我坚定认…...

未来的钥匙在于过去:学历史的真正意义,震惊!历史竟然是偶然的?从历史中寻找未来的方向!

我们自幼接受的教育是,学历史是为了相信历史是必然的。中国人民必然战胜日寇的侵略,解放思想和改革开放必定会发生,和平和发展必定是世界的主题,中国经济必定是高速增长…… 然而,在真正的历史学家眼中,历史…...

ES6自定义模块

在ES6中,我们可以使用 export 和 import 关键字来定义和使用自定义模块。 定义模块 导出(export) 命名导出(Named Exports): 使用 export 关键字来导出模块中的变量、函数、类等。例如: // ma…...

Windows页面错误(Page Fault)写几种c++会导致,此问题的例子

在C中,直接导致Windows页面错误(Page Fault)的情景较少直接由编程错误引发,页面错误更多是由操作系统在内存管理和虚拟内存机制中处理的。不过,某些编程错误可能导致访问违规,进而间接引起操作系统报告页面…...

AC7801时钟配置流程

一 默认配置 在启动文件中,已经对时钟进行了初始化,默认按外部8M晶振,配置系统时钟为48MHZ,APB为系统时钟的2分频,为24MHZ。在system_ac780x.c文件中,可以找到下面这个系统初始化函数,里面有Se…...

加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库

文章目录 Java Cryptography Architecture (JCA)开源国密库国密算法对称加密(DES/AES⇒SM4)非对称加密(RSA/ECC⇒SM2)散列(摘要/哈希)算法(MD5/SHA⇒SM3) 在线生成公钥私钥对,RSA公私钥生成参考…...

读书笔记-《Spring技术内幕》(三)MVC与Web环境

前面我们学习了 Spring 最核心的 IoC 与 AOP 模块(读书笔记-《Spring技术内幕》(一)IoC容器的实现、读书笔记-《Spring技术内幕》(二)AOP的实现),接下来继续学习 MVC,其同样也是经典…...

k8s及常用对象简介

文章目录 一、k8s是什么应用程序早期部署形式容器的引入k8s的作用 二、k8s中的常用对象1、Node获取node信息 2、Namespacenamespace的使用 3、Pod生命周期pod的使用 4、DaemonSetDaemonSet的使用 5、Deployment创建deploy 6、ReplicaSet7、StatefulSet创建StatefulSet 8、更新操…...

HTTPS数字证书验证论述

1 概述 网络请求方式通常分为两种,分别是HTTP请求和HTTPS请求,其中HTTP的传输属于明文传输,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的…...

【高考志愿】地质资源与地质工程

目录 一、专业概述 1.1 专业定义 1.2 主要课程 1.3 专业培养目标 二、就业前景和考研方向 三、工作特点和挑战 四、如何培养核心竞争力 五、 地质资源与地质工程专业排名 六、结语 关于高考志愿选择地质资源与地质工程专业,以下是一些详细的介绍和参考信息…...

全网最佳硕士研究生复试简历模板

硕士研究生复试简历模板 ✨ 简介 提供了一个适用于国内硕士研究生复试的个人简历模板。该模板通过统一的“样式”形成规范的Word格式,是目前研究生复试的最佳简历模板之一。模板使用“华文中宋”字体,如您的电脑中未安装此字体,请提前安装。…...

Rocky Linux 9 系统OpenSSH CVE-2024-6387 漏洞修复

Rocky Linux 9系统 OpenSSH CVE-2024-6387 漏洞修复 1、漏洞修复2、修复思路3、修复方案3.1、方案一3.2、方案二 4、总结5、参考 1、漏洞修复 CVE-2024-6387:regreSSHion:OpenSSH 服务器中的远程代码执行(RCE),至少在…...

Sping源码(九)—— Bean的初始化(非懒加载)—mergeBeanDefinitionPostProcessor

序言 前几篇文章详细介绍了Spring中实例化Bean的各种方式,其中包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor以及构造器方式创建对象。 创建对象 这里再来简单回顾一下对象的创建,不知道大家有没有这样一个疑…...

labview技巧——AMC框架安装

AMC工具包的核心概念是队列,队列是一种先进先出(FIFO,First In First Out)的数据结构,适用于处理并发和异步任务。在LabVIEW中,队列可以用于在不同VI之间传递数据,确保消息的有序处理&#xff0…...

解锁分布式云多集群统一监控的云上最佳实践

作者:在峰 引言 在当今数字化转型加速的时代,随着混合云、多云多集群环境等技术被众多企业广泛应用,分布式云架构已成为众多企业和组织推动业务创新、实现弹性扩展的首选,分布式云容器平台 ACK One(Distributed Clou…...

学会拥抱Python六剑客,提高编程效率

在Python语言中,有六个强大的工具,它们被称为"Python六剑客"。而Python六剑客指的是Python中常用的六种功能强大且灵活的工具,它们分别是“切片(Slicing),推导列表(List Comprehensio…...

mysql 根据当前时间筛选某个时间范围内的数据

1.根据天数筛选 SELECT * FROM coupons WHERE NOW() BETWEEN start_time AND end_time; 在这个查询中,NOW()函数返回当前的日期和时间。BETWEEN操作符用于检查NOW()返回的当前时间是否在start_time和end_time之间(包括这两个时间)。 注意&a…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...