软件测试|TCP三次握手四次挥手

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 软件测试|TCP三次握手四次挥手

TCP为什么要进行三次握手和四次挥手呢?

在这个三次握手的过程中对应的消息内容是怎样进行传递的呢?

在四次挥手的过程中,是怎样告知对方断开连接的呢?

概念

三次握手

在说对应概念之前,我们先来了解一个场景:

场景

无论是工作还是没有工作的小伙伴,肯定都见过或经历过表白事件。那如果想要进行一次表白或者求婚,我们需要怎么做?

无论是表白、求婚都需要有对应的人,当然不只能有这个人,还需要和这个人建立一个连接。

不能说你自己把自己关在屋子里面自言自语的说,你能嫁给我吗?对方都没有听到你说的话,怎么会做出反应呢?

所以,最好是两个人面对面,才可以让对方听到到自己要说的话。约出来,面对面,就开始进行表白:

在这里插入图片描述

当然这种关系都是双方是能面对面找到对方的,即都是保持双方畅通的。

对应为TCP协议的三次握手如下图:

在这里插入图片描述

(1)第一次握手

Client请求与Server端建立连接。

这里只是 尝试的请求建立连接,A到B的连接 是否建立成功不知道

(2)第二次握手

Server在收到 Client 的请求后,响应ACK 报文 并分配资源。

这里B给A的ACK报文就表示 Server同意 Client 跟它建立连接。

SYN表示Server也想尝试 Client 建立连接,此时ServerClient 的连接是否建立还不确定。

(3)第三次握手

ClientServer发送ACK响应。在Server收到 Client的响应之后,此时双方的连接正式建立。

四次挥手

在说对应挥手概念之前,我们先来了解一个场景:

场景

还是和上面场景有关,结婚了然后在一起共同生活了一段时间后,发现双方不合适,需要离婚,要离开对方,就是挥手告别。那这个时候要经历的场景是什么呢?

在这里插入图片描述

对应为TCP协议的四次挥手如下图:

在这里插入图片描述

(1)第一次挥手

客户端发送FIN给服务端,尝试请求断开单方的连接。

此时单方连接断开与否还不能确定,要等服务端确认,因此此时的客户端处于FIN_WAIT1状态。

(2)第二次挥手

服务端收到断开请求后,服务端向客户端发送ACK回应,表示能断开了。

此时只是客户端到服务端连接断开,处于半断开状态。

服务端状态为:CLOSE_WAIT

(3)第三次挥手

服务端给客户端发送FIN请求,此时服务端处于最后一次确认状态(LAST_ACK状态)。

此时还是没有断开连接,还得等待客户端回应。

(4)第四次挥手

客户端给服务端发送ACK回应。服务端收到之后,此时连接真正断开。

疑问点

  1. 为什么不是两次握手?为什么要三次?

因为真正连接的建立是要双方都建立到对方的连接。

如果只有两次握手,只能保证A到B的连接建立,但是B到A连接还未确认,所以第三次握手的主要作用就是A给B发送数据,如果没有第三次握手,A就不会发送数据,此时B的状态一直为等待,造成的现象就是浪费资源。

  1. 为什么要进行四次挥手?为什么三次不行?

因为在挥手过程中会传递相关数据。其中,ACK报文是用来的应答的,SYN报文是用来同步的。

在B收到A的FIN请求后,不会立即关闭SOCKET,会先发送一个ACK作为回应。所以A需要等B的数据发送完成之后,B会再给A发送一个FIN请求告诉A已经结束了,此时B发送给A的两次请求不能合并,所以必须是四次挥手。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
网络协议 安全 测试技术
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
132 2
|
3月前
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
291 1
|
3月前
|
网络协议 Windows
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
732 2
|
5月前
|
缓存 网络协议 Ubuntu
ubuntu 网卡网速测试bondnetperf测试优化tcp
ubuntu 网卡网速测试bondnetperf测试优化tcp
138 3
|
5月前
|
网络协议 Linux Windows
测试端口是否开放 tcp端口 udp端口 测试服务器端口连通性
测试端口是否开放 tcp端口 udp端口 测试服务器端口连通性
90 0
|
缓存 网络协议 安全
TCP通信机制:三次握手、四次挥手、滑动窗口
TCP通信机制:三次握手、四次挥手、滑动窗口
779 1
TCP通信机制:三次握手、四次挥手、滑动窗口
|
缓存 网络协议 安全
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
|
网络协议
TCP/UDP相关-三次握手四次挥手以及为什么三次握手-如何实现可靠UDP传输
TCP/UDP相关-三次握手四次挥手以及为什么三次握手-如何实现可靠UDP传输
151 0
|
网络协议
TCP三次握手与四次挥手
TCP三次握手与四次挥手
159 0
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3