23-LINUX--TCP连接状态

一.TCP服务的特点

        传输层协议主要有两个:TCP 协议和 UDP协议。TCP 协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。
        使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP 连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。
        TCP协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用 TCP 服务。而无连接协议 UDP则非常适合于广播和多播。       

        TCP 模块先将这些数据放入 TCP 发送缓冲区中。当TCP 模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个TCP报文段发出。因此,TCP模块发送出的TCP报文段的个数和应用程序执行的写操作次数之间没有固定的数量关系。
        当接收端收到一个或多个TCP报文段后,TCP模块将它们携带的应用程序数据按照TCP报文段的序号(见后文)依次放人TCP接收缓冲区中,并通知应用程序读取数据。接收端应用程序可以一次性将 TCP接收缓冲区中的数据全部读出,也可以分多次读取,这取决于用户指定的应用程序读缓冲区的大小。因此,应用程序执行的读操作次数和TCP 模块接收到的TCP报文段个数之间也没有固定的数量关系。
        综上所述,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这就易字节流的概念:应用程序对数据的发送和接收是没有边界限制的。UDP则不然。发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP 数据报并发送之。接收端必须及时针对每一个 UDP 数据报执行读操作(通过 recvfrom 系统调用),否则就会丢包(这经常发生在较慢的服务器上)。并且,如果用户没有指定足够的应用程序缓冲区来读取UDP 数据,则 UDP数据将被截断。
下图显示了TCP字节流服务和 UDP 数据报服务的上述区别。两图中省略了传输层以下的通信细节。

        TCP传输是可靠的。首先,TCP协议采用发送应答机制,即发送端发送的每个TCP报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功。其次,TCP协议采用超时重传机制,发送端在发送出一个 TCP 报文段之后启动定时器,如果在定时时间内未收到应答,它将重发该报文段。最后,因为TCP 报文段最终是以 IP 数据报发送的,而IP 数据报到达接收端可能乱序、重复,所以TCP协议还会对接收到的TCP 报文段重排、整理,再交付给应用层。UDP 协议则和P协议一样,提供不可靠服务。它们都需要上层协议来处理数据确认和超时重传。

二.TCP状态转移

1.TCP连接的任意一段在任意时刻都处于某种状态,可以通过netstat命令查看。

2.状态转换

        我们先讨论服务器的典型状态转移过程,此时我们说的连接状态都是指该连接的服务器端的状态。
        服务器通过listen 系统调用(见第5章)进人LISTEN 状态,被动等待客户端连接,因此执行的是所谓的被动打开。服务器一旦监听到某个连接请求(收到同步报文段),就将该连接放入内核等待队列中,并向客户端发送带SYN标志的确认报文段。此时该连接处于SYN_RCVD状态。如果服务器成功地接收到客户端发送同的确认报文段,则该连接转移到 ESTABLISHED 状态。ESTABLISHED 状态是连接双方能够进行双向数据传输的
状态。
        当客户端主动关闭连接时(通过 close 或 shutdown 系统调用向服务器发送结束报文段),
服务器通过返回确认报文段使连接进人CLOSE WAIT状态。这个状态的含义很明确:筝待服务器应用程序关闭连接。通常,服务器检测到客户端关附连接后,也企立即纷客户端发送一个结来报文段来关闭连接。这将使连接转移到 LAST ACK状态,以等待客户端对绡束报文段的最后一次确认。一旦确认完成,连接就彻底关闭了。
        下面讨论客户端的典型状态转移过程,此时我们说的连接状态都是指该连接的然户端的状态。
        客户端通过 connect 系统测用(见第5章)上动与服务器建立连接。connect 系统测用首先给服务器发送一个同必报义段,使连接转移到 SYN SENT 状态。此后、connect 系统测用可能因为如下两个原因返回:

        1. 如果conmcct连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME WAIT 状态的连接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect 调用失败。
        2.如果目标满口存在,但conncct在超时时间内未收到服务器的确认报文段,则 connect
调用失败
        connect调用失败将使连接立即返回到初始的 CLOSED 状态。如果客户端成功收到服务器的同步报文段和确认,则 conncct 调用成功返回,连接转移至 ESTABLISHED状态。
        当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN WAIT_1状态。若此时客户端收到服务器专门用于确认目的的确认报文段(比如图3-6中的TCP报文段S),则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接(发送结束报文段),则客户端将给予确认并进人 TIME_WAIT 状态。
        下图还给出了客户猫从FIN_WAIT_1状态直接进人 TIME WAIT状态的一条线路(不经过FIN_WAIT_2状态?前提是处于 FIN_WAIT_I状态的服务器直接收到带确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段)。这种情况对应于图3-6中的服务
器不发送 TCP报文段 5.
        前面说过,处于FIN_WAIT_2状态的客户端优要等待服务器发送结束报文段,才能转移至 TIME WAIT 状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在 FIN_WAIT_2状态并无益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核来接管,称之为孤儿连接(和孤儿进程类似)。

三.TIME_WAIT状态

TIME_WAIT状态存在的原因:

1.可靠的终止TCP连接

2.保证延迟到来的TCP报文段有足够的时间被识别丢弃

  1. 在断开连接的过程中,被断开方需要发送给主动断开方FIN报文,来说明被动方要断开连接,主动断开方收到FIN后需要发送确认ACK给被动断开方。若没有ACK被弄丢或者延迟,被动方没有收到ACK 会重复发送FIN,需要进行确认,但若没有TIME_WAIT状态,没有确认,被断开一方不会被注销
  2. 客户端给服务器发一个报文,报文发出去后,服务器端断开,报文若延迟,需要有TIME_WAIT来收取这些属于自己的延迟报文。

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

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

相关文章

lammps案例:reaxff势模拟Fe(OH)3高温反应过程

大家好,我是小马老师。 本文分享一个reaxff反应势的案例。 该案例主要模拟Fe(OH)3在高温下的反应过程,主要代码来自lammps自带的案例。 lammps自带案例没有产物输出,故在此基础上稍加修改,增加了产物输出命令。 反应过程如下图…

解读大模型应用的可观测性

一、引言 随着人工智能技术的飞速发展,大模型作为AI领域的重要分支,正日益成为科技竞争的新高地。大模型通过输入大量语料进行训练,赋予计算机拥有像人类一样的“思考”能力,使其能够理解文本、图片、语音等内容,并进…

JavaWeb开发 3.Web开发 Web前端开发 ③ HTML、CSS

没有一朵花,一开始就是一朵花 —— 24.5.28 HTML、CSS知识在博主前端专栏,可以对照博客大致进行了解 https://blog.csdn.net/m0_73983707/category_12654678.htmlhttps://blog.csdn.net/m0_73983707/category_12654678.html

5. CSS的边框和阴影

第5章 边框与阴影 CSS3 为开发者提供了强大的工具,使得我们可以更容易地为网页元素添加视觉效果。这一章将详细介绍边框和阴影的新特性,包括如何使用圆角边框、边框图像、盒阴影和文本阴影,并展示一些实际应用的例子。 5.1 圆角边框&#x…

232转Profinet网关接扫码枪与PLC通讯在物流分拣线上的应用

一、背景 随着生活节奏的加快,网络购物需求非常大,从而造成快递站需要快速提取快递信息已达到快速出站的效果,这就用到了扫码枪,扫码枪作为采集设备,能够迅速准确地读取货物信息。并将数据传输至PLC控制器&#xff0c…

5.28OpenMV入门

10分钟快速上手 OpenMV中文入门教程 使用的元件 先安装好,上述链接上手 IDE显示颜色阈值,同时也配有示例文件,如下图打开,helloworld 你好,世界! OpenMV中文入门教程,在官方也有每一个的详细…

JUC总结1

线程和进程的对比 进程是操作系统资源分配的最小单位,其包含了进程控制块、程序、数据等,在电脑上启动的一个个应用程序就是进程,当一个程序要被运行时,从磁盘中将这个应用程序的代码加载到内存中,就开启了一个进程。…

音乐系统java在线音乐网站基于springboot+vue的音乐系统带万字文档

文章目录 音乐系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 音乐系统 一、项目演示 在线音乐系统 二、项目介绍 基于springbootvue的前后端分离在线音乐系…

【Python设计模式14】状态模式

状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。状态模式将不同状态的行为封装到不同的状态类中,使得状态之间的转换独立于对象本身,减少了条件语句的使用,提高了代…

Design and implementation of robot impedance controller

机器人阻抗控制器的设计与实现是一个复杂但关键的过程,它涉及到多个方面以确保机器人能够在外界环境的影响下保持稳定的性能。以下是对机器人阻抗控制器设计与实现的详细解答: 一、阻抗控制原理 阻抗控制的基本原理是建立一个期望的机器人位置和接触力…

股票交易vip快速通道有什么门槛?vip交易通道的开通流程!

证券公司的VIP通道通常是为了满足高端客户或高频交易客户的需求而设立的,提供更快速、更便捷的交易服务。证券公司VIP通道适用于有追涨停板需求的投资者,以及一些喜爱高频交易的投资者,总的来说就是快速,在交易主机排队靠前。 VI…

go-zero 实战(1)

环境准备 go 版本 go version go1.22.2 linux/amd64 goctl 安装 goctl(官方建议读 go control)是 go-zero微服务框架下的代码生成工具。使用 goctl 可以显著提升开发效率,让开发人员将时间重点放在业务开发上,其功能有&#xff1a…

pands使用openpyxl引擎实现EXCEL条件格式

通过python的openpyxl库,实现公式条件格式。 实现内容:D列单元格不等于E列同行单元格时标红。 #重点是formula后面的公式不需要“”号。 from openpyxl.styles import Color, PatternFill, Font, Border from openpyxl.styles.differential import Dif…

Java客户端SpringDataRedis(RedisTemplate)上手

文章目录 ⛄概述⛄快速入门❄️❄️导入依赖❄️❄️配置文件❄️❄️测试代码 ⛄数据化序列器⛄StringRedisTemplate⛄RedisTemplate的两种序列化实践方案总结 ⛄概述 SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模…

LLM学习笔记

Q1:SFT时,计算LOSS ​ LLM是自回归生成模型,每次只会生成一个 token,难道 SFT 时,对于一个 (L, D) 的数据,要调用 L 次LLM去计算loss? A1: ​ 在每个前向传播过程,模型…

HDU 2196 Computer(树形dp)

H D U 2196 C o m p u t e r (树形 d p ) \Huge{HDU 2196 Computer(树形dp)} HDU2196Computer(树形dp) 文章目录 题意思路标程 题目链接:Problem - 2196 (hdu.edu.cn) 题意 给出一个n个节点的无…

论AI大模型炼丹与练舞的关系

AI大模型的训练和微调的区别,就像是在舞蹈中学习基础动作和编排新的舞蹈一样。 想象一下,你有一个神奇的舞蹈机器人,只要给它足够的舞蹈视频,它就能学会各种各样的舞步。 模型训练的过程就像是给这个舞蹈教练机器人一个包含了各种…

git将某次提交合并到另一个分支

一、需求背景 将分支b中的某一次提交单独合并到分支a 二、实现方案 需求:将分支b中的某一次提交单独合并到分支a 1.在git上查看指定某次提交的id,如下图所示: 也可以通过git log命令查看提交的id,如下图: git log…

CNN网络的介绍及实战

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,它在计算机视觉领域取得了巨大成功。CNN的设计灵感来自于生物学中的视觉系统,旨在模拟人类视觉处理的方式。CNN由多层卷积层和池化层堆叠而成&…

【AIGC调研系列】MiniCPM-Llama3-V2.5模型与GPT-4V对比

MiniCPM-Llama3-V2.5模型与GPT-4V的对比可以从多个方面进行分析,包括性能、应用场景和技术特点。 从性能角度来看,MiniCPM-Llama3-V2.5在OCR识别、模型幻觉能力和空间理解能力方面表现出色,实现了开源模型的性能SOTA(State of th…