TCP状态变迁原理图

网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息 。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等 。当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段 。【TCP状态变迁原理图】"一文,前文讲过的本文不再赘述 。
二、 为什么要学习TCP的状态变迁
要说清楚为什么,先说说状态,打个简单的比方,一般来说一个人"笑"是"高兴"的状态,"哭"是"悲伤"的状态,"怒吼"是"发怒" 的状态等等,也就是说一个人在做某个动作时就处于一定的状态,其实,网络中的计算机在相互通讯时,在不同的阶段就处于不同的状态,"学习"一文中讲到的数 据的几个传送过程(建立连接、数据传送、结束连接),在各个过程中,TCP分别处于不同的状态,由此可以看出,只有非常熟悉TCP的状态,才能知道目前你的计算机在网络中处于什么状态,是正在连接别人的计算机?还是不怀好意的人偷偷连入你的机器窃取你的东西?是否受到了攻击?哪些端口处于开放状态?中木马 了吗?等等诸如此类的问题都与TCP的状态有关,这就是学习TCP状态的原因 。
三、 学习要点
1、要有"动"的概念
状态是随着不同的情况而发生变化的,还用上面的比方,一个人"笑"是处于"高兴"的状态,他笑着笑着不笑了也就从"高兴"的状态变为 别的状态了 。状态是随着条件的不同而变化的,是动的,从下面的学习可以看出,在不同的阶段,TCP协议的标志位各不相同,反映出来的现象就是状态的变化 。
2、要分清楚哪些是客户端的状态,哪些是服务器端的状态
何谓客户端和服务器端,你正在上网时,你的计算机就是客户端,而你访问的网站的服务器就是服务器端 。如果你在你的机器中提供了一个www服务,那此时你的机器就是服务器端,访问你的计算机是客户端 。可见一台计算机即可作为客户端也可作为服务器端 。
有些状态是客户端独有的,有些是服务器端独有的,有些是都有的,在下面的学习中一定要注意区别 。
3、TCP的状态实际上就是某个端口的状态
"学习"一文提到TCP协议在通讯时用到源端口和目的端口,源端口是本机打开的,目的端口是正在和本机通信的另一台计算机的端口,源 端口分主动打开的客户端口和被动连接的服务端口两种 。本机提供一个服务就打开一个端口,例如:提供www服务默认打开80端口,提供E_mail服务默认打开25端口,提供FTP服务默认打开21端口,服务端口号一般是固定的,当有其它的计算机访问你的www服务时,那台计算机要随机开个端口(1024以 上)与你的80端口进行通讯,此时你的80端口的TCP状态将会随着不同的阶段而发生变化,而此时21、25等服务端口在没有被访问的情况下是不会发生变 化的 。
学习时一定要清楚TCP的状态实际上就是某个端口的状态这句话的含义 。
四、 测试环境
测试环境请参见用协议分析工具学习TCP/IP一文 。
测试工具:协议分析工具IRIS、Sniffer pro
协议分析工具有很多,也有免费的,只要能把包抓下来就行了 。Windows 系统自带的网络监视器和Linux自带的TCPDUMP也是不错的工具 。
TCP状态观察工具TCPview,该软件很小只有93KB,而且是个绿色软件,不用安装 。下载地很多,到华军down一个吧http://onlinedown/soft/3483.htm 。
五、 概述
图1和图2都是在《TCP/IP祥解》一书中截取的非常经典的TCP的状态变迁图,这两张图非常清晰地显示了TCP状态变迁的详细过程 。希望能在看完此文后在懂得TCP状态的基础上将这两张图烧到你的脑子里 。
图1中,虚线是服务器端的正常状态变化:
从CLOSED->LISTIN->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED->LISTIN
粗实线是客户端的正常状态变化:
从CLOSED->SEND_SENT->ESTABLISHED->FIN_WAIT_1-> FIN_WAIT_2->TIME_WAIT->CLOSED
其中CLOSED状态是个开始状态,在实际观察中是看不到的(本人观点)
细实线是数据传输过程中可能出现的一些情况的状态 。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
<!--[if !vml]--><!--[endif]-->
<!--[if !supportLineBreakNewLine]--><!--[endif]-->
500)this.width=500;" >500)this.width=500;" >

图2 TCP正常连接建立和终止所对应的状态

    推荐阅读