这是网络编程的基础,tcp的状态转移图说到底就是一个状态机的不同状态之间的转换关系以及触发这些状态需要的条件,一共存在11个状态,我们来逐一分析:
1.CLOSED:起始点,在超时或者连接关闭时候进入此状态。
2.LISTEN:svr端在等待连接过来时候的状态,svr端为此要调用socket, bind,listen函数,就能进入此状态。此称为应用程序被动打开(等待客户端来连接)。
3.SYN_SENT:客户端发起连接,发送SYN给服务器端。如果服务器端不能连接,则直接进入CLOSED状态。
4.SYN_RCVD:跟3对应,服务器端接受客户端的SYN请求,服务器端由LISTEN状态进入SYN_RCVD状态。同时服务器端要回应一个ACK,同时发送一个SYN给客户端;另外一种情况,客户端在发起SYN的同时接收到服务器端得SYN请求,客户端就会由SYN_SENT到SYN_RCVD状态。
5.ESTABLISHED:服务器端和客户端在完成3次握手进入状态,说明已经可以开始传输数据了。
以上是建立连接时服务器端和客户端产生的状态转移说明。相对来说比较简单明了,如果你对三次握手比较熟悉,建立连接时的状态转移还是很容易理解。
接下来服务器端和客户端就进行数据传输。。。。,当然,里面也大有学问,就此打住,稍后再表。
下面,我们来看看连接关闭时候的状态转移说明,关闭需要进行4次双方的交互,还包括要处理一些善后工作(TIME_WAIT状态),注意,这里主动关闭的一方或被动关闭的一方不是指特指服务器端或者客户端,是相对于谁先发起关闭请求来说的:
6.FIN_WAIT_1:主动关闭的一方,由状态5进入此状态。具体的动作时发送FIN给对方。
7.FIN_WAIT_2:主动关闭的一方,接收到对方的FIN ACK,进入此状态。由此不能再接收对方的数据。但是能够向对方发送数据。
8.CLOSE_WAIT:接收到FIN以后,被动关闭的一方进入此状态。具体动作时接收到FIN,同时发送ACK。
9.LAST_ACK:被动关闭的一方,发起关闭请求,由状态8进入此状态。具体动作时发送FIN给对方,同时在接收到ACK时进入CLOSED状态。
10.CLOSING:两边同时发起关闭请求时,会由FIN_WAIT_1进入此状态。具体动作是,接收到FIN请求,同时响应一个ACK。
11.TIME_WAIT:最纠结的状态来了。从状态图上可以看出,有3个状态可以转化成它,我们一一来分析:
a.由FIN_WAIT_2进入此状态:在双方不同时发起FIN的情况下,主动关闭的一方在完成自身发起的关闭请求后,接收到被动关闭一方的FIN后进入的状态。
b.由CLOSING状态进入:双方同时发起关闭,都做了发起FIN的请求,同时接收到了FIN并做了ACK的情况下,由CLOSING状态进入。
c.由FIN_WAIT_1状态进入:同时接受到FIN(对方发起),ACK(本身发起的FIN回应),与b的区别在于本身发起的FIN回应的ACK先于对方的FIN请求到达,而b是FIN先到达。这种情况概率最小。
关闭的4次连接最难理解的状态是TIME_WAIT,存在TIME_WAIT的2个理由:
1.可靠地实现TCP全双工连接的终止。
2.允许老的重复分节在网络中消逝。
------------------------------
同时打开
两个应用程序同时执行主动打开的情况是可能的,虽然发生的可能性较低。每一端都发送一个SYN,并传递给对方,且每一端都使用对端所知的端口作为本地端口。例如:
主机a中一应用程序使用7777作为本地端口,并连接到主机b 8888端口做主动打开。
主机b中一应用程序使用8888作为本地端口,并连接到主机a 7777端口做主动打开。
tcp协议在遇到这种情况时,只会打开一条连接。
这个连接的建立过程需要4次数据交换,而一个典型的连接建立只需要3次交换(即3次握手)
但多数伯克利版的tcp/ip实现并不支持同时打开。
SYN_RCVD与SYN_SEND都是转换为ESTABLISHED的中间状态,目标是两端均转换到ESTABLISHED状态。
同时关闭
如果应用程序同时发送FIN,则在发送后会首先进入FIN_WAIT_1状态。在收到对端的FIN后,回复一个ACK,会进入CLOSING状态。在收到对端的ACK后,进入TIME_WAIT状态。这种情况称为同时关闭。
同时关闭也需要有4次报文交换,与典型的关闭相同。
相关推荐
在本压缩包文件中,我们关注的是如何利用LabVIEW通过TCP/IP协议与西门子S7-1200 PLC(可编程逻辑控制器)进行数据交互。 TCP/IP(传输控制协议/互联网协议)是互联网上广泛使用的通信协议族,它允许不同网络中的...
为了更深入地理解和掌握TCP/IP协议的工作原理,文档中还介绍了TCP状态转移图,这是理解TCP-IP协议的关键部分。TCP状态转移图详细描述了TCP连接从建立到结束的整个过程,包括CLOSED(起始状态)、LISTEN(服务端等待...
TCP/IP协议的状态迁移图是理解TCP/IP工作原理的关键,它展示了TCP连接从建立到终止会经过的各种状态,以及触发这些状态变化的事件。 首先,让我们详细解释各个状态: 1. LISTEN:监听状态。在这种状态下,服务器端...
《笑傲江湖》是金庸先生的一部武侠小说,这里将其与TCP/IP协议相结合,用生动的形象来解释网络通信中的关键技术。TCP/IP协议是互联网的基础,它定义了数据在网络中的传输方式。本篇将深入探讨TCP/IP协议的第三层,即...
《TCP-IP协议族(第4版)》是网络通信领域的经典教材,全面解析了互联网的核心协议栈。这本书深入浅出地介绍了TCP/IP协议族的基本原理、结构和工作流程,对于理解网络通信机制有着极其重要的价值。以下是根据书中的...
【基于TCP/IP的网络围棋】是一个利用网络编程技术实现的在线对弈平台,它通过TCP/IP协议进行通信,使得棋手可以在不同的计算机上进行实时的围棋对战。在这个项目中,我们将深入探讨TCP/IP协议、网络编程基础以及如何...
18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7 复位报文段 186 18.7.1 到不存在的端口的连接请求 187 18.7.2 异常终止一个连接 187 18.7.3 检测半...
在Linux环境中,TCP/IP网络接口配置是管理员必备的技能之一。本实验主要涵盖了以下几个关键知识点: 1. **网络接口配置**: - 使用`ifconfig`命令查看网络接口的状态,如IP地址、子网掩码、广播地址等信息。 - ...
- **ICMP**(Internet Control Message Protocol,互联网控制报文协议)是一种辅助TCP/IP协议,主要用于传输错误信息和控制信息,帮助网络设备诊断网络问题。 #### 2. 实验环境 - **操作系统**: Windows 7 - **网络...
在本文中,我们将深入探讨如何在Windows CE (WinCE)平台上使用TCP/IP协议以及构建动态曲线测试程序。这个程序是在Visual Studio 2005环境下编译通过的,旨在展示如何利用WinCE的TCP功能创建客户端和服务器端的通信,...
在Linux操作系统中,使用GTK(GIMP Toolkit)开发基于TCP/IP的网络聊天室是一项涉及到多方面技术的任务。GTK是一款强大的跨平台GUI库,用于创建美观的用户界面,而TCP/IP协议族则是互联网通信的基础,提供了可靠的...
18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7 复位报文段 186 18.7.1 到不存在的端口的连接请求 187 18.7.2 异常终止一个连接 187 ...
2.4 状态变迁图 2.5 T/TCP的扩展状态 2.6 小结 第3章 T/TCP使用举例 3.1 概述 3.2 客户重新启动 3.3 常规的T/TCP事务 3.4 服务器收到过时的重复SYN 3.5 服务器重启动 3.6 请求或应答超出报文段最大长度MSS 3.7 向后...
书中的内容深入到每个协议的细节,包括头部字段解析、状态机流程图、报文交互示例等,对于网络工程师、开发者和爱好者来说,是一本极具价值的学习资源。 总的来说,TCP/IP是互联网的基石,其复杂性和精细程度使得...
18.6 TCP的状态变迁图 182 18.6.1 2MSL等待状态 183 18.6.2 平静时间的概念 186 18.6.3 FIN_WAIT_2状态 186 18.7 复位报文段 186 18.7.1 到不存在的端口的连接请求 187 18.7.2 异常终止一个连接 187 18.7.3 检测半...
根据给定文件的信息来看,虽然标题与描述都指向了TCP/IP这一主题,但是文件内容却主要围绕UltraDev软件以及Web开发进行介绍。因此,这里我们将根据文件内容来生成相关知识点,重点聚焦于UltraDev在Web开发中的应用...
本示例着重讲解如何在C#中利用Socket实现心跳包机制和图片传输,同时确保TCP/IP协议的高效响应。以下是关于这些知识点的详细解释: 1. **C# Socket**: C#中的Socket类是.NET Framework提供的,用于实现网络通信的...
《TCP/IP数据库查询技术详解》 在信息技术领域,TCP/IP协议是互联网通信的基础,而数据库查询则是获取和处理数据的核心手段。本资料包主要探讨如何通过TCP/IP协议进行数据库查询,涉及Java编程语言以及相关库的使用...
在本案例中,我们关注的是Labview如何利用TCP/IP协议进行数据交换和控制。TCP/IP是Transmission Control Protocol/Internet Protocol的缩写,是互联网上最广泛使用的通信协议,用于在不同网络之间传递数据。 在...
这三个模块相互配合,共同构成了嵌入式TCP/IP在播出设备上的实现结构(如图1所示)。 #### 3. 实现细节 ##### 3.1 TCP/IP协议栈的实现 TCP/IP协议栈是设备与以太网进行数据交互的基础,它负责对接收到的数据进行...