全部博文(512)
分类: LINUX
2006-11-08 10:03:44
协议分析工具学习TCP/IP(一)
作者:担子 发文时间:2004.08.10
一、 前言
曾在赛迪网发过一篇《用协议分析工具学习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一个吧。
五、 概述
图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正常连接建立和终止所对应的状态
(责任编辑:)