这是网络编程的基础,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.允许老的重复分节在网络中消逝。
分享到:
相关推荐
2. 设计状态转移图:状态转移图是描述状态机行为的有效工具,它用图形方式表示各个状态及其之间的转换。每个节点代表一个状态,箭头表示状态间的转移,并附带触发转移的条件。 3. 编码状态:为了在硬件中实现状态机...
在HU5 PLC中,通过状态转移图来表达程序的执行流程。 2. 状态和转换:每个状态代表一个特定的操作或功能,而转换条件则决定何时从一个状态转移到另一个状态。 五、HU5 PLC的通信与网络 1. 通讯接口:HU5 PLC通常...
2. 转换:状态之间的转移称为转换,它由触发条件(事件)和转移条件决定。条件满足时,系统会从一个状态转换到另一个状态。 3. 图形化界面:Stateflow图以图表的形式展示状态和转换,便于理解和修改。 二、State...
* 状态转移图和转移矩阵的应用 * Prim—Dijkstra 算法应用 本资源摘要信息为通信网络基础知识点总结,涵盖通信网络的基本概念、通信链路、分组交换网、虚电路、ATM 网络、OSI 模型、TCP/IP 模型、Poisson 过程等...
### 南航移动面试题总结 #### Dubbo的优缺点及其功能 ...- **状态机图:** 描述对象的状态转换过程。 UML帮助开发者更好地理解系统需求、设计架构以及后续的维护工作,是软件开发过程中不可或缺的一部分。
### 百度、腾讯、头条、...- **学习能力**: 持续学习新技术的能力。 - **问题解决**: 面对问题时的分析和解决能力。 以上总结涵盖了从基础概念到高级技术的多个方面,可以帮助求职者全面准备面试,提高应聘成功率。
- **状态转移图、系统方程和稳态方程:** - 描述系统在不同状态之间的转移。 - 通过方程求解系统状态的概率分布。 - **平均队列长Ls、排队数Lq、逗留时间S、排队等待时间W:** - **平均队列长Ls:** 平均在系统...
- **动态规划**:背包问题、最长公共子序列、矩阵链乘法等,通过状态转移方程求解复杂问题。 - **贪心算法**:贪心策略的选择和证明,如霍夫曼编码、活动安排问题。 - **回溯法**:八皇后问题、N皇后问题、图着色...
- **动态规划**:理解状态转移方程,解决最优化问题。 - **贪心算法**:解决问题时采取局部最优策略。 - **回溯法**:用于求解多解或无解问题,如八皇后问题、图着色问题。 3. **计算机网络**:TCP/IP协议、HTTP...
总结起来,远程装备诊断系统是一个结合了软件工程、数据库管理、网络通信等多方面知识的综合应用案例,旨在提高设备运维效率,减少停机时间,降低维护成本。通过Visual C++6.0实现的三个版本展示了针对不同规模和...
开发者可能使用了SOAP(简单对象访问协议)或REST(表述性状态转移)API来对接天气预报服务提供商,如OpenWeatherMap或Weather Underground。 4. **网络编程**: 在C++中,QT的网络模块(如QNetworkAccessManager和...
根据提供的信息,我们可以总结出以下相关的IT知识点: ### 一、基础知识 ...读者不仅可以学习到理论知识,还能掌握实际应用技能,非常适合计算机、自动化、电子及相关专业的学生和技术人员阅读学习。
- 配置连接时故障转移(Connect-Time Failover)。 - 控制 **Oracle Net Listener**。 - 使用 **tnsping** 测试 **Oracle Net** 连通性。 - 区分何时使用共享服务器与专用服务器。 #### 二、Oracle Net Services **...
- **Socket 编程**:深入学习 TCP/UDP 协议下的网络编程。 - **NIO**:介绍 Java NIO(非阻塞 I/O)的新特性,如 Channels 和 Buffers。 - **RMI**:远程方法调用(Remote Method Invocation),实现跨进程服务通信...
- **编写代码**:从简单的 Actor 开始,逐步学习 Akka 的核心概念和技术。 ##### 1.4 必不可少的 HelloWorld 示例 - **创建 Actor**:定义一个 Actor 类继承自 `Actor`。 - **发送消息**:使用 `tell` 方法向 Actor...
6. **进程管理**:讲解如何查看和控制进程,使用`ps`, `top`, `kill`, `nohup`等命令,理解进程状态和优先级。 7. **用户和组管理**:介绍用户账户创建、删除、权限设置,以及用户组的概念和管理,使用`adduser`, `...
1. **Word 2010**:按下 `Ctrl + Enter` 键在 Word 2010 中会插入一个分页符,它用于将文本强制转移到下一页。默认的汉字字体通常是宋体或仿宋,具体在不同系统和设置中可能会有所不同。 2. **Office 2010 家族**:...