`

TCP链接

 
阅读更多

tcp状态转换图   

2011-07-11 17:54:44 |  分类: 通讯协议 | 字号   订阅

 1、建立连接协议(三次握手)
  (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1.
  (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
  (3) 客户必须再次回应服务段一个ACK报文,这是报文段3.
2、连接终止协议(四次分手)
   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
  (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
  (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
  (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
  (4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
3、TCP状态说明
  (1)CLOSED: 这个没什么好说的了,表示初始状态。
  (2)LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
   (3)SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本 上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态 时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
  (4)SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状 态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
  (5)ESTABLISHED:这个容易理解了,表示连接已经建立了。
   (6)FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别 是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
  (7)FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
   (8)TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
   (9)CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
  (10)CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对 方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
  (11)LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
tcp状态转换图 - tr0217 - 简约男人
分享到:
评论

相关推荐

    Tcp链接数修改工具

    "Tcp链接数修改工具"就是用来解决这个问题的,它允许用户根据自己的需求自定义系统的TCP半开连接数,从而可能提高上网和下载的速度。 TCP连接分为三个阶段:建立连接(三次握手)、数据传输和关闭连接(四次挥手)...

    TCP.rar_TCP链接

    这个“TCP.rar_TCP链接”压缩包文件很可能包含了关于如何在两台计算机之间建立TCP连接的示例代码或教程。 TCP连接的过程通常分为三个阶段:三次握手(Three-way Handshake)、数据传输和四次挥手(Four-way ...

    jmeter 5.1.1 tcp链接 发送protobuf消息到服务端,并返回结果的demo

    在本文中,我们将深入探讨如何使用JMeter 5.1.1版本进行TCP连接,发送protobuf消息到服务端,并接收返回的结果。这是一个基于Maven构建的项目,其中服务端使用了Vert.x框架和Kotlin语言。我们将从以下几个方面展开...

    计算机网络实验报告TCP链接

    ### 计算机网络实验报告TCP链接 #### 实验背景及目标 本次实验的主要目的是让学生通过实际操作,深入了解网络通信的基础知识,特别是TCP/IP模型中的关键协议——TCP(传输控制协议)。通过安装和使用自由软件SNORT...

    TCP链接HelloWorld级程序

    总的来说,TCP链接的"HelloWorld"级程序为初学者提供了一个基础的实践平台,通过这个简单的例子,他们可以学习到TCP协议的工作原理,以及如何在.NET 2005环境下使用C++进行网络编程。这个"SOCKET-TCP"压缩包文件可能...

    TCP链接与断开

    在给定的压缩包文件"LinkPort"中,很可能包含了一个简单的TCP链接与断开的示例程序,可能涵盖了创建Socket对象、连接远程服务器、发送和接收数据以及关闭连接的基本操作。这个示例对于学习TCP通信机制非常有帮助,...

    C#打开TCP链接源码

    在C#编程中,TCP(Transmission Control Protocol)是一种常用的数据通信协议,用于在网络应用程序之间建立可靠的、基于字节流的连接。本示例将详细解释如何在C#中实现TCP客户端来连接到服务器,以及相关的知识点。 ...

    go 语言 实现的 使用modbus 协议 通过DTU tcp 链接 采集数据.zip

    在本项目中,我们关注的是使用Go语言实现的Modbus协议通过DTU(Data Transfer Unit)TCP链接进行数据采集。这个项目源码提供了一个详细的实际应用案例,让我们深入理解Go语言在工业通信中的应用。 首先,`Modbus`是...

    Qt4基于tcp链接源码

    ### Qt4基于TCP链接源码解析 #### 一、概览 本文将深入解析一个基于Qt4框架的TCP通信示例代码,该示例适用于初学者理解和掌握如何使用Qt进行网络编程。通过分析Server端的实现,我们可以学习到Qt如何处理TCP连接、...

    windows查看每个程序建立的TCP链接数量

    windows查看每个程序建立的TCP链接数量

    没有accept可以建立TCP链接吗 668 - 684

    标题中的问题“没有accept可以建立TCP链接吗?”探讨的是TCP连接建立过程中,服务端是否必须调用`accept()`函数的情况。描述中提到的4.21章节内容是关于TCP连接建立的一般流程,并提出在没有调用`accept()`的情况下...

    8.1.4 TCP 链接断开 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    本节将深入探讨TCP链接的断开过程,以及如何通过Wireshark数据包分析工具进行实战分析。 TCP链接的断开,通常称为TCP四次挥手(Four-way Handshake),这是因为断开连接的过程涉及到了四个TCP数据包。这个过程确保...

    物联网模拟通信实验,计算机网络的TCP链接

    内容:因为本实验是模拟实验,所以即使监听到两个事件,这些工作也是可以在一个方法中完成的,本实验在一个方法中产生了两个事件的...适用人群:本资源适用于计算机网络中需要TCP链接实验,多个计算机相互通信的实验

    go 语言 实现的 使用modbus 协议 通过DTU tcp 链接 采集数据

    go 语言 实现的 使用modbus 协议 通过DTU tcp 链接 采集数据 一个 go 的tcp 服务, 用于 接受 仪器 上数据。 运行流程为: 仪器发起连接, 连接后 服务器下达 指令(采集数据), 客户端 返回 数据。

    tcp链接工具

    在Delphi编程环境中,开发TCP链接工具可以实现客户端与服务端之间的双向通信,允许它们互相发送和接收信息。以下是一些关于使用Delphi进行TCP编程的关键知识点: 1. **TCP 基础**:TCP 是一种面向连接的、可靠的...

    TCP链接异常断开检测程序

    TCP(Transmission Control Protocol)是一种基于连接的传输层协议,它保证了数据的可靠传输,通过三次握手建立连接,四次挥手断开连接。然而,在实际网络环境中,由于各种原因,如网络故障、主机崩溃等,可能导致...

    TCP测试工具(TCP Test Tool)

    TCP/IP协议是互联网通信的基础,它定义了网络设备如何交换数据和定位网络资源。TCP(传输控制协议)和IP(互联网协议)是该协议族的两个核心组件,负责端到端的数据传输。UDP(用户数据报协议)则是另一种常用协议,...

    TCP协议测试连接工具(很实用)

    TCP(Transmission Control Protocol)协议是互联网上应用最广泛的一种网络传输层协议,它为应用程序提供了全双工、可靠的数据通信服务。TCP通过确认机制、序列号、重传和流控制等特性确保数据的准确无误地传输。在...

    微信小程序 TCP,IP长连接 (源码)

    微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长...

Global site tag (gtag.js) - Google Analytics