TCP连接管理(三次握手,四次挥手)

news/2024/5/6 13:13:55/文章来源:https://blog.csdn.net/qq_36091214/article/details/131608409

目录

  • 一、回顾一下TCP包头
  • 二、连接的建立——“三次握手”
  • 三、连接的建立——“四次挥手”
    • 保活计时器

一、回顾一下TCP包头

在这里插入图片描述

源端口号(Source Port):16 位字段,表示发送方的端口号。

目的端口号(Destination Port):16 位字段,表示接收方的端口号。

序列号(Sequence Number):32 位字段,表示发送方发送的字节流的序列号。用于实现数据的可靠传输和顺序传递。

确认号(Acknowledgment Number):32 位字段,表示接收方期望接收的下一个字节的序列号。用于实现数据的可靠传输和确认。

数据偏移(Data Offset):4 位字段,表示 TCP 首部的长度,以 32 位的字为单位。最大值为 15,对应的首部长度为 60 字节。

保留(Reserved):6 位字段,保留供将来使用,目前置为 0。

U/A/P/R/S/F:各占 1 位的标志位。
U:紧急(Urgent)标志位,表示紧急指针字段是否有效。
A:确认(Acknowledgment)标志位,表示确认号字段是否有效。
P:推送(Push)标志位,表示接收方应该尽快将数据交给应用层。
R:复位(Reset)标志位,用于中断连接。
S:同步(Synchronize)标志位,用于建立连接 三次握手。
F:终止(Finish)标志位,用于释放连接 四次挥手。
窗口大小(Window Size):16 位字段,表示接收方的窗口大小,用于流量控制。

校验和(Checksum):16 位字段,用于校验 TCP 首部和数据的完整性。

紧急指针(Urgent Pointer):16 位字段,仅在紧急标志位为 1 时有效,表示紧急数据的边界。

TCP 报文段的首部长度为 20 字节(不包括选项字段)。首部长度可变取决于选项字段的存在与长度。

二、连接的建立——“三次握手”

TCP 建立连接的过程叫做握手。
采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。

在这里插入图片描述

  1. B 的 TCP 服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求。

  2. A 的 TCP 向 B 主动发出连接请求报文段,其包头中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
    注意:TCP规定,SYN 报文段(即SYN = 1的报文段)不能携带数据,但要消耗掉一个序号。

  3. B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
    B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号 ack = x + 1,自己选择的序号 seq = y。
    这个报文段也不能携带数据,但同样要消耗掉一个序号。

  4. A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1。
    A 的 TCP 通知上层应用进程,连接已经建立。
    TCP 标准规定:ACK 报文段可以携带数据。
    但如果不携带数据,则不消耗序号。下一个数据报文段的序号仍是 seq = x + 1。

  5. B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。双方可以开始数据传送。

三、连接的建立——“四次挥手”

TCP 连接释放过程比较复杂。
数据传输结束后,通信的双方都可释放连接。
TCP 连接释放过程是四报文握手。

在这里插入图片描述

  1. A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
    A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认。
    TCP规定:FIN 报文段即使不携带数据,也消耗掉一个序号。

  2. B 发出确认,ACK=1,确认号 ack = u+1,这个报文段的序号 seq = v。
    TCP 服务器进程通知高层应用进程。
    从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭 (half-close) 状态。B 若发送数据,A 仍要接收。

  3. 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。
    FIN=1,ACK=1,确认号 ack = u+1。

  4. A 收到连接释放报文段后,必须发出确认。
    ACK=1,确认号 ack=w+1,自己的序号 seq = u + 1

保活计时器

  1. 用来防止在 TCP 连接出现长时期空闲。

  2. 通常设置为 2 小时 。

  3. 若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。

  4. 若发送了 10 个探测报文段(每一个相隔 75 秒)还没有响应,就假定客户出了故障,因而就终止该连接。

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

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

相关文章

有趣的命令——————用shell脚本实现三角形(直角三角形、等腰三角形)

直角三角形 vim zhijiao.sh 输入以下内容&#xff1a;#!/bin/bashread -p "几层的三角形:" nfor ((i1;i<$n;i)) dofor ((jn;j>i;j--))doecho -n " "donefor ((j1;j<i;j))doecho -n "*"doneecho done例&#xff1a; 测试&#xff1a; 等…

【QT】——布局

目录 1.在UI窗口中布局 2.API设置布局 2.1 QLayout 2.2 QHBoxLayout 2.3 QVBoxLayout 2.4 QGirdLayout 注意 示例 Qt 窗口布局是指将多个子窗口按照某种排列方式将其全部展示到对应的父窗口中的一种处理方式。在 Qt 中常用的布局样式有三种&#xff0c;分别是&#xff1…

jmeter的高阶使用技巧——打印时间戳与年月时分秒

Jmeter中提供了一种函数&#xff0c;可以打印时间戳&#xff0c;如下图 年&#xff1a; yyyy 月&#xff1a;MM 日&#xff1a;dd   时&#xff1a; HH 分&#xff1a; mm 秒&#xff1a;ss 关于时间戳的格式&#xff0c;可以自由组合定义&#xff0c;这里我写成这样 yyyy-M…

【C++】float / double 与 0 值比较

【C】float / double 与 0 值比较 文章目录 【C】float / double 与 0 值比较1. 概述不同1.1 - float 与 double 实际存储1.2 - C 语言与 C 中不同 2. 比较方法2.1 - C 风格比较2.2 - 使用 limits 函数 3. 参考链接 References 1. 概述不同 当然使用普通的比较没有问题&#xf…

【七天入门数据库】第一天 MySQL的安装部署

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 MySQL数据库存在多种版本&#xff0c;不同的版本在不同的平台上&#xff08;OS&#xff0c;也就是操作系统上&a…

msvcr120.dll找不到是什么原因,怎样修复

msvcr120.dll的定义 msvcr120.dll是微软Visual C Redistributable软件包中的一个动态链接库文件。它是Microsoft Visual 所需的一个重要组件。这个文件主要用于支持和管理C语言编写的应用程序的运行。它包含了许多C的运行库函数和类&#xff0c;以便应用程序能够正常运行和调用…

Python(一):为什么我们要学习Python?

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

精确时钟同步协议ptp/IEEE-1588v2协议-------(2)主从时钟之间的消息交互与时钟同步过程

本文目录 1、主时钟和从时钟之间的消息交互流2、延时delay和偏移offset的计算2.1、延时delay的计算2.2、偏移offset的计算 主时钟和从时钟之间&#xff0c;通过sync, follow up, delay request, delay response这四条消息&#xff0c;完成时钟同步过程。PTP时钟同步系统能工作的…

3.8.cuda运行时API-使用cuda核函数加速yolov5后处理

目录 前言1. Yolov5后处理2. 后处理案例2.1 cpu_decode2.2 gpu_decode 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简…

vue 2.0 的使用

day01 1. Vue简介 一套用于构建用户界面的 <font colorred>渐进式框架</font> 2. 初识Vue 2.1 搭建Vue开发环境 第一步&#xff1a;去<a href"https://v2.cn.vuejs.org/">Vue2官网</a>&#xff0c;下载依赖包。 第二步&#xff1a;在 …

多线程与并发编程【线程休眠、线程让步、线程联合、判断线程是否存活】(二)-全面详解(学习总结---从入门到深化)

目录 线程休眠 线程让步 线程联合 Thread类中的其他常用方法 判断线程是否存活 线程的优先级 线程休眠 sleep()方法&#xff1a;可以让正在运行的线程进入阻塞状态&#xff0c;直到休眠时间 满了&#xff0c;进入就绪状态。sleep方法的参数为休眠的毫秒数。 public class…

两部搞定Pytorch 安装与配置(小白也能搞定!!!)

Pytorch 安装与配置 NVIDIA系统管理界面查看 nvidia-smi 进入NVIDIA系统管理界面 对应的详细解释看下图 参考博文 (53条消息) nvidia-smi命令详解和一些高阶技巧介绍_Chaos_Wang_的博客-CSDN博客 CUDA 查看 CUDA 有两类&#xff1a;其中一类是驱动API(Driver API)&#xff…

实现windows系统文件传输到Linux系统中的工具

1、实现windows系统文件传输到Linux系统中的工具 yum -y install lrzsz然后就可以将windows中的文件&#xff0c;直接拖到Xshell窗口即可。

【钱处理】商业计算怎样才能保证精度不丢失

以项目驱动学习&#xff0c;以实践检验真知 前言 很多系统都有「处理金额」的需求&#xff0c;比如电商系统、财务系统、收银系统&#xff0c;等等。只要和钱扯上关系&#xff0c;就不得不打起十二万分精神来对待&#xff0c;一分一毫都不能出错&#xff0c;否则对系统和用户来…

Kafka入门,mysql5.7 Kafka-Eagle部署(二十五)

官网 https://www.kafka-eagle.org/ 下载解压 这里使用的是2.0.8 创建mysql数据库 创建名为ke数据库,新版本会自动创建&#xff0c;不会创建的话&#xff0c;自己手动创建&#xff0c;不然会报查不到相关表信息错误 SET NAMES utf8; SET FOREIGN_KEY_CHECKS 0;-- ------…

拥有铁粉,怀抱CSDN大家庭

&#x1f451; 个人主页 &#x1f451; &#xff1a;&#x1f61c;&#x1f61c;&#x1f61c;Fish_Vast&#x1f61c;&#x1f61c;&#x1f61c; &#x1f41d; 个人格言 &#x1f41d; &#xff1a;&#x1f9d0;&#x1f9d0;&#x1f9d0;说到做到&#xff0c;言出必行&am…

python_day4

def test():return 1, a, Truex, y, z test() print(f"x{x},y{y},z{z}")位置参数&#xff1a;调用时根据参数位置传递参数 关键字参数&#xff1a;调用时通过“键值”形式传参 def user(name, age, gender):print(f"name:{name},age:{age},gender:{gender}&q…

图床项目之公网发布和测试

项目发布和测试 一、http服务测试1.1、ab http压力测试1.2、post测试&#xff08;注册请求和登录请求&#xff09; 二、性能测试2.1、生成测试脚本2.2、上传测试2.2.1、单客户端测试本地上传到本机服务器2.2.2、如果使用集群的方式进行测试 2.3、下载测试2.4、删除测试2.5、测试…

springboot请求重定向失败问题解决方案

今天晚上在写登录页面时&#xff0c;发现自己的首页无法正常访问&#xff0c;用户名和密码正常的情况下还是无法访问首页。于是开始进行debug&#xff0c; 程序执行至此处时无任何异常&#xff0c;但是就是在进行重定向页面时出现了404&#xff0c;在检查导航栏后发现地址栏也发…

深度学习——批数据训练

代码与详细注释&#xff1a; BATCH_SIZE 5&#xff0c;shuffleTrue import torch import torch.utils.data as Data# 添加随机种子以使结果可复现 torch.manual_seed(1) # reproducible# 批大小 BATCH_SIZE 5 # BATCH_SIZE 8x torch.linspace(1, 10, 10) # this…