tcp专题

news2024/11/19 6:11:44

目录

一.TCP的连接建立

1.1面向连接

1.2TCP报文结构

1.3TCP三次握手

1.4TCP的状态变化

1.5为什么必须是三次握手,而不是两次或者四次

二.TCP的连接断开

2.1TCP的"四次挥手

2.2TCP的状态变化

2.3为什么要有TIME_WAIT状态

2.4为什么TIME_WAIT状态的时间是2MSL 


一.TCP的连接建立

1.1面向连接

面向连接:在发送数据前,需要先建立一条点到点的连接

点到点:只有双方进行通信

连接:双方前协商的一系列约定

TCP四元组:

源IP地址源端口号
目标IP地址目的端口号

可以唯一区分和标识一条TCP连接

1.2TCP报文结构

序列号:TCP是基于"字节流"的协议,定义为字节流的编号

确认序列号:发送方发送的下一个字节的序号

头部长度:最短20个字节,变长头部

1.3TCP三次握手

SYN报文:客户端向服务器发送请求建立连接的信号

  1. 客户端发送SYN包:客户端向服务器发送一个SYN包,其中包含客户端的初始序列号以及请求建立连接的标志位。

  2. 服务器回复SYN-ACK包:服务器接收到客户端的SYN包后,会回复一个带有SYN和ACK标志的包,其中SYN标志表示同意建立连接,ACK标志表示确认客户端的SYN包已经收到,同时还会告知自己的初始序列号。

  3. 客户端回复ACK包:最后,客户端会回复一个带有ACK标志的包,其中ACK标志表示确认服务器的SYN-ACK包已经收到,连接已经建立成功。

1.4TCP的状态变化

客户端:

               1.关闭状态: 在发送SYN请求建立连接之后,进入到下一个状态

                2.SYN_SENT :客户端等待服务器返回SYN_ACK报文

                3.建立完成:收到服务器返回的SYN_ACK报文,因为此时客户端指向服务器的会话 已经                      建立完成

               客户端发送给服务器的最后一个ACK报文,是允许携带数据的

服务器:

              1.关闭状态:当服务器应用程序创建一个监听的套接字之后,将进入到下一个状态

              2,Listen(侦听状态):当接收到客户端发送的SYN报文之后,为TCP连接分配缓存空                       间,同时,发送SYN_ACK报文段,进入到下一个状态

              3,SYN_RCVD状态:等待客户端回复ACK,收到之后,将进入到下一个状态

              4,建立完成状态

1.5为什么必须是三次握手,而不是两次或者四次

为什么不是两次握手

为什么不是两次握手

三次握手可以防止旧的重复连接造成混乱

二.TCP的连接断开

2.1TCP的"四次挥手

2.2TCP的状态变化

客户端:

建立完成状态 --- 发送完所有字节流后,携带最后一组字节流的数据段同时将FIN标记位置 1,之后,进入到下一个状态

FIN_WAIT_1 --- 等待服务器回复ACK,收到ACK应答之后,将进入到下一个状态

FIN_WAIT_2 --- 等待服务器发送FIN断开请求,将回复ACK进行确认,进入下一个状态

 TIME_WAIT --- 等待2MSL时间后进入下一个状态

CLOSE --- 关闭状态,断开TCP的连接,释放掉所有TCP连接

服务器:

建立完成状态 --- 收到客户端发送的FIN断开请求后,服务器将回复一个ACK确认报文,之 后,进入到下一个状态

CLOSED_WAIT --- 等待服务器自身字节流的发送,当自身所有字节流传递完毕后,将发送一个 FIN断开请求,之后进入到下一个状态

LAST_ACK --- 等待客户端进行最后的ACK应答,当收到客户端发送的ACK确认报文之后,将进 

 入到下一个状态

CLOSE --- 关闭状态,断开TCP的连接,释放掉所有TCP连接占用的资源

2.3为什么要有TIME_WAIT状态

保证TCP会话可以正常关闭

2.4为什么TIME_WAIT状态的时间是2MSL 

MSL  --  报文最大生存时间

设置为2MSL时间的原因

1,最后一个ACK报文丢失,等待对方重传,一来一回正好两个MSL时间,设置为此,则可以 保证TCP会话的正常断开

2,设置2MSL,足以让两个方向上的数据报都丢弃,再出现新的连接时,不至于被历史报文 造成数据错乱

3,太长也不行,导致资源占用过大

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

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

相关文章

[Hive] explode

在 Hive 中,explode 函数用于将数组(Array)或者Map类型的列拆分成多行, 每个元素或键值对为一行。这允许我们在查询中对数组或 Map 进行扁平化操作。 下面是使用 explode 函数的示例: 假设我们有一个包含数组字段的表…

【牛客网】另类加法

题目 思路 考虑使用位运算进行解决两个数异或的结果是两个数相加不考虑进位的结果(不考虑进位) 两个数与左移一位的结果,是两个数相加之后进位的结果(只考虑进位)结论:两个数相加,如果不需要进位,即与左移等于0,则这个给值就是两个数相加 的值 代码 import java.util.*;publ…

npm 执行命令时报错npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve

npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue-office/docx1.3.0 npm ERR! Found: vue-demi0.14.6 npm ERR! node_modules/vue-demi npm ERR! vue-demi“^0.14.6” from the root project npm ERR! vue-demi“*” from …

C++初阶--C++入门(2)

C入门(1)链接入口 文章目录 内联函数auto关键字注意事项 基于范围的for循环(C11)nullptr 内联函数 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提…

运筹优化 | 分支定界算法(Branch and Bound)Python求解整数规划

from gurobipy import * import copy import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei]定义了一个线性松弛问题,并用Gurobi求解 initial_LP Model(initial LP) # 定义变量initial_LP,调用Gurobi的Model&…

运机转债上市价格预测

运机转债-127092 基本信息 转债名称:运机转债,评级:AA-,发行规模:7.3亿元。 正股名称:运机集团,今日收盘价:16.2元,转股价格:17.67元。 当前转股价值 转债面…

【AIGC核心技术剖析】基于大规模弱监督的鲁棒语音识别【附源码】

论文研究了语音处理系统的能力,该系统只是为了预测互联网上的大量音频成绩单而训练的。当扩展到 680,000 小时的多语言和多任务监督时,生成的模型可以很好地推广到标准基准,并且通常与先前的完全监督结果竞争,但在零镜头传输设置中…

【ArcGIS绘图系列1】在ArcGIS中制作柱状图与饼状图

成图展示 图形出处:J2023-Assessment of agricultural drought based on multi-source remote sensing data in a major grain producing area of Northwest China 实现步骤 第一步 查看数据信息 数据输入到ArcGIS中:包含数据表和shp文件 1、shp文件…

ZXing.Net 的Core平台生成二维码

一、引用 二、代码 帮助类 /// <summary>/// ZXing.NET 二维码帮助类/// </summary>public class ZXingHelper{/// <summary>/// 站点二维码的目录/// </summary>private static string QRCodeDirectory "QRCode";/// <summary>/// 使…

KingBase服务器参数配置(Kylin)

主配置文件/KingbaseES/V8/data/kingbase.conf # 可通过find查找 [默认存储在database cluseter目录中] find / -name kingbase.conf辅助参数文件kingbase.auto.conf # 可通过find查找 [默认存储在database cluseter目录中] find / -name kingbase.auto.conf查看当前会话的参…

互联网Java工程师面试题·Java 总结篇·第十弹

目录 82、JDBC 能否处理 Blob 和 Clob&#xff1f; 83、简述正则表达式及其用途。 84、Java 中是如何支持正则表达式操作的&#xff1f; 85、获得一个类的类对象有哪些方式&#xff1f; 86、如何通过反射创建对象&#xff1f; 87、如何通过反射获取和设置对象私有字段的值…

python -pandas -处理excel合并单元格问题

对于合并的单元格&#xff0c;不进行处理情况下&#xff0c;会默认输出nan问题 解决方法&#xff1a; class A(object):def __init__(self, xlsx_file_path, sheet_index):self.xlsx_file FileDataProcesser.read_excel(xlsx_file_path, sheet_index)self.sheet_data self.…

优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符

&#x1f974;博主&#xff1a;小猫娃来啦 &#x1f974;文章核心&#xff1a;优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符 文章目录 引言空值处理的挑战解决方案1&#xff1a;?? 运算符基本用法与 || 运算符的区别实际应用场景举例 解决方案2&#xff…

leetCode 392. 判断子序列 动态规划 + 优化空间 / 双指针 等多种解法

392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c…

【2023】redis-stream配合spring的data-redis详细使用

目录 一、简介1、介绍2、对比二、整合spring的data-redis实现1、使用依赖2、配置类2.1、配置RedisTemplate bean2.2、异常类3、实体类3.1、User3.2、Book4、发送消息4.1、RedisStreamUtil工具类4.2、通过延时队列线程池模拟发送消息4.3、通过http主动发送消息5、&#x1f31f;消…

003数据安全传输-多端协议传输平台:Protobuf - 部署

文章目录 一、Windows环境二、Linux Centos环境三、protobuf测试3.1 新建.proto文件生成相应的类3.2 .proto生成相应的类的使用3.3 配置VS3.4 test代码 一、Windows环境 在windows下配置&#xff0c;无论protobuf是什么版本&#xff0c;IDE和编译器的版本都要保持一致。 比如…

Linux - 大括号的妙用

示例1 touch demo_{1..10}.txt示例2 touch case_{a,b,c,d}.txt示例3 touch {a,b}{1..4}.txt

第三章 内存管理 十一、虚拟内存的基本概念

目录 一、传统存储管理 1、缺点 二、局部性原理 1、时间局部性&#xff1a; 2、空间局部性&#xff1a; 三、虚拟内存的定义和特征 1、结构 ​编辑 2、定义 3、特征 &#xff08;1&#xff09;多次性: &#xff08;2&#xff09;对换性: &#xff08;3&#xff09;…

【来点小剧场--项目测试报告】个人博客系统测试报告

一、项目背景 个人博客系统采用前后端分离的方法来实现&#xff0c;使用了MySQL数据库来存储相关的数据&#xff0c;同时对Redis进行配置&#xff0c;将session会话存储在redis中以方便分布式运转&#xff0c;最后通过云服务器将项目部署到网络上。前端主要有六个页面构成&…

Vue3 + Nodejs 实战 ,文件上传项目--大文件分片上传+断点续传

目录 1.大文件上传的场景 2.前端实现 2.1 对文件进行分片 2.2 生成hash值&#xff08;唯一标识&#xff09; 2.3 发送上传文件请求 3.后端实现 3.1 接收分片数据临时存储 3.2 合并分片 4.完成段点续传 4.1修改后端 4.2 修改前端 5.测试 博客主页&#xff1a;専心_前端…