TCP/IP有限状态机

TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立。

但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接。

关闭连接要四次握手:发FIN包,ACK 包,FIN包,ACK包,四次握手!!

一、建立TCP连接

1、客户端发送SYN报文(SYN为1) ,指明客户打算连接的服务器端口,以及初始化顺序号(ISN)

2、服务端发回包含服务器的初始顺序号的SYN报文段(SYN为1)。 同时,将确认号设置为客户的ISN加1以对客户的SYN报文段进行确认(ACK为1)

3、客户端将确认号设置为服务器的顺序号(ISN)+1对服务器的SYN报文段进行确认(ACK为1)

这三个报文段完成连接的建立,这个过程也称为三次握手。

------------------------------------------------------------------------

同时打开

两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能行极小。每一方必须发送一个SYN,且这些SYN必须传递给对方。这需要每一方使用一个对方熟知的端口作为本地端口。这又称为同时打开。

TCP是特意设计为了可以处理同时打开,对于同时打开它仅建立一条连接,而不是两条连接。

(1)当出现同时打开情况时,两端几乎同时发送SYN,并进入SYN_SENT状态;

(2)当每一端收到SYN时,状态变为SYN_RCVD,同时它们都再发SYN并对收到的SYN进行确认;

(3)当双方都收到SYN及相应的ACK时,状态都变迁为ESTABLISHED。

一个同时打开的连接需要交换4个报文段,比正常的三次握手多一个。此外,不要注意的是,没有将任何一端称为客户或服务器,因为每一端既是客户又是服务器。

------------------------------------------------------------------------

二、关闭一个TCP连接

TCP建立起来后,就可以在两个方向传送数据流。 当TCP的应用进程在没有数据需要发送时,就发送关闭命令。

TCP通过发送控制位FIN=1的数据片来关闭本方数据流,但是还可以继续接收数据,直到对方关闭那个方向的数据流,连接就关闭。

要终止一个连接要经过4次握手,因为TCP的半关闭(half-close)造成的。由于一个TCP连接是全双工(即数据在两个方向上能同时传递),因此两个方向必须单独的进行关闭。

关闭的原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经中止了那个方向的数据传送,发送FIN通常是应用层进行关闭的结果。

TCP连接关闭有三种情况:

1、本方启动关闭

收到本方应用进程的关闭命令后,TCP在发送完尚未处理的报文段后,发FIN=1的报文段给对方,且TCP不再受理本方应用进程的数据发送。

在FIN以前发送的数据字节,包括FIN,都需要对方确认,否则要重传。注意FIN也要占一个顺序号。一旦收到对方对FIN的确认以及对方的FIN报文段,本方TCP就对该FIN进行确认,在等待一段时间,然后关闭连接。等待是为了防止本方的确认报文丢失,避免对方的重传报文干扰新的连接。

2、对方启动关闭

当TCP收到对方发来的FIN报文时,发ACK确认此FIN报文,并通知应用进程连接正在关闭。应用进程将以关闭命令响应。TCP在发送完尚未处理的报文段后,发一个FIN报文给对方TCP,然后等待对方对FIN的确认,收到确认后关闭连接。若对方的确认未及时到达,在等待一段时间后也关闭连接。

3、双方同时启动关闭

连接双方的应用进程同时发送关闭命令,则双方TCP在发送完尚未处理的报文段后,发送FIN报文。各方TCP在FIN前所发报文都得到确认后,发ACK确认他收到的FIN。各方在收到对方FIN的确认后,同样等待一段时间后在关闭连接。这称之为同时关闭。

------------------------------------------------------------------------

同时关闭

双方都执行主动关闭是可能的,TCP协议也允许这样的同时关闭。

(1)当应用层发出关闭命令时,两端均从ESTABLISHED变为FIN_WAIT_1;

(2)这将导致双方各发送一个FIN,两个FIN经过网络传输后分别到达另一端;

(3)收到FIN后,状态由FIN_WAIT_1变迁到CLOSING,并发送最后的ACK;

(3)当收到ACK时,状态变化成TIME_WAIT。

------------------------------------------------------------------------

三、TCP有限状态机

客户端TCP状态迁移:

CLOSED -> SYN_SENT -> ESTABLISHED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSED

服务器TCP状态迁移:

CLOSED -> LISTEN -> SYN_RECEIVED -> ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED

(1)CLOSED
状态时初始状态。关闭状态,没有连接活动或正在进行

(2)LISTEN:被动打开,服务器端的
状态变为LISTEN(监听)。

被动打开的概念:连接的一端的应用程序通知操作系统,希望建立一个传入的连接。这时候操作系统为连接的这一端建立一个连
接。

与之对应的是主动连接:应用程序通过主动打开请求来告诉操作系统建立一个连接。

(3)SYNRECVD:服务器端收到SYN后,状态为SYN;发送SYN
ACK;

(4)
SYN_SENTY:应用程序发送SYN后,状态为SYN_SENT;

(5)ESTABLISHED: SYNRECVD收到ACK后,状态为ESTABLISHED;
SYN_SENT在收到SYN ACK,发送ACK,状态为ESTABLISHED;

(6)FIN_WAIT_1:(主动关闭)应用程序端发送FIN,准备断开TCP连接;状态从ESTABLISHED——>FIN_WAIT_1;

(7)FIN_WAIT_2:(主动关闭)应用程序端只收到服务器端的ACK信号,并没有收到FIN信号;说明服务器端还有数据传输,那么此时为半连接;

(8)TIME_WAIT:有两种方式进入 该状态:

1、FIN_WAIT_1进入:此时应用程序端口收到FIN+ACK(而不是像FIN_WAIT_2那样只收到ACK,说明数据已经发送完毕)并
向服务器端口发送ACK;

2、FIN_WAIT_2进入:此时应用程序端口收到了FIN,然后向服务器端发送ACK;TIME_WAIT是为了实现TCP
全双工连接的可靠性关闭,用来重发可能丢失的ACK报文;需要持续2个MSL(最大报文生存时间):假设应用程序端口在进入TIME_WAIT后,2个
MSL时间内并没有收到FIN,说明应用程序最后发出的ACK已经收到了;否则,会在2个MSL内在此收到ACK报文;

(9) CLOSE_WAIT:(被动关闭)服务器端在收到FIN后,发送ACK,状态为CLOSE_WAIT;如果此时服务器端还有数据需要发送,那么就发送,直到数据发送完毕;此时,服务器端发送FIN,状态变为LAST_ACK;

(10)LAST-ACK:  (被动关闭)当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK
状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。

时间: 2024-10-17 18:47:49

TCP/IP有限状态机的相关文章

TCP/IP漫游

TCP/IP漫游 TCP/IP是互联网的基础协议栈,它包括大大小小几十个协议.本篇文章主要涉及到就是HTTP.TCP.IP协议.我们经常学的网络模型是七层或者五层,实际上一般认为一共只有四层就可以了. Application layer ->HTTP-------------------------- Transport layer ->TCP-------------------------- Internet layer ->IP--------------------------

TCP/IP连接的建立

1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续请求,如有,作出响应.设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x. 2)主机B的TCP收到连

网络基础之TCP/IP协议

TCP/IP分层模型中,通信界定地址:    物理地址:在交换机中进行通信的,        以太网地址,MAC地址:        功能:真正的用于本地通信的地址:        使用范围:本地局域网内部且不跨路由设备: 逻辑地址:(IP地址)        在TCP/IP协议栈中,逻辑地址被定义为IP地址:        功能:界定主机到主机的通信地址:点到点通信:逻辑地址仅用于主机定位,不用于真正的通信:        使用范围:全球互联网: 逻辑端口号:(确定每个进程的标识符)     

12-1 TCP/IP协议栈

TCP/IP协议栈 有限状态机FSM:Finite State Machine CLOSED 没有任何连接状态 LISTEN 侦听状态,等待来自远方TCP端口的连接请求 SYN-SENT 在发送连接请求后,等待对方确认 SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认 ESTABLISHED 代表传输连接建立,双方进入数据传送状态 FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认 FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关

http、TCP/IP协议与socket之间的区别

网络由下往上分为:  www.2cto.com 物理层-- 数据链路层-- 网络层--                       IP协议 传输层--                       TCP协议 会话层-- 表示层和应用层--           HTTP协议 1.TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. 建立起一个TCP连

TCP/IP四层模型和OSI七层模型的概念

转:http://blog.csdn.net/superjunjin/article/details/7841099/ TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层).   TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传

《TCP/IP详解》

[TCP的那些事儿]TCP是个巨复杂的协议,而且不断地改进中.所以学习TCP本身是个比较痛苦的过程,但这个过程却能让人有很多收获.希望这篇快餐科普性文章能在快餐文化下让你对TCP有了解,并可以促发你对基础知识的兴趣和学习欲望. http://coolshell.cn/articles/11564.html http://coolshell.cn/articles/11609.html 大家知道,TCP/IP已成为计算机网络的事实上的标准.在关于TCP/IP的论著中,最有影响的就是两部著作.一部是

TCP/IP协议,HTTP协议

1. 协议  a. TCP/IP总体构架概述     TCP/IP协议并不全然符合OSI的七层參考模型.传统的开放式系统互连參考模型,是一种通信协议的7层抽象的參考模型,当中每一层运行某一特定任务.该模型的目的是使各种硬件在同样的层次上相互通信.这7层是:物理层.数据链路层.网路层.传输层.话路层.表示层和应用层.而TCP/IP通讯协议採用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完毕自己的需求.这4层分别为:     i.   应用层:应用程序间沟通的层,如超文本传送协议(HTTP

OSI七层模型详解 TCP/IP协议

总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转换,数据加密 没有协议 会话层 解除或建立与别的接点的联系 没有协议 传输层 提供端对端的接口 TCP,UDP 网络层 为数据包选择路由 IP,ICMP,OSPF,EIGRP,IGMP 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,MTU 物理层 以二进制数据形式在物理媒体上