3.TCP的三次握手和四次挥手

 一、前置知识

  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在传输数据前通信双方必须建立连接(所谓连接,是指客户端和服务端各自保存一份关于对方的信息,比如ip地址,端口号等)。TCP通过三次握手建立一个连接,通过四次挥手释放一个连接。

  在了解TCP连接前,先了解TCP报文的头部结构:

  TCP报文段的头部结构主要包含以下几个部分:
1.源端口和目的端口(Source port,Destination port):这两个字段用来标识发送端和接收端的端口号,占16位。
2.序列号(Sequence number):占32位,用来标识从TCP源端向目的端发送的字节流。当发起方发送数据时,会对这些数据进行标记,确保数据的有序性和完整性。(seq)
3.确认序号(Acknowledgement number):占32位,只有在ACK标志位为1时,这个字段才有效。它表示接收方已经成功接收到的数据的序列号(ack=seq+1)
4.标志位:占6位,包含URG、ACK、PSH、RST、SYN、FIN等标志。其中ACK表示确认序号有效,FIN表示释放一个连接,SYN表示发起一个新连接。


二、TCP的三次握手

  三次握手就是通过三次数据包的交换,来确认通信双方收发数据的能力。

  1. 一开始,客户端和服务端都处于CLOSE状态,服务端监听客户端的请求,进入LISTEN状态。
  2. 第一次握手(客户端发送连接请求):客户端会向服务端发送一个SYN包,里面包含了客户端的初始序列号。然后客户端进入SYN_SENT状态。
  3. 第二次握手(服务端确认收到了客户端的连接请求):回复客户端一个SYN+ACK包,里面包含确认信息(表示收到了客户端的SYN包)和服务端的初始序列号。然后服务端进入SYN_RCVD(received的缩写)状态。
  4. 第三次握手(客户端收到服务端的确认后,再次向服务端确认):再回复一个ACK包给服务端。然后客户端进入ESTABLISHED状态,当服务端接收到这个ACK包后,也进入ESTABLISHED状态。
  5. 这样客户端和服务端之间就建立了一个可靠的连接,可以开始传输数据。

三、TCP的四次挥手

  1. 数据传输结束后,通信双方都可以主动发起释放连接请求,假设由客户端发起。
  2. 第一次挥手(客户端发送释放连接请求):客户端向服务端发送一个FIN包,并附带一个序列号。然后,客户端进入FIN_WAIT1状态。
  3. 第二次挥手(服务端确认收到了客户端释放连接的请求):回复一个ACK包,同时包含一个确认号。然后,服务端进入CLOSE_WAIT状态(此时服务端还没准备好释放连接,可能还有数据要处理),当客户端收到服务端的这个ACK包后,进入FIN_WAIT2状态。
  4. 第三次挥手(服务端也已经准备好释放连接):向客户端发送一个FIN包,并附带一个序列号。然后,服务端进入LAST_ACK状态,表示等待来自客户端的最后一个ACK包。
  5. 第四次挥手(客户端确认服务端也已经准备好释放连接):就回复一个ACK包,但是此时客户端不会马上关闭连接,而是进入TIME_WAIT状态,等待某个固定时间(2MSL,2 Maximum Segment LifeTime,两倍的最长报文段生命周期),目的是防止这个ACK包丢失,导致服务端没有收到客户端关闭连接的确认,没有关闭连接,就会超时重传FIN包。那么等待这个固定时间后(即是确保服务端已经正常关闭连接后),客户端才关闭连接,进入CLOSED状态。当服务端收到这个ACK包后,就关闭连接,进入CLOSED状态。
  6. 这样就成功释放连接了。

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

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

相关文章

软件工程期末复习(6)需求分析的任务

需求分析 需求分析的任务 “建造一个软件系统的最困难的部分是决定要建造什么……没有别的工作在做错时会如此影响最终系统,没有别的工作比以后矫正更困难。” —— Fred Brooks 需求难以建立的原因&#x…

【计算机毕业设计】基于SSM++jsp的高校专业信息管理系统【源码+lw+部署文档+讲解】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

复利效应(应用于成长)

应用 每个人在智力、知识、经验上,复利效应都一样,只要能积累的东西,基本上最终都会产生复利效应。 再来看一下复利公式:FP*(1i)^n P本金;i利率;n持有期限。在使用时,一定要注意4个限定条件&a…

在线音乐系统

文章目录 在线音乐系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 在线音乐系统 一、项目演示 音乐网站 二、项目介绍 基于springbootvue的前后端分离在线音乐系统 登录角色 : 用户、管理员 用…

Git 基础使用(2) 分支管理

文章目录 分支概念分支使用查看分支分支创建分支切换分支合并合并冲突分支删除 分支管理快进模式分支策略内容保存错误处理 分支概念 (1)分支概念 Git分支是指在版本控制系统Git中,用来表示项目的不同工作流程或开发路径的一个重要概念。通过…

知识图谱 | 语义网络写入图形数据库(含jdk和neo4j的安装过程)

Hi,大家好,我是半亩花海。本文主要介绍如何使用 Neo4j 图数据库呈现语义网络,并通过 Python 将语义网络的数据写入数据库。具体步骤包括识别知识中的节点和关系,将其转化为图数据库的节点和边,最后通过代码实现数据的写…

css 步骤条虚线渐变色效果实现

效果如图所示&#xff1a; 思路&#xff1a; 使用元素覆盖的方式实现视觉上虚线的效果 实现代码&#xff1a; html布局 <ul class"details-cont"><li class"details-li" v-for"item in 3" :key"item"><div class&qu…

vue + element-plus 开发中遇到的问题

1.问题之路由守卫 初写路由守卫&#xff0c;对于next()的理解不是很透彻&#xff0c;就想着都放行&#xff0c;不然看不到效果&#xff0c;结果控制台出现了警告&#xff0c;想着报黄的问题就不是问题&#xff0c;但仔细一看发现他说&#xff0c;如果再生产阶段就会失败&#x…

程控水冷阻性负载主要工作方式

程控水冷阻性负载是一种先进的电力设备&#xff0c;主要用于电力系统的测试和研究。它的主要工作方式是通过控制水冷系统的温度&#xff0c;来模拟不同的阻性负载条件&#xff0c;从而对电力设备进行各种性能测试。 首先&#xff0c;我们需要了解什么是阻性负载。阻性负载是指那…

DigitalOcean 的PostgreSQL、MySQL、Redis、Kafka托管数据库,现已支持自定义指标收集功能

近期&#xff0c;我们的几个托管数据库&#xff08;PostgreSQL、MySQL、Redis和Kafka&#xff09;引入了自定义数据指标功能&#xff08;scrapable metrics&#xff09;。这些指标使您更具体、更细致地了解数据库的性能&#xff0c;包括延迟、资源利用率和错误率。然后&#xf…

【LLM第五篇】名词解释:prompt

1.是什么 提示工程&#xff08;Prompt Engineering&#xff09;是一门较新的学科&#xff0c;关注提示词开发和优化&#xff0c;帮助用户将大语言模型&#xff08;Large Language Model, LLM&#xff09;用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解…

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

概述 本文使用最简单和快速的方式基于Gin框架搭建一个微服务的网关调用微服务的场景网关作为客户端基于RPC调用某一服务端的服务并接入熔断和限流以及链路追踪具体场景&#xff1a;通过网关API查询购物车里的数据在最后&#xff0c;会贴上网关和购物车服务的代码仓库 服务端搭…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

【HR】阿里三板斧--20240514

参考https://blog.csdn.net/haydenwang8287/article/details/113541512 头部三板斧 战略能不能落地、文化能不能得到传承、人才能不能得到保障。 头部三板斧适用的核心场景有三个&#xff1a;一是战略不靠谱&#xff1b;二是组织效率低、不聚心&#xff1b;三是人才跟不上。对…

二、服务器配置修改

二、服务器配置修改 1 防火墙相关配置 systemctl status firewalld systemctl enable firewalld systemctl start firewalld firewall-cmd --reload firewall-cmd --list-all# 开启端口 firewall-cmd --zonepublic --add-port6030-6060/tcp --permanent firewall-cmd --zonep…

如何将公众号添加到CSDN个人主页

1. 创作中心- 推广管理 输入个人公众号名字并开启微信公众号推广 2. 将公众号的二维码图片加入拓展信息 个人主页的左下角就能看到推广 如果希望能看到是二维码 操作如下&#xff1a; 写篇文章贴上二维码 然后点击鼠标右键获得此页面链接 &#xff0c;例如我的个人公众号 htt…

定时器的理论和使用

文章目录 一、定时器理论1.1定时器创建和使用 二、定时器实践2.1周期触发定时器2.2按键消抖 一、定时器理论 定时器是一种允许在特定时间间隔后或在将来的某个时间点调用回调函数的机制。对于需要周期性任务或延迟执行任务的嵌入式应用程序特别有用。 软件定时器&#xff1a; …

【C++语言】动态内存管理

文章目录 前言内存管理数据存储位置C语言动态内存管理方式C动态内存管理方式&#xff1a;new/deleteoperator new与operator delete函数new和delete的实现原理定位new表达式&#xff08;了解&#xff09;常见面试题 总结C语言系列学习目录 前言 本章要介绍的是动态内存管理&am…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下&#xff1a; server {listen 90;server_name localhost;# 配置静态资源文件&#xff0c;就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…