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.rhkb.cn/news/334339.html

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

相关文章

OpenHarmony 适配HDMI接口声卡

高清多媒体接口(High Definition Multimedia Interface,HDMI )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设…

windows中每日定时执行python脚本,解决问题

由于需要一个每天定时执行的任务,所以需要定时启动,网上看了很多方法,感觉不能在python脚本种写个while true 定时执行,占资源不说还不可靠。 最后考虑通过系统工具定时启动,发现linux中有crontab,windows…

OpenHarmony实战开发——宿舍全屋智能开发指南

项目说明 基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有OpenHar…

海信集团携纷享销客启动LTC数字化落地 推动ToB业务再升级

日前,海信集团携手连接型CRM纷享销客正式启动LTC(Leads to Cash)数字化平台实施落地项目。作为海信集团数字化的重要里程碑,该项目将通过统一规划、统一投资、统一平台、资源共享和数据赋能,构建ToB业务数字化经营管理…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字,数字之间依靠逗号隔开,你能帮助他将这些数字存储在列表中吗,列表元素以int的形式。 输入描述: 输入一行整数,数字之间以空格间隔。 输出描述: 输出这些数字…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题:2.3.1 面试题一:2.3.2 面试题二:2.3.3 面试题三:2.3.4 面试题四: 2.4 String类字符串用于比较的方法2.5 String类字…

5.28_Java语法_运算符,接收键盘数据

1、运算符 具体应用同我C语言操作符详解博客相同,另有补充会直接写 1.1、基本的算术运算符、符号做连接符 CSDN 具体应用同我C语言操作符详解博客相同 符号做连接符: ""符号与字符串运算连用的时候是用作连接符的,其结果依然是一个字符串…

【Java】类和对象

类和类的实例化 类就是一类对象的统称。对象就是这一类具体化的一个实例。 声明一个类就是创建一个新的数据类型,而类在 Java 中属于 引用类型 , Java 使用关键字 class 来声明类。我们来 看以下简单的声明一个类。 基本语法: class &…

3步骤找回丢失文件!EasyRecovery让你轻松应对数据灾难!

EasyRecovery:数据丢失的终结者,您的数字世界守护神 在数字化时代,数据已经成为我们生活的一部分。无论是个人照片、重要文件还是企业资料,数据都扮演着重要的角色。然而,意外删除、格式化、系统崩溃或病毒攻击等原因导…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力,为边缘设备的Ai计算提供了可能。 集成图形处理器,拥有8GB/16GB LPDDR4X(我这个是8G内存版本的),可以外接32GB/64GB/128GB/256GB eMMC模块&a…

python自动化-自动化网络配置工具v2(可巡检,可批量配置)

在日常工作中遇到需要配置相同配置的场景,网络工程师一个个去登陆配置会让工作效率显得没那么高效。 但是随着科技发展,人们不断的学习,我们似乎可以使用一些软件或者脚本来帮助我们实现巡检任务或者配置任务。 今天我想给大家分享一款我自己…

攻击同学网络,让同学断网

技术介绍:ARP欺骗 ARP欺骗(ARP spoofing)是一种网络攻击技术,它通过伪造ARP(地址解析协议)响应包来欺骗目标设备,使其将网络流量发送到攻击者指定的位置。具体操作步骤如下: 攻击者…

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已经大致说明了DataFrame APi,下面我们具体介绍DataFrame DSL的使用。DataFrame DSL是一种命令式编写Spark SQL的方式,使用的是一种类sql的风格语法。 文章链接: 一、单词统计案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)BridgePlugin】

BridgePlugin (平台桥接) 本模块提供ArkUI端和Android平台端消息通信的功能,包括数据传输、方法调用和事件调用。需配套ArkUI端API使用,ArkUI侧具体用法请参考[Bridge API]。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-…

采用java语言+B/S架构+后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码

采用java语言+B/S架构+后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码 ADR监测引擎每日主动获取检验数据、病历内容(可拓展)、以及其他临床数据,根据知识库内容自动判定患者是否有不良反应迹象&#xf…

Diffusion Model, Stable Diffusion, Stable Diffusion XL 详解

文章目录 Diffusion Model生成模型DDPM概述向前扩散过程前向扩散的逐步过程前向扩散的整体过程 反向去噪过程网络结构训练和推理过程训练过程推理过程优化目标 详细数学推导数学基础向前扩散过程反向去噪过程 Stable Diffusion组成结构运行流程网络结构变分自编码器 (VAE)文本编…

探索Python中的随机数生成与统计分析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、随机数的魅力与实用性 1. 随机数生成基础 2. 批量生成随机数 二、随机数的高级应用&a…

数字化工厂怎么收集,处理数据?

数字化工厂的数据收集与处理 数字化工厂是现代化工厂,利用数字技术和数据分析提高效率和优化流程。数据分析作为数字化工厂的核心技术,对数据的获取与处理至关重要。在数字化工厂中,数据的来源包括企业内部信息系统、物联网信息以及外部信息&…

《智能水表计量平台技术架构:数字化管理助力节水环保》

随着科技的不断发展,智能水表计量平台作为一种新型的水资源管理工具,正在逐渐受到关注和应用。本文将深入探讨智能水表计量平台的技术架构设计与实现,以及如何通过数字化管理助力节水环保事业。 ### 1. 系统架构概述 智能水表计量平台的技术…

Jenkins的Pipeline流水线

目录 前言 流水线概念 什么是流水线 Jenkins流水线 pipeline node stage step 创建一个简单的流水线 创建Pipeline项目 选择模板 测试 前言 提到 CI 工具,首先想到的就是“CI 界”的大佬——Jenkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具…