服务器TCP连接的状态与并发性的探究

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:  最近在研究学习服务器并发性方面的相关资料,运维工程师在探讨服务器并发性时就不可避免的需要了解和掌握TCP/IP协议相关的知识。比如我们会经常使用命令netstat查看服务器并发情况时但是运维人员对tcp的返回状态了解多少,我们又是该怎样计算当前服务器并发数量?所以作为运维工程师有必要深入了解tcp相关协议的实现原理和机制。
  最近在研究学习服务器并发性方面的相关资料,运维工程师在探讨服务器并发性时就不可避免的需要了解和掌握TCP/IP协议相关的知识。比如我们会经常使用命令netstat查看服务器并发情况时但是运维人员对tcp的返回状态了解多少,我们又是该怎样计算当前服务器并发数量?所以作为运维工程师有必要深入了解tcp相关协议的实现原理和机制。废话不说了,还是聊一聊今天的正题吧

一、TCP与服务器并发的关系

TCP是一个面向连接的协议TCP连接的建立需要三次握手,而连接的中止则需要四次握手。应用层通过TCP协议栈进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务(其实在实际应用中我们只需通过源主机的IP和端口号码区别出不同的会话)。这也就是为什么各种TCP服务器都有一个最大连接数限制的原因。

二、TCP可能存在的11种状态如下:

LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT
:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED
:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED
:代表一个打开的连接
FIN-WAIT-1
:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2
:从远程TCP等待连接中断请求
CLOSE-WAIT
:等待从本地用户发来的连接中断请求
CLOSING
:等待远程TCP对连接中断的确认
LAST-ACK
:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT
:等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:没有任何连接状态

三、TCP状态转换图:


上图描述了
TCP 11种状态的转换关系,图中的圆角矩形表示状态,箭头表示状态之间的转换。图中用粗线表示客户端主动和被动的服务器端建立连接的正常过程:客户端的状态变迁用粗实线,服务器端的状态变迁用粗虚线。细线用于不常见的序列,如复位、同时打开、同时关闭等。图中的每条状态变换线上均标有事件/动作:事件是指用户执行了系统调用( CONNECT LISTEN SEND CLOSE )、收到一个报文段( SYN FIN ACK RST )、或者是出现了超过两倍最大的分组生命期的情况;动作是指发送一个报文段( SYN FIN ACK )或什么也没有(用表示)。粗实线表示客户的正常路径;粗虚线表示服务器的正常路径;细线表示不常见的事件。每个连接均开始于 CLOSED 状态。当一方执行了被动的连接原语( LISTEN )或主动的连接原语( CONNECT )时,它便会脱离 CLOSED 状态。如果此时另一方执行了相对应的连接原语,连接便建立了,并且状态变为 ESTABLISHED 。任何一方均可以首先请求释放连接,当连接被释放后,状态又回到了 CLOSED

一)、正常状态转换介绍
   我们用上图显示正常的 TCP 连接的建立与终止过程中,客户与服务器所经历的不同状态。

  1. 服务器端首先执行 LISTEN 原语进入被动打开状态( LISTEN ),等待客户端连接;
  2. 当客户端的一个应用程序发出 CONNECT 命令后,本地的 TCP 实体为其创建一个连接记录并标记为 SYN SENT 状态,然后给服务器发送一个 SYN 报文段;
  3. 服务器收到一个 SYN 报文段,其 TCP 实体给客户端发送确认 ACK 报文段同时发送一个 SYN 信号,进入 SYN RCVD 状态;
  4. 客户端收到 SYN + ACK 报文段,其 TCP 实体给服务器端发送出三次握手的最后一个 ACK 报文段,并转换为 ESTABLISHED 状态;
  5. 服务器端收到确认的 ACK 报文段,完成了三次握手,于是也进入 ESTABLISHED 状态。

在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭 TCP 连接。假设仍由客户端发起主动关闭连接。

1)  客户端执行 CLOSE 原语,本地的 TCP 实体发送一个 FIN 报文段并等待响应的确认(进入状态 FIN WAIT 1 );

2)  服务器收到一个 FIN 报文段,它确认客户端的请求发回一个 ACK 报文段,进入 CLOSE WAIT 状态;

3)  客户端收到确认 ACK 报文段,就转移到 FIN WAIT 2 状态,此时连接在一个方向上就断开了;

4)  服务器端应用得到通告后,也执行 CLOSE 原语关闭另一个方向的连接,其本地 TCP 实体向客户端发送一个 FIN 报文段,并进入 LAST ACK 状态,等待最后一个 ACK 确认报文段;

5)  客户端收到 FIN 报文段并确认,进入 TIMED WAIT 状态,此时双方连接均已经断开,但 TCP 要等待一个 2 倍报文段最大生存时间 MSL Maximum Segment Lifetime ),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后, TCP 删除该连接记录,返回到初始状态( CLOSED )。

6)  服务器收到最后一个确认 ACK 报文段,其 TCP 实体便释放该连接,并删除连接记录,返回到初始状态( CLOSED )。

二)、同时打开和同时关闭等状态

同时打开和同时关闭则是两种特殊的TCP状态,发生的概率很小在此不再赘述。如有兴趣的同学可以弄本tcp/ip原理方面的书看看!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
12天前
|
域名解析 网络协议 数据库
TCP/IP服务器
【10月更文挑战第20天】TCP/IP服务器
111 65
|
21天前
|
IDE 网络安全 开发工具
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
本文介绍了如何使用VS Code通过Remote-SSH插件连接远程服务器进行代码开发,并与PyCharm进行了对比。作者认为VS Code在连接和配置多个服务器时更为简单,推荐使用VS Code。文章详细说明了VS Code的安装、远程插件安装、SSH配置文件编写、服务器连接以及如何在连接后切换文件夹。此外,还提供了使用密钥进行免密登录的方法和解决权限问题的步骤。
182 0
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
|
22天前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
184 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
30天前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
57 2
|
30天前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
49 2
|
30天前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
56 1
|
19天前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
21天前
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
|
19天前
|
弹性计算 网络安全
阿里云国际OpenAPI多接口快速管理ECS服务器教程
阿里云国际OpenAPI多接口快速管理ECS服务器教程
|
2天前
|
弹性计算
阿里云2核16G服务器多少钱一年?亲测价格查询1个月和1小时收费标准
阿里云2核16G服务器提供多种ECS实例规格,内存型r8i实例1年6折优惠价为1901元,按月收费334.19元,按小时收费0.696221元。更多规格及详细报价请访问阿里云ECS页面。
29 9