当前位置:文档之家› 协议分析工具学习TCP_IP(二)

协议分析工具学习TCP_IP(二)

协议分析工具学习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一个吧https://www.doczj.com/doc/4f8400338.html,/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的状态

1、命令方式

下面以Windows XP为例看看新安装的系统都开了那些端口,也就是说都预留了那些门,不借助任何工具来查看端口的命令是netstat,方法如下:

a、在"开始"的"运行"处键入cmd,回车

b、如图3在dos命令界面,键入netstat -na,图3显示的就是打开的服务端口,其中Proto代表协议,该图中可以看出有TCP和UDP两种协议。Local Address代表本机地址,该地址冒号后的数字就是开放的端口号。Foreign Address代表远程地址,如果和其它机器正在通信,显示的就是对方的地址,State代表状态,显示的LISTENING表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开了,但此时还没有人进来。以第一行为例看看它的意思。

TCP 0.0.0.0:135 0.0.0.0:0 LISTENING

这一行的意思是本机的135端口正在等待连接。注意:只有TCP协议的服务端口才能处于LISTENING状态。其它状态稍后讲。

图3

2、用TCPView工具

为了更好的分析端口,最好用TCPView这个软件,它是动态的。

图4是TCPView的运行界面。第一次显示时字体有些小,在"Options"->"Font"中将字号调大即可。TCPView显示的数据是动态的。图3中Local Address显示的就是本机开放的哪个端口(:号后面的数字),TCPView可以看出哪个端口是由哪个程序发起的。从图3可以看出445、139、1025、135、5000等端口是开放的,445、139等端口都是system发起的,135等都是SVCHOST发起的。

图4

七、正常变迁过程

1、抓包

抓包过程请参见"学习"一文中的"三、测试过程",不同的是不用下载文件,在浏览器中输入FTP 地址后关闭浏览器既是一个完整的数据传输过程。另为208号机改为207号。下图5中是截取的过程,其中10-28行省略了。

图5

2、分析

1)三次握手的状态

图5中3-5行是建立连接的三次握手过程,结合图2看其状态变化如下:

1))图5第3行和图6显示,207号机向1号机发出连接请求, 207号机标志位SYN置1,随即产生一个初始序号(SEQ)3748168237发送给1号机,此时207号机处于SYN_SEND状态。

2))图5第4行和图6中No.4显示,1号机收到这个序号后,将此序号加1值为3748168238作为应答信号(ACK),同时随机产生一个初始序号(SEQ)4265983929,此时1号机将标志位SYN和ACK置1,发回到请求端207号机,此时1号机由LISTEN状态变为SYN_RCVD状态。

3))图5第5行和图6中No.5显示,207号机收到后将确认序号设置为1号机的初始序号(SEQ)4265983929加1为4265983930作为应答信号并且将标志为ACK置1发送给1号机。这样在完成了三次握手后207号机处于ESTABLISHED状态。

图6 是三次握手的标志位变化情况。

图6 三次握手的标志位变化

2)数据传输的状态

图5中6-30行是数据传送的过程,数据在传送的过程中一直处于ESTABLISHED状态。ESTABLISHED的意思是建立连接。表示两台机器正在通信。处于ESTABLISHED状态的连接一定要格外注意,因为它也许是正常传输数据,也许是木马之类在盗取你的数据。

图7 是数据传输时的标志位变化。

图7 数据传输时的标志位变化

3)终止连接的状态

图5中32-35行是终止连接的过程,结合图2看其状态变化如下:

1))32行数据和图8中No.32显示的是207号机关闭浏览器后,207号机将FIN置1连同序号(SEQ) 3748168337发给1号机请求终止连接。此时207号机处于FIN_WAIT_1状态。

2))33行数据和图8中No.33显示1号机收到FIN关闭请求后处于CLOSE_WAIT状态,1号机将标志位ACK置1,并将应答信号设置为收到序号加1(ACK=3748168338)发回给207号机,

这样就终止了这个方向的传输。

3))34行数据和图8中No.34显示1号机将FIN置1连同序号(SEQ) 4265984517发给207号机请求终止连接。此时1号机处于LAST_ACK状态

4))35行数据和图8中No.35显示207号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1(ACK=4265984518),至此TCP连接彻底关闭。此时207号机处于TIME_WAIT状态。1号机处于CLOSED状态,此次连接彻底结束。

图7是终止连接的标志位变化。

图8 终止连接的标志位变化

4)正常状态下的TCP状态显示

下图9、10、11是1号机在不同阶段用TCPview捕获的TCP状态,由于有些状态非常短暂,难以捕获,只要能理解其中的意思即可。在上网是注意用TCPview观察,图3中的状态基本都能看到,TCPview显示的状态既有客户端的也有服务器端的。图11就是在1号机显示的207号机的状态。

图9是1号机FTP服务没有被访问时处于LISTENING状态的情况。

图10是207号机正在访问1号机服务器的情况。此时1号机的21端口处于ESTABLISHED状态,这里需要注意的是1号机在和207号机建立连接时,还有一个21端口处于LISTENING状态,这是因为它允许多用户访问,就像一个网站,它的80端口可以同时与许许多多的用户建立连接。

图11是结束连接的情况。其中TIME_WAIT应该是207号机的状态。

图9

图10

图11

上篇我们搭建一个最简单的网络环境《用协议分析工具学习TCP/IP(二)》我们分别介绍了查找服务器、建立连接,下面我们来讨论数据传输和终止连接。

目录

第三组数据传输

1)显示的是1、2行的数据

2)解释数据包

3)头信息分析

第四组终止连接

1)显示的是3-5行的数据

2)解释数据包

3)头信息分析

第三组数据传输

1)下图显示的是57-60行的数据

图14

2)解释数据包

这四行数据是数据传输过程中一个发送一个接收的过程。

前文说过,TCP提供一种面向连接的、可靠的字节流服务。当接收端收到来自发送端的信息时,接受端要发送一条应答信息,表示收到此信息。数据传送时被TCP分割成认为最适合发送的数据块。一般以太网在传送时TCP将数据分为1460字节。也就是说数据在发送方被分成一块一块的发送,接受端收到这些数据后再将它们组合在一起。

57行显示1号机给208号机发送了大小为1514字节大小的数据,注意我们前文讲过数据发送时是层层加协议头的,1514字节=14字节以太网头+ 20字节IP头+ 20字节TCP头+ 1460字节数据

58行显示的应答信号ACK为:1781514222,这个数是57行得SEQ序号1781512762加上传送的数据1460,208号机将这个应答信号发给1号机说明已收到发来的数据。

59、60行显示的是继续传送数据的过程。

这个过程就像我向张三借书,借给我几本我要说:“我已借了你几本了。”,他说:“知道了”。

3)头信息

图15-1和图15-2分别是57行和58行的头信息,解释参考第二组。

第四组终止连接

1)下图显示的是93-96行的数据

图16

2)解释数据包

93-96是两机通讯完关闭的过程。

建立一个连接需要三次握手,而终止一个连接要经过4次握手。这是因为一个TCP连接是全双工(即数据在两个方向上能同时传递),每个方向必须单独地进行关闭。4次握手实际上就是双方单独关闭的过程。

本例文件下载完后,关闭浏览器终止了与服务器的连接图16的93-96行显示的就是终止连接所经过4次握手过程。

93行数据显示的是关闭浏览器后,如图17-1所示208号机将FIN置1连同序号(SEQ)987695574发给1号机请求终止连接。

94行数据和图17-2显示1号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1,这样就终止了这个方向的传输。

95行数据和图17-3显示1号机将FIN置1连同序号(SEQ)1773196056发给208号机请求终止连接。

96行数据和图17-4显示208号机收到FIN关闭请求后,发回一个确认,并将应答信号设置为收到序号加1,至此TCP连接彻底关闭。

3)头信息

六、扫描实例

下面我们再举个ping的实例,测试某台计算机是否通,最常用的命令就是ping命令。Ping 一台计算机,出现如图18所示界面就是通,出现如图19所示界面就是不通,不通有两种情况,一是该计算机不存在或没接网线,二是该计算机安装了防火墙并设置为不允许ping。如何区别这两种情况呢?下面还是利用iris跟踪上述情况。

图18

图19

如图20是ping通的情况。

如图21是ping不通该计算机不存在的情况。从图可以看出ARP请求没有回应。

如图22是ping不通,该计算机存在但安装了防火墙的情况。从图可以看出ARP请求有回应。但ICMP请求没回应。

从分析可以看出虽然后两种情况的表面现象是一样的,但实质确是截然相反的。通过头信息可以清楚的看出PING是

ICMP协议来完成的,通讯过程是在第三层完成的,没有用到第四层的TCP协议。

图20

图21

图22

七、后记

本文不是个教程,许多问题都没有涉及到,比如TCP重发、IP分解、路由等,只是提出个学习思路,希望能起到抛砖引玉的作用。TCP/IP协议族是非常复杂的,但只要理解了还是不难学的。最后向感兴趣的朋友提个问题:分别telnet三台机器,一台正常23端口开放,一台网是通的但23端口没开放,另外一台是不存在的。用我们学过的方法跟踪一下,比较三个的不同。其实这就是用TCP扫描判断对方机器是否在线的一种方法。【完】

相关主题
文本预览
相关文档 最新文档