TCP状态转换图(state transition diagram)



TPC总共有11个状态,状态转换图:

状态转换的要素

状态:

tcp定义的11个状态

事件:

触发TCP状态迁移。事件可以是:本地应用层调用;收到TCP消息(incoming segment);超时事件(timeout)

动作:

主要指针对远程Peer产生的动作,如发送确认等。

转换中的角色

本地应用层 Local App:产生事件。

本地tcp实现层 local TCP stack:处理事件,完成状态转换;在远程tcp上产生事件。

远程tcp实现层 remote TCP stack(or peer):和本地TCP功能一致。

TCP连接建立(三次握手)的表格表示:

socket创建后的默认状态是CLOSED,从这个初始状态开始,socket经历一系列状态变迁(state transition)。

当前状态(current state) 等待事件(expected events) 下个状态(next state) 执行动作(action)

CLOSED

本地应用调用CONNECT(active open)

SYN_SENT
向peer发送SYN消息。

CLOSED

本地应用调用LISTEN(passive open)

LISTEN


SYN_SENT

收到peer SYN ACK消息

ESTABLISHED

向peer发送SYN ACK消息

LISTEN

收到peerSYN消息
SYN_RECEIVED
向peer发送SYN ACK消息;向peer发送SYN消息;两个消息在一个响应中发送。
SYN_RECEIVED
收到peer SYN ACK消息

ESTABLISHED

ESTABLISHED

当双方都进入ESTABLISHED后,表示TCP连接已经建立,可以开始数据通信。数据通信过程中,TCP状态一直是ESTABLISHED。

TCP连接终止(close,4次握手)的表格表示(非simultaneous close):


ESTABLISHED

本地应用调用CLOSE(close initiator)

FIN_WAIT_1

向peer发送FIN消息

ESTABLISHED

收到peer FIN消息(close responder)

CLOSE_WAIT

向peer发送FIN ACK消息

FIN_WAIT_1

收到peer FIN ACK消息

FIN_WAIT_2


CLOSE_WAIT

本地应用调用CLOSE(close initiator)

LAST_ACK

向peer发送FIN消息

FIN_WAIT_2

收到peer FIN消息

TIME_WAIT

向peer发送FIN ACK消息

LAST_ACK

收到peer FIN ACK消息

CLOSED


TIME_WAIT

超时产生,timeout

CLOSED

close的发起方(initiator)可以是任意一方(client or server),initiator最后会进入TIME_WAIT状态。

关于TIME_WAIT状态的作用,可以参考:http://www.iteblog.com/archives/169

TCP连接终止(close,4次握手)的表格表示(simultaneous close):

simultaneous close表示通信双方在收到peer FIN消息时,都已经进入了FIN_WAIT_1状态。


ESTABLISHED

本地应用调用CLOSE(close initiator, both sides)

FIN_WAIT_1

向peer发送FIN消息

FIN_WAIT_1

收到peer FIN消息

CLOSING
向peer发送FIN ACK消息
CLOSING 收到peer FIN ACK消息 TIME_WAIT
TIME_WAIT 超时产生,timeout CLOSED

这种情况下,双方都进入到TIME_WAIT。

TCP状态转换图(state transition diagram)

时间: 2024-11-05 16:03:22

TCP状态转换图(state transition diagram)的相关文章

TCP状态转换图

TCP连接的建立与终止可以用状态转换图(state transition diagram)来说明,见图2.4. 图中定义了11种状态,这种转换基于 如果一个client进程调用close(),主动发送一个SYN--->SYN_SENT状态,这时握手成功收到server的syn和ACK,发回Client ACK然后,进入ESTABLISHED状态.建立TCP的三次握手过程. 四次握手的关闭过程. 在SYN_SENT的状态下接收SYN关键字时,转入SYN_RCVD状态,继续接收server端的传输数

传输控制协议(TCP) -- TCP状态转换图

本文参考自: <UNIX网络编程 卷1> 在<UNIX网络编程 卷1>一书中,作者给出了TCP状态转换图(如下).本文也将围绕此图进行阐释.

TCP状态转换图解析

本文参考Unix网络编程卷1,对TCP状态转换进行总结,方便掌握TCP链接中各个状态及故障分析. 1.Linux下TCP相关工具 基于Linux系统查看网络状态,首先了解几个基本查看指令. Linux查看网络状态的命令: netstat -nat  查看TCP各个状态的数量 lsof  -i:port , 可以检测到打开套接字的状况.lsof(list open files)列出当前系统打开的文本的工具. tcpdump -iany tcp port 9000 ,对tcp端口为9000的进行抓包

TCP的三次握手以及TCP状态转换图详解

今天来讨论一下TCP的三次握手以及TCP的状态转换图.首先发一个三次握手的流程图如下: 圖 2.4-3.三向交握之封包连接模式A:封包发起当用戶端想要对服务器端发起连接时,就必須要送出一個要求连线的封包,此时用戶端必须随机取用一個大于1024 以上的端口來做为程序通信的通道.然后在 TCP 的表头当中,必须带有 SYN 的主动连线(SYN=1),並并且记下发送给服务器端的序列号(Sequence number = 10001) .B:封包接收与确认封包发送当服务器端收到这个包,并且确定要接受这个

TCP三次握手、四次挥手及状态转换图

TCP/IP通信的三次握手如下: TCP是主机对主机层的传输控制协议,提供可靠的连接服务: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) .ACK(acknowledgement 确认) .PSH(push传送). FIN(finish结束) .RST(reset重置) .URG(urgent紧急).Sequence number(顺序号码) .Acknowledge number(确认号码). 三次握手: 第一次握手:客户端发送syn包(syn=x)的数据包到服务器

读懂TCP状态转移

读懂TCP状态变换的过程,对于理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各个状态(总共11个)的含义不在本文介绍的范围. 内容来源:<UNIX网络编程>第一卷第二章2.6节,若是读者对某个知识点不太理解,请参考原文. TCP状态转换图(state transition diagram) 1. 建立连接(three-way hand shake) 主动打开(passive open):服务器必须准备好接受外来的连接,通常通过socket.bind和listen完成. 被动打开(

MSP430 G2553 比较器Comparator_A+、数据流程图DFD、状态转换图STD

一.CA+构造 MSP430G2553带有一个比较器Comparator_A+(CA+),其构造框图如下图所示. 二.输入 & 输出 如上图所示,比较器有一个同向输入端(V+)和一个反向输入端(V-).通过软件设置,V+端可以连接到CA0~CA2三个外部管脚之一,或者三个内部电压基准之一:V-端可以连接到CA1~CA7七个外部管脚之一,或者三个内部电压基准之一.内部电压基准可以是0.5*Vcc.0.25*Vcc,或者内部一个二极管的导通电压(约0.55V). 输出信号可以连接至Timer的外部时

TCP四步挥手的各种状态转换图

对于TCP四步挥手时的各种状态转换,网上有很多资料.但是有很多描述不是很容易理解,甚至是描述错误,不如这篇文章里http://www.cnblogs.com/Jessy/p/3535612.html#3428191 说: 对此我表示不以为然.而且很容易误导初学者.在这里我贴出一个网上画的比较好的TCP四步挥手时的状态转换图:

TCP状态迁移,CLOSE_WAIT &amp; FIN_WAIT2 的问题

TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基本上显示着established,time_wait,close_wait等,这些到底是 什么意思呢,在这篇文章,我将会详细的阐述. 大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立.但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接.但是大家明白关闭连接的工作原理吗?关闭连接要四次握手:发FI