TCP的四次挥手与TCP状态转换

文章目录

    • 四次挥手场景
    • 步骤
    • TCP状态转换

四次挥手场景

TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。

客户端和服务端都可以主动发起。

因TCP连接时候是双向的,所以断开的时候也是双向的。

步骤

在这里插入图片描述
三次挥手可以吗?可以是可以,和状态有关。
四次挥手是用于客户端和服务器断开连接的时候,可以由客户端或者服务器任一方主动发起断开请求。
第一次挥手主动方发起,如客户端发起断开连接请求,服务器同意请求但还有数据发送的时候,可以继续发送,当服务器想断开连接的时候进行第三次挥手,发送断开连接请求,然后客户端应答。

三次握手为什么是三次不是四次?
三次握手由客户端主动发起,客户端请求连接的时候,服务器若不同意直接拒绝,若同意说明肯定也要请求和客户端建立连接,所以同意和请求连接一起传输,进行第二次握手,然后客户端同意服务器请求进行第三次握手。

在这里插入图片描述

TCP状态转换

在这里插入图片描述
在这里插入图片描述
等2MSL目的是确保另一方收到同意断开请求,被动方发送FIN后没有收到ACK会重传FIN,直到收到ACK。

在这里插入图片描述

握手与挥手/状态ClientServer
LISTEN
第一次握手SYN_SENT–>LISTEN->SYN_RCVD
第二次握手SYN_SENT->ESTABLISHED<–SYN_RCVD
第三次握手ESTABLISHED–>SYN_RCVD->ESTABLISHED
数据传输
第一次挥手->FIN_WAIT_1–>CLOSE_WAIT
第二次挥手FIN_WAIT_1->FIN_WAIT_2<–CLOSE_WAIT
第三次挥手TIME_WAIT<–CLOSE_WAIT->LAST_ACK
第四次挥手TIME_WAIT–>LAST_ACK

注意:

  • 连接三次握手主动发起方需要是客户端。
  • 断开连接请求的四次挥手主动发起方可以是客户端或者服务器的任一方。

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

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

相关文章

END-TO-END、SCALE HYPERPRIOR、Checkerboard梳理总结

8.9-8.15学习汇报 阅读《END-TO-END OPTIMIZED IMAGE COMPRESSION》、《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》、《Checkerboard Context Model for Efficient Learned Image Compression》 传统的图像或视频压缩方法通常分为多个步骤&#xff0c;包括变换…

【软件测试】Linux系统下安装jdk配置环境变量(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、安装环境 操作…

CentOS-6.3安装MySQL集群

安装要求 安装环境&#xff1a;CentOS-6.3 安装方式&#xff1a;源码编译安装 软件名称&#xff1a;mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 下载地址&#xff1a;http://mysql.mirror.kangaroot.net/Downloads/ 软件安装位置&#xff1a;/usr/local/mysql 数据存放位…

贝锐蒲公英:快速搭建连锁门店监控体系,赋能企业高效管理

随着国民生活水平的提高和零售场景的变革&#xff0c;消费者对于餐饮类目的消费支出不断增加&#xff0c;线下社区生鲜商超作为下沉市场最主要的消费场景之一&#xff0c;蕴藏着巨大价值机会。 对于线下连锁生鲜超市而言&#xff0c;连锁门店多、员工多&#xff0c;门店管理时会…

Java多线程编程中的线程死锁

Java多线程编程中的线程死锁 ​ 在多线程编程中&#xff0c;线程死锁是一种常见的问题&#xff0c;它发生在两个或多个线程互相等待对方释放资源的情况下&#xff0c;导致程序无法继续执行。本文将介绍线程死锁的概念、产生原因、示例以及如何预防和解决线程死锁问题。 线程死…

VBA 学习笔记1 对象以及属性

目录 1 取得VBA对象1.1 取得工作簿对象1.2 取得工作表对象1.3 取得单元格对象1.4 取得对象的属性1.5 文档的方法1 进入vba 界面 方式之一&#xff1a; 快捷键&#xff1a;ALTERF11 运行方式之一&#xff1a; 进入vba界面&#xff0c;点击绿色三角符号 1 取得VBA对象 1.1 取得…

函数(1)

1. 函数是什么&#xff1f; 数学中我们常见到函数的概念。但是你了解C语言中的函数吗&#xff1f; 维基百科中对函数的定义&#xff1a;子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, …

数据结构-队列的实现(C语言版)

前言 队列是一种特殊的线性表&#xff0c;它只允许在一端对数据进行插入操作&#xff0c;在另一端对数据进行删除操作的特殊线性表&#xff0c;队列具有先进先出的&#xff08;FIFO&#xff09;的 特性&#xff0c;进行插入操作的一端称为队尾&#xff0c;进行删除操作的一端称…

simulink学习笔记:基于模型的控制和pid整定

在学习的时候发现了一个很好的学习simulink的网站&#xff0c;打算来练练手&#xff1a;Introduction: Simulink Control&#xff0c;过程中会涉及到搭建动力学模型和设计pid控制器&#xff08;整定pid参数&#xff09;。该模型描述的是火车的两节车厢&#xff0c;对前一节车厢…

Python学习笔记_基础篇_初识python

Python简介 python的创始人为吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;。1989年的圣诞节期间&#xff0c;吉多范罗苏姆为了在阿姆斯特丹打发时间&#xff0c;决心开发一个新的脚本解释程序&#xff0c;作为ABC语言的一种继承。 Python和其他语言的对比&#xff…

Android AOSP源码编译——AOSP整编(二)

切换到源码目录下执行下面命令 1、初始化环境 . build/envsetup.sh //清除缓存 make clobber2、选择编译目标 lunchAOSP 预制了很多 Product。这里为了简单我们先不用真机&#xff0c;而是选择模拟器的方式&#xff0c;对于 x86_64 模拟器&#xff0c;我们选择的是 aosp_x86…