协议分析工具学习TCP/IP(一)

一、 前言  

  曾在赛迪网发过一篇《用协议分析工具学习TCP/IP》(以下简称"学习"),看到"希望能够再次提供其它的补充"的留言就一直考虑补充些什么,要补充的东西很多,毕竟TCP/TP协议簇是Internet的根基,不管在网上跑什么服务,归根结底都是建立在TCP/TP协议的基础上,要学的东西很多,"学习"一文概述了数据的传送过程,讲到了TCP标志位的变化,本文重点阐述TCP的状态变迁的情况,如果对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://www.onlinedown.net/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状态是个开始状态,在实际观察中是看不到的(本人观点) 

细实线是数据传输过程中可能出现的一些情况的状态。 

图2是将客户端和服务器端分开的状态显示。 

这两张图在下面的学习中要常常用到。 

 

图1 TCP的状态变迁图 

 

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

你可能感兴趣的:(TCP/IP,网络知识)