http 三次握手 四次挥手

news2024/11/26 0:42:23

网络参考模型

在这里插入图片描述
在这里插入图片描述
网络层是端点间的(客户端、服务端)
链路层是跳跃节点间的。
在这里插入图片描述

TCP/IP 下一跳模式(网关) 内存小,速度快,不可靠。(网络号、主机号)
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式

三次握手

目的是建立链接

简单理解:

1. Client 发送一个数据包(syn)
2. Server 收到 数据包(syn),会发送一个数据包(syn+ack),这是一个确认的过程
3. Client 收到数据包(syn+ack),会发送一个数据包(ack)给Server

一旦三次握手之后,双方就建立了链接,共双发发送和接受资源。
在这里插入图片描述

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,Client发送syn包(syn=j)到Server,并进入SYN_SEND状态,等待Server确认;
第二次握手:Server收到syn包,必须确认Client的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时Server进入SYN_RECV状态;

第三次握手:Client收到Server的SYN+ACK包,向Server发送确认包ACK(ack=k+1),此包发送完毕,Client和Server进入ESTABLISHED状态,完成三次握手。 完成三次握手,Client与Server开始传送数据.
在这里插入图片描述

四次挥手

目的是断开链接,释放资源

简单理解

  1. Client 向Server 发送一个数据包(fin)
  2. Server 收到数据包(fin),向Client发送一个数据包(ack), ack确认。
  3. Server 发送ack数据包后,再发送一个数据包(fin)
  4. Client 发送一个数据包(ack)ack确认

在这里插入图片描述

socket 是套接字 ip+port + ip+port(Client:设备的IP地址+端口号,Server的IP地址+端口号)
port:端口号 有65535个端口号
ACK :TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。
FIN :(finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
ESTABLISHED : 已经建立连接
发送序列号:Sequence Number
确认序列号:Acknowledgment Number

FIN_WAIT_1:表示等待对方的FIN报文。当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态
FIN_WAIT_2:也表示等待对方的FIN报文。FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。你回复一个ACK给对方,并进入CLOSE_WAIT状态。接下来就是查看你是否还有数据要发送给对方,如果没有,就可以close这个socket,并发送FIN给对方,即关闭连接。
CLOSING:表示Client给Server发送FIN后,并没有收到Server回应的ACK,而收到了Server发送的FIN。表示双方同时close一个socket,出现同时发送FIN现象。
LAST_ACK: 发送FIN报文后,等待对方的ACK报文,当收到ACK报文后,进入到CLOSED状态。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK确认,等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态。

在这里插入图片描述

第一次挥手:Client向Server,发送FIN报文段,表示关闭数据传送,并Client进入FIN_WAIT_1状态,表示没有数据要传输了
第二次挥手:Server收到FIN报文段后进入CLOSE_WAIT状态(被动关闭),然后发送ACK确认,表示同意你关闭请求了,Client到主机的数据链路关闭,主机进入FIN_WAIT_2状态
第三次挥手:Server等待Client发送完数据,发送FIN到Client请求关闭,Server进入LAST_ACK状态
第四次挥手:Client收到Server发送的FIN后,回复ACK确认到Server,Client进入TIME_WAIT状态。Server收到Client的ACK后就关闭连接了,状态为CLOSED。Client等待2MSL,仍然没有收到Server的回复,说明Server已经正常关闭了,Client关闭连接。

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

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

相关文章

Docker部署(4)——运行时日志时间不对(时区设置)

当使用docker run 命令时,发现容器虽然成功运行,但是输出的时间却不对 。使用timedatectl命令后发现Linux系统的时间是正常的时间。 于是将问题缩小到是不是docker 在运行时没有使用宿主机的时区的原因,那么解决办法可以将宿主机的时区映射到…

Maven(二):Maven的使用入门

文章目录 使用入门项目骨架pom.xml构建过程编写测试打包和运行常用打包方式maven-shade-plugin使用filter与artifactSet - 过滤jar包Transformer 参考文献 使用入门 项目骨架 对于一个使用Maven来管理的项目,Maven提倡使用一个目录结构标准: ${basedi…

Selenium+Python+Pycharm自动化环境搭建具体步骤

一、python下载:建议选择3.4以上的版本 官网下载地址: Download Python | Python.org 下载后自行进行安装,安装python需要配置环境变量,安装时可勾选“add python to path”的选项。勾选之后会自动将python添加到系统环境变量Pa…

学习AD的一些记录

1.首先创建一个工程,然后在工程里面创建原理图,PCB,原理图库和PCB库。 并保存。 2.将外部的原理图库,pcb库复制到自己创建的原理图库和pcb库。放到这两个里面。 复制,并粘贴到自己创建的原理图库中。PCB库同理 3.然后…

vue2和vue3的渲染过程简述版

文章目录 vue2渲染过程vue3渲染过程优化和扩充 vue2和vue3对比 vue2渲染过程 在Vue 2的渲染过程中,包括以下几个关键步骤: 解析模板:Vue 2使用基于HTML语法的模板,首先会将模板解析成抽象语法树(AST)&…

高频前端面试题汇总之代码输出结果篇

前言: 代码输出结果是面试中常考的题目,一段代码中可能涉及到很多的知识点,这就考察到了应聘者的基础能力。在前端面试中,常考的代码输出问题主要涉及到以下知识点:异步编程、事件循环、this指向、作用域、变量提升、…

SolidWorks软件三维建模教程——莫比乌斯环建模案例

SolidWorks是达索系统(Dassault Systemes )下的子公司,专门负责研发与销售机械设计软件的视窗产品。SOLIDWORKS软件三维建模功能强大,为制造型企业提供SOLIDWORKS一体化解决方案和服务。 今天微辰三维就以莫比乌斯环的三维建模案例…

智慧灯杆云盒是什么?如何挑选智慧云盒?

慧路灯杆云盒,是一种专门用于智慧路灯杆远距通信、远程控制、数据分析、边缘计算的智能终端设备,智慧路灯杆云盒作为联通智慧路灯杆与物联网云平台的桥梁,可以有效提高智慧路灯杆的管理效率、降低维护成本、实现多样化设备联动协同功能&#…

【C++】的多态

目录 1. 多态的概念2. 多态的定义及实现虚函数虚函数的重写虚函数重写的两个例外:C11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类接口继承和实现继承 4. 多态的原理虚函数表 5. 单继承和多继承关系中的虚函数表单继承中的虚函数表多继承中的…

qemu虚拟机配置网络

一、实现qemu虚机&宿主机网络互通 qemu虚机的网络介绍及原理可参考前人文章:Linux 内核调试 七:qemu网络配置_lqonlylove的博客-CSDN博客 这里只简单梳理下操作流程,以便快速实现网络互通。 1.宿主机创建 tap0 [rootlocalhost ~]# if…

一文入门Mongodb

目录 概述核心概念下载与安装版本问题环境配置cmd运行 数据库与集合命令数据库命令集合命令文档命令 mongoosemongoose的使用插入字段类型mongoose字段验证与强制性设置删除文档更新文档读取数据条件控制 后记 概述 Mongodb是一个分布式文件存储的数据库。 官网:M…

使用 AI 修复去除不需要的对象

Inpainting 是一种运用了稳定扩散(Stable Diffusion)技术来部分重绘图像的方法。简单来讲需准备一张图像,绘制一块遮罩以标明想要重绘的图像区域,同时提供一些重绘提示。随后稳定扩散就能根据这些提示,重新绘制遮罩区域…

layui(5)——内置模块分页模块

模块加载名称&#xff1a;laypage laypage 的使用非常简单&#xff0c;指向一个用于存放分页的容器&#xff0c;通过服务端得到一些初始值&#xff0c;即可完成分页渲染&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset&quo…

聊一聊mysql的MVCC

技术主题 在mysql世纪使用中&#xff0c;经常涉及到MVCC的概念&#xff08;Multi-Vsersion Concurrency Control&#xff09;&#xff0c;即多版本并发控制&#xff0c;一种并发控制方法&#xff0c;根本目的是主为了提升数据库的并发性能。 mvcc为什么产生 数据库最原生的锁…

设计模式大全

使用设计模式的目的&#xff1a; 程序猿在编码的过程中面临着来自耦合性、内聚性、可维护性、可扩展性、重用性、灵活性等多方面的挑战。设计模式是为了让程序具有更好的&#xff1a; 1&#xff09;重用性&#xff0c;即相同功能的代码编写一次即可&#xff0c;不用重复编写 …

3-JVM 运行时数据区

目录 1.堆&#xff08;线程共享&#xff09;&#xff08;最大的一块区域&#xff09; 2.Java虚拟机栈&#xff08;线程私有&#xff09; 3.本地方法栈&#xff08;线程私有&#xff09; 4.程序计数器&#xff08;线程私有&#xff09; 5.方法区&#xff08;线程共享&#…

Oracle JSON_ARRAYAGG()函数的默认排序问题

引入&#xff1a; 在实际操作中&#xff0c;俺写了这样一个Funtcion&#xff1a; FUNCTION fun_get_xxx(v_param_one VARCHAR2) RETURN CLOB ASv_OUTPUT CLOB;BEGINWITH temp_table AS (SELECT * FROM (( SELECT one.action_id,two.log_timeFROM table_one oneLEFT JOIN table…

Python程序设计基础:字符串

文章目录 一、字符串二、字符串的索引与切片三、字符串处理与操作四、format()格式化方法五、字符串与数值的转换 一、字符串 在Python中&#xff0c;使用单引号或双引号括起来的内容&#xff0c;称为字符串类型数据&#xff08;str&#xff09;&#xff0c;可以使用以下4种方…

Linux主分区,扩展分区,逻辑分区的联系和区别

基本概念 硬盘分区有三种&#xff0c; 主磁盘分区、扩展 磁盘分区、 逻辑分区。 一个 硬盘 主分区至少有1个&#xff0c;最多4个&#xff0c;扩展分区可以没有&#xff0c;最多1个。且 主分区扩展分区总共不能超过4个。 逻辑分区可以有若干个。 在windows下激活的 主分区是 …