TCP的三次握手和四次挥手 | 查看网络状态

news2024/11/20 20:19:33

三次握手和四次挥手是在计算机网络中用于建立和终止TCP连接的协议。这两个过程是TCP协议的重要组成部分,确保数据的可靠传输。

三次握手指的是在客户端和服务器之间建立连接时的步骤。具体流程如下:

  1. 客户端向服务器发送一个连接请求报文段(SYN)。
  2. 服务器收到请求后,回复一个确认报文段(SYN+ACK),表示可以建立连接。
  3. 客户端收到服务器的确认后,再次发送一个确认报文段(ACK),表示连接已建立。

通过这个三次握手的过程,双方确认了彼此的存在,并同意建立连接。这样,在数据传输过程中就能够确保双方之间的通信正常。

四次挥手指的是在客户端和服务器之间关闭连接时的步骤。具体流程如下:

  1. 客户端向服务器发送一个关闭连接请求报文段(FIN)。
  2. 服务器收到请求后,回复一个确认报文段(ACK),表示已收到客户端的关闭请求。
  3. 服务器执行完当前的数据传输任务后,发送一个关闭连接请求报文段(FIN)给客户端。
  4. 客户端收到服务器的关闭请求后,回复一个确认报文段(ACK)。双方都确认关闭连接。

通过这个四次挥手的过程,双方在关闭连接时相互通知,确保数据传输的完整性和正常关闭。

三次握手和四次挥手的设计是为了保证数据传输的可靠性。通过握手过程,双方建立了可靠的连接;通过挥手过程,双方能够安全地关闭连接,避免数据的丢失或不完整。这些步骤是TCP协议的基础,也是网络通信中重要的一环。

三次握手

在这里插入图片描述
在这里插入图片描述
运行服务端测试程序,服务端socket进入监听状态。
netstat -na|less 命令可以查看网络状态:
在这里插入图片描述
可以看到5005的口在LISTEN状态。
运行客户端的程序,重新在服务端的主机上查看。
在这里插入图片描述
可以看到131的外部地址端口为47856,132的本地地址宽口为5005。
socket包含两部分,IP地址和端口。
对服务端来说,端口是固定的设置的,这样客户端才能连上来,客户端的端口是随机分配的(不关心)。
客户端的网络状态:
在这里插入图片描述
握手过程:
在这里插入图片描述

三次握手是在TCP/IP协议中用于建立可靠的连接的过程。它由客户端和服务器之间的交互组成,确保双方都愿意进行通信,并且同步初始序列号。

以下是详细的三次握手过程:

  1. 第一步:客户端发送SYN请求

    • 客户端向服务器发送一个SYN(同步)请求包,其中包含随机生成的初始序列号(ISN)。这个序列号用于后续通信中标识数据包的顺序。
    • 客户端还设置了一个SYN标志位来表示这是一个连接请求。
  2. 第二步:服务器回应SYN-ACK

    • 服务器收到客户端的SYN请求后,如果接受连接,会向客户端发送一个SYN-ACK(同步-确认)响应包。
    • 服务器为自己生成一个随机的初始序列号(ISN),并将客户端的初始序列号加一作为确认号(ACK)发送给客户端。
    • 服务器同时设置SYN和ACK标志位,表示既同步又确认。
  3. 第三步:客户端发送ACK确认

    • 客户端收到服务器的SYN-ACK响应后,检查其中的确认号是否正确,并向服务器发送一个ACK(确认)包作为响应。
    • 客户端将服务器的初始序列号加一作为确认号发送给服务器,同时设置ACK标志位来表示确认操作。

这样,三次握手完成,客户端和服务器都知道对方愿意进行通信,并且双方的初始序列号也已经同步。数据传输阶段可以开始了。

需要注意的是,三次握手过程中可能会出现超时、网络延迟等情况,导致握手失败或延迟。而且,由于网络的不可靠性,即使完成了三次握手,仍然有可能出现丢包或重复包的情况,TCP协议通过序列号和确认号以及重传机制来处理这些问题。
在这里插入图片描述

四次挥手

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四次挥手是TCP连接的关闭过程,由发起方和接收方共同完成。以下是四次挥手的详细介绍:

  1. 发起方(客户端)发送关闭连接请求:
    客户端首先向服务器发送一个FIN(Finish)包,表示希望关闭连接。这个包的序列号是X。

  2. 接收方(服务器)确认关闭连接请求:
    服务器接收到关闭连接请求后,会向客户端发送一个ACK(Acknowledgment)包,表示已经收到了关闭请求,并且准备关闭连接。这个ACK包的确认号是X+1。

  3. 接收方发送关闭连接请求:
    服务器发送完ACK包后,会进入CLOSE_WAIT状态,等待自己的应用程序结束数据传输。当应用程序结束后,服务器会向客户端发送一个FIN包,表示自己也准备关闭连接。这个FIN包的序列号是Y。

  4. 发起方确认关闭连接请求并关闭连接:
    客户端接收到服务器端发送的FIN包后,会发送一个ACK包作为确认,表示已经接收到关闭请求,并准备关闭连接。这个ACK包的确认号是Y+1。客户端发送完ACK包后,进入TIME_WAIT状态,等待一段时间后关闭连接。

在四次挥手过程中,有两个阶段需要等待一段时间。一个是服务器端等待应用程序结束数据传输的CLOSE_WAIT状态,另一个是客户端在TIME_WAIT状态下等待一段时间。这是为了确保网络中所有的数据包都已经传输完毕,以防止后续的重复连接。

总结起来,四次挥手过程是:
客户端发送FIN,服务器发送ACK;
服务器发送FIN,客户端发送ACK;
其中,FIN表示关闭连接请求,ACK表示确认收到请求。这样双方就完成了TCP连接的关闭。

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

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

相关文章

0201sherlock(福尔摩斯)-通过名称寻找媒体账号(地址)-github-开源项目学习

文章目录 一 项目简介二 项目安装和演示1 安装2 演示 三 源码分析1 项目结构2 主程序源代码分析 四 添加自定义网址结语 一 项目简介 二 项目安装和演示 1 安装 # clone the repo $ git clone https://github.com/sherlock-project/sherlock.git# change the working direct…

推荐几款优秀免费开源的导航网站

🦩van-nav 项目地址:van-nav项目介绍:一个轻量导航站,汇总你的所有服务。项目亮点:全平台支持,单文件部署,有配套浏览器插件。效果预览 🦩发现导航 项目地址:nav项目…

【开源项目】自动字幕生成和字幕翻译

文章目录 1. 安装ffmpeg2. 克隆项目3. 配置项目运行环境4. 填写配置文件5. 运行项目(仅使用CPU) 项目地址:Github - qinL-cdy/auto_ai_subtitle 项目原理:使用ffmpeg提取视频的音频,使用whisper将音频转写为字幕&#…

消息中间件之RocketMQ源码分析(二十三)

Broker的关机恢复机制 概述 Broker关机恢复是指恢复CommitLog、Consume Queue、Index File等数据文件。Broker关机分为正常调用命令关机和异常被迫进程终止关机两种情况。恢复过程的设计目标是使正常停止的进程实现零数据丢失,异常停止的进程实现最少量的数据丢失…

Python:练习:输出int值a占b的百分之几。例如:输入1和4,输出:25%。

案例: 输出int值a占b的百分之几。例如:输入1和4,输出:25%。 思考: 所有的一步步思考,最后综合起来。 首先,确定 输出,那么就用input,而且是int值,所以肯定…

javaee教程郑阿奇,一线互联网架构师筑基必备技能之Java篇

一、什么情况下会发生栈内存溢出? 1、栈是线程私有的,栈的生命周期和线程一样,每个方法在执行的时候就会创建一个栈帧,它包含局部变量表、操作数栈、动态链接、方法出口等信息,局部变量表又包括基本数据类型和对象的引…

【Kubernetes】安装K3S

目录 前言一、原理单体架构高可用架构 二、初始化1.配置yum源2.关掉防火墙3.关掉selinux4. 修改内核参数5.关掉swap交换分区 三、安装master节点1. 安装container2.启动master服务 四、安装node节点五、卸载六、总结 前言 各位小伙伴们,大家好,小涛又来…

【MATLAB源码-第149期】基于MATLAB的2ASK,2FSK,2PSK,2DPSK等相干解调仿真,输出各节点波形。

操作环境: MATLAB 2022a 1、算法描述 2ASK(二进制幅移键控)、2FSK(二进制频移键控)、2PSK(二进制相移键控)和2DPSK(二进制差分相移键控)是数字调制技术中的基本调制方…

1.2 debug的六种指令的使用,四个通用寄存器

汇编语言 首先进入环境 mount c d:masm //把c挂载在d盘中的masm当中 c: //进入c,进入到编译环境 dir //查看文件,可有可无Debug是DOS、Windows都提供的实模式(8086 方式)程序的调试工具。使用它可以查看CPU各种寄存器中的内容…

同芯.共赢 | 暴雨服务器亮相AMD EPYC合作伙伴峰会

2月29日,AMD EPYC合作伙伴峰会活动在北京成功举行,暴雨作为AMD重要生态合作伙伴应邀参加。作为AMD开年首场活动,此次活动意义非凡,AMD在现场向合作伙伴分享了AMD数据中心全新产品路线、解决方案以及生态建设领域的最新进展。 AMD是…

centos服务配置springboot服务开机启动

在做后端服务运维时,经常遇到服务器重启时,需要移动一堆后端服务。服务器故障自动重启时,通常无人通知。把springboot服务的jar包配置开机启动太有必要了,虽然不是很复杂,这里记录一下太有必要了。 创建jar包启动和停…

linux下gcc编译时默认是32位还是64位,怎么指定为32or64?

本来是想研究一下long的字节大小sizeof(long)&#xff0c;于是写了代码&#xff1a; #include <stdio.h> int main() {long a 10;printf("%d\n", sizeof(a));return 0; } 我当时使用的是win10系统&#xff0c;使用的是vs 2022&#xff0c;然后对以上代码进行…

嵌入式 Linux 下的 LVGL 移植

目录 准备创建工程修改配置修改 lv_drv_conf.h修改 lv_conf.h修改 main.c修改 Makefile 编译运行更多内容 LVGL&#xff08;Light and Versatile Graphics Library&#xff0c;轻量级通用图形库&#xff09;是一个轻量化的、开源的、在嵌入式系统中广泛使用的图形库&#xff0c…

【刷题】 Leetcode 1022.从根到叶的二进制数之和

刷题 1022.从根到叶的二进制数之和题目描述&#xff1a;思路一&#xff08;dfs深搜万能版&#xff09;思路二 &#xff08;栈迭代巧解版&#xff09;总结 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff…

Qt6.8 GRPC功能使用(2)标准 Qt实现客户端

简介 基于之前的文章所说&#xff0c; Qt6.7之后才开始支持客户端、服务端、及双向流&#xff0c;恰好电脑需要重装&#xff0c;看到Qt6.8版本就直接安装了&#xff0c;内容也是使用Qt6.8的版本进行编译的 客户端实现步骤 1. 安装Qt6.8, 包含GRPC功能模块 Qt 6.8安装目录下包…

浅谈XSS简单漏洞xss-labs-master(初级)

一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介&#xff1a; 当用户访问被XSS注入的网页&#xff0c;XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码&#xff0c;也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网&#xff0c;并且浏览器中有J…

ai作画在线生成!这8个AI生图工具一定要知道。

过去的2023年被称作AI元年&#xff0c;随之而来的2024&#xff0c;被业内人士称之为AI应用元年&#xff0c;即随着大模型和各类AI应用的涌现速度放缓&#xff0c;人们关注的焦点也从产品层面&#xff08;有哪些好用的AI应用&#xff09;&#xff0c;转移到AI如何更好地赋能实际…

Go开发 入门以VSCode为例

一、Go环境搭建 1.1 安装 进入Golang官网 https://go.dev&#xff0c;点击 Download 若无法打开网页可以使用国内的Go语言中文网 https://studygolang.com/dl 进入下载 找到合适的平台点击链接下载即可&#xff08;这里以Windows距离&#xff09; 下载完成后 Next Next 安…

33. 【Linux教程】Linux 用户组

前面小节介绍了 Linux 用户相关的增删改查&#xff0c;本小节介绍 Linux 用户组&#xff0c;Linux 系统中采取了一种安全机制&#xff08;即用户组&#xff09;&#xff0c;用户组可以允许多个 Linux 用户共享同一种权限。 1. 用户组介绍 Linux 是多任务多用户的操作系统&…

Android Studio level过滤查看各个等级的日志

Android Studio level过滤查看各个等级的日志 旧版as可以在下方的日志输出框选择debug、info&#xff0c;warn、error日志&#xff0c;新版的需要通过在过滤框手动/联想输入 level:xxx&#xff0c;过滤相应等级的日志&#xff0c;如图&#xff1a; android studio/idea返回/前进…