注册
登录
论坛
搜索
全国城市地图
帮助
导航
默认风格
宝石蓝
fervor
jeans
uchome
fashion
greenwall
私人消息 (0)
公共消息 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
IT家园
»
企业网管
» 用协议分析工具学习TCP/IP
返回列表
发帖
逍遥九少
发短消息
加为好友
逍遥九少
当前离线
我的天使,我的森林
UID
33109
帖子
1972
精华
0
积分
2312
阅读权限
100
在线时间
188 小时
注册时间
2007-4-22
最后登录
2012-2-21
资源发布组
帖子
1972
积分
2312
注册时间
2007-4-22
1
#
跳转到
»
正序看帖
打印
字体大小:
t
T
发表于 2007-11-11 13:03
|
只看该作者
[分享]
用协议分析工具学习TCP/IP
一、前言
目前,网络的速度发展非常快,学习网络的人也越来越多,稍有网络常识的人都知道TCP/IP协议是网络的基础,是Internet的语言,可以说没有TCP/IP协议就没有互联网的今天。目前号称搞网的人非常多,许多人就是从一把夹线钳,一个测线器联网开始接触网络的,如果只是联网玩玩,知道几个Ping之类的命令就行了,如果想在网络上有更多的发展不管是黑道还是红道,必须要把TCP/IP协议搞的非常明白。
学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了。本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体传输过程。
为了初学者更容易理解,本文将搭建一个最简单的网络环境,不包含子网。
二、试验环境
1、网络环境
如图1所示
图1
为了表述方便,下文中208号机即指地址为192.168.113.208的计算机,1号机指地址为192.168.113.1的计算机。
2、操作系统
两台机器都为Windows 2000 ,1号机机器作为服务器,安装FTP服务
3、协议分析工具
Windows环境下常用的工具有:Sniffer Pro、Natxray、Iris以及windows 2000自带的网络监视器等。本文选用Iris作为协议分析工具。
在客户机208号机安装IRIS软件。
三、测试过程
1、测试例子
将1号机计算机中的一个文件通过FTP下载到208号机中。
2、IRIS的设置
由于IRIS具有网络监听的功能,如果网络环境中还有其它的机器将抓很多别的数据包,这样为学习带来诸多不便,为了清楚地看清楚上述例子的传输过程首先将IRIS设置为只抓208号机和1号机之间的数据包。设置过程如下:
1)用热键CTRL+B弹出如图所示的地址表,在表中填写机器的IP地址,为了对抓的包看得更清楚不要添主机的名字(name),设置好后关闭此窗口。
图2 2)用热键CTRL+E弹出如图所示过滤设置,选择左栏“IP address”,右栏按下图将address book中的地址拽到下面,设置好后确定,这样就这抓这两台计算机之间的包。
图3
3、抓包
按下IRIS工具栏中 开始按钮。在浏览器中输入:
FTP://192.168.113.1
,找到要下载的文件 ,鼠标右键该文件,在弹出的菜单中选择“复制到文件夹”开始下载,下载完后在IRIS工具栏中按 按钮停止抓包。图4显示的就是FTP的整个过程,下面我们将详细分析这个过程。
图4
说明:
为了能抓到ARP协议的包,在WINDOWS 2000 中运行arp–d 清除arp缓存。
四、过程分析
1、TCP/IP的基本原理
本文的重点虽然是根据实例来解析TCP/IP,但要讲明白下面的过程必须简要讲一下TCP/IP的基本原理。
1)网络是分层的,每一层分别负责不同的通信功能。
TCP/IP通常被认为是一个四层协议系统,TCP/IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已,如表1所示。每一层负责不同的功能:
TCP/IP层描述
主要协议
主要功能
应用层
HTTP、Telnet、FTP和E-mail等
负责把数据传输到传输层或接收从传输层返回的数据
传输层
TCP和UPD
主要为两台主机上的应用程序提供端到端的通信,TCP为两台主机提供可靠的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。UPD则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据能到达另一端。
网络层
ICMP、IP和IGMP
有时称作互联网层,主要为数据包选择路由,其中IP是TCP/IP协议族中最为核心的协议。所有的TCP、UPD、ICMP及IGMP数据协议都以IP数据包格式传输。
链路层
ARP、RARP和设备驱动程序及接口卡
发送时将IP包作为帧发送;接收时把接收到的位组装成帧;提供链路管理、错误检测等。
表1 分层的概念说起来非常简单,但在实际的应用中非常的重要,在进行网络设置和排除故障时对网络层次理解得很透,将对工作有很大的帮助。例如:设置路由是网络层IP协议的事,要查找MAC地址是链路层ARP的事,常用的Ping命令由ICMP协议来做的。
图5显示了各层协议的关系,理解它们之间的关系对下面的协议分析非常重要。
图5 2)数据发送时是自上而下,层层加码;数据接收时是自下而上,层层解码。
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图6所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段。I P传给网络接口层的数据单元称作IP数据报。 通过以太网传输的比特流称作帧(Frame)。
数据发送时是按照图6自上而下,层层加码;数据接收时是自下而上,层层解码。
图6 3)逻辑上通讯是在同级完成的
垂直方向的结构层次是当今普遍认可的数据处理的功能流程。每一层都有与其相邻层的接口。为了通信,两个系统必须在各层之间传递数据、指令、地址等信息,通信的逻辑流程与真正的数据流的不同。虽然通信流程垂直通过各层次,但每一层都在逻辑上能够直接与远程计算机系统的相应层直接通信。
从图7可以看出,通讯实际上是按垂直方向进行的,但在逻辑上通信是在同级进行的。
图7
2、过程描述
为了更好的分析协议,我们先描述一下上述例子数据的传输步骤。如图8所示:
1)FTP客户端请求TCP用服务器的IP地址建立连接。
2)TCP发送一个连接请求分段到远端的主机,即用上述IP地址发送一份IP数据报。
3) 如果目的主机在本地网络上,那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被送到位于本地网络上的一台主机或路由器。
4) 本例是一个以太网,那么发送端主机必须把32位的IP地址变换成48位的以太网地址,该地址也称为MAC地址,它是出厂时写到网卡上的世界唯一的硬件地址。把IP地址翻译到对应的MAC地址是由ARP协议完成的。
5) 如图的虚线所示,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机,这个过程称作广播。ARP请求数据帧中包含目的主机的IP地址,其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址。”
6) 目的主机的ARP层收到这份广播后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。这个ARP应答包含I P地址及对应的硬件地址。
7) 收到ARP应答后,使ARP进行请求—应答交换的IP数据包现在就可以传送了。
8) 发送IP数据报到目的主机。
图8
3、实例分析
下面通过分析用iris捕获的包来分析一下TCP/IP的工作过程,为了更清晰的解释数据传送的过程,我们按传输的不同阶段抓了四组数据,分别是查找服务器、建立连接、数据传输和终止连接。每组数据,按下面三步进行解释。
显示数据包
解释该数据包
按层分析该包的头信息
第一组 查找服务器
1)下图显示的是1、2行的数据
图9
2)解释数据包
这两行数据就是查找服务器及服务器应答的过程。
在第1行中,源端主机的MAC地址是00:50:FC:22:C7:BE。目的端主机的MAC地址是FF:FF:FF:FF:FF:FF,这个地址是十六进制表示的,F换算为二进制就是1111,全1的地址就是广播地址。所谓广播就是向本网上的每台网络设备发送信息,电缆上的每个以太网接口都要接收这个数据帧并对它进行处理,这一行反映的是步骤5)的内容,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。网内的每个网卡都接到这样的信息“谁是192.168.113.1的IP地址的拥有者,请将你的硬件地址告诉我”。
第2行反映的是步骤6)的内容。在同一个以太网中的每台机器都会"接收"到这个报文,但正常状态下除了1号机外其他主机应该会忽略这个报文,而1号的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。告知自己的IP地址和MAC地址。第2行可以清楚的看出1号回答的信息__自己的MAC地址00:50:FC:22:C7:BE。
这两行反映的是数据链路层之间一问一答的通信过程。这个过程就像我要在一个坐满人的教室找一个叫“张三”的人,在门口喊了一声“张三”,这一声大家都听见了,这就叫广播。张三听到后做了回应,别人听到了没做回应,这样就与张三取得了联系。
3)头信息分析
如下图左栏所示,第1数据包包含了两个头信息:以太网(Ethernet)和ARP。
图10
下表2是以太网的头信息,括号内的数均为该字段所占字节数,以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0806。
第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是1号机的(00 50 FC 22 C7 BE)。ARP应答是直接送到请求端主机的。
行
以太网目的地址(6)
以太网源地址(6)
帧类型(2)
1
FF FF FF FF FF FF
00 50 FC 22 C7 BE
06 06
2
00 50 FC 22 C7 BE
00 50 27 F6 50 53
06 06
表2
下表3是ARP协议的头信息。硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0800即表示IP地址。它的值与包含I P数据报的以太网数据帧中的类型字段的值相同。接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。Op即操作(Opoperation),1是ARP请求、2是ARP应答、3是RARP请求和4为RARP应答,第二行中该字段值为2表示应答。接下来的四个字段是发送端的硬件地址、发送端的IP地址、目的端的硬件地址和目的端IP地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。
表3的第2行为应答,当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
行
硬件类型
(2)
协议类型
(2)
硬件地址
长度(1)
协议地址
长度(1)
Op
(2)
发送端以太网地址(6)
发送端IP地址(4)
目的以太网地址(6)
目的IP地址(4)
1
00 00
08 00
06
06
00 01
0050FC22C7BE
C0A871D0
000000000000
C0A871D1
2
00 00
08 00
06
06
00 02
005027F65053
C0A871D1
0050FC22C7BE
C0A871D0
表3
第二组 建立连接
1)下图显示的是3-5行的数据
图11
2)解释数据包
这三行数据是两机建立连接的过程。
这三行的核心意思就是TCP协议的三次握手。TCP的数据包是靠IP协议来传输的。但IP协议是只管把数据送到出去,但不能保证IP数据报能成功地到达目的地,保证数据的可靠传输是靠TCP协议来完成的。当接收端收到来自发送端的信息时,接受端详发送短发送一条应答信息,意思是:“我已收到你的信息了。”第三组数据将能看到这个过程。TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。建立连接的过程就是三次握手的过程。
这个过程就像要我找到了张三向他借几本书,第一步:我说:“你好,我是担子”,第二步:张三说:“你好,我是张三”,第三步:我说:“我找你借几本书。”这样通过问答就确认对方身份,建立了联系。
下面来分析一下此例的三次握手过程。
1))请求端208号机发送一个初始序号(SEQ)987694419给1号机。
2))服务器1号机收到这个序号后,将此序号加1值为987694419作为应答信号(ACK),同时随机产生一个初始序号(SEQ)1773195208,这两个信号同时发回到请求端208号机,意思为:“消息已收到,让我们的数据流以1773195208这个数开始。”
3))请求端208号机收到后将确认序号设置为服务器的初始序号(SEQ)1773195208加1为1773195209作为应答信号。
以上三步完成了三次握手,双方建立了一条通道,接下来就可以进行数据传输了。
下面分析TCP头信息就可以看出,在握手过程中TCP头部的相关字段也发生了变化。
3)头信息分析
如图12所示,第3数据包包含了三头信息:以太网(Ethernet)和IP和TCP。
头信息少了ARP多了IP、TCP,下面的过程也没有ARP的参与,可以这样理解,在局域网内,ARP负责的是在众多联网的计算机中找到需要找的计算机,找到工作就完成了。
以太网的头信息与第1、2行不同的是帧类型为0800,指明该帧类型为IP。
图12
IP协议头信息
IP是TCP/IP协议族中最为核心的协议。从图5可以看出所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输的,有个形象的比喻IP协议就像运货的卡车,将一车车的货物运向目的地。主要的货物就是TCP或UDP分配给它的。需要特别指出的是IP提供不可靠、无连接的数据报传送,也就是说I P仅提供最好的传输服务但不保证IP数据报能成功地到达目的地。看到这你会不会担心你的E_MAIL会不会送到朋友那,其实不用担心,上文提过保证数据正确到达目的地是TCP的工作,稍后我们将详细解释。
如表4是IP协议的头信息。
表4 IP数据报格式及首部中的各字段 图12中所宣布分45 00—71 01为IP的头信息。这些数是十六进制表示的。一个数占4位,例如:4的二进制是0100
4位版本:
表示目前的协议版本号,数值是4表示版本为4,因此IP有时也称作IPv4;
4位首部长度:
头部的是长度,它的单位是32位(4个字节),数值为5表示IP头部长度为20字节。
8位服务类型(TOS):
00,这个8位字段由3位的优先权子字段,现在已经被忽略,4位的TOS子字段以及1 位的未用字段(现在为0)构成。4位的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1位最多只能有一个为1,本例中都为0,表示是一般服务。
16位
总长度:
总长度字段是指整个IP数据报的长度,以字节为单位。数值为00 30,换算为十进制为48字节,48字节=20字节 的IP头+28字节的TCP头,这个数据报只是传送的控制信息,还没有传送真正的数据,所以目前看到的总长度就是报头的长度。
16位标识:
标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1,第3行为数值为30 21,第5行为30 22,第7行为30 23。分片时涉及到标志字段和片偏移字段,本文不讨论这两个字段。
8位生存时间(TTL):
TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。ttl的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去1。可根据TTL值判断服务器是什么系统和经过的路由器。本例为80,换算成十进制为128,WINDOWS操作系统TTL初始值一般为128,UNIX操作系统初始值为255,本例表示两个机器在同一网段且操作系统为WINDOWS。
8位协议:
表示协议类型,6表示传输层是TCP协议。
16位首部检验和:
当收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1,即检验和错误,那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。
32位源IP地址和32位目的IP地址:
实际这是IP协议中核心的部分,但介绍这方面的文章非常多,本文搭建的又是一个最简单的网络结构,不涉及路由,本文对此只做简单介绍,相关知识请参阅其它文章。32位的IP地址由一个网络ID和一个主机ID组成。本例源IP地址为C0 A8 71 D0,转换为十进制为:192.168.113.208; 目的IP地址为C0 A8 71 01,转换为十进制为:192.168.113.1。网络地址为192.168.113,主机地址分别为1和208,它们的网络地址是相同的所以在一个网段内,这样数据在传送过程中可直接到达。
TCP协议头信息
如表5是ICP协议的头信息。
表5 TCP包首部 第三行TCP的头信息是:04 28 00 15 3A DF 05 53 00 00 00 00 70 02 40 00 9A 8D 00 00 02 04 05 B4 01 01 04 02
端口号:
常说FTP占21端口、HTTP占80端口、TELNET占23端口等,这里指的端口就是TCP或UDP的端口,端口就像通道两端的门一样,当两机进行通讯时门必须是打开的。源端口和目的端口各占16位,2的16次方等于65536,这就是每台电脑与其它电脑联系所能开的“门”。一般作为服务一方每项服务的端口号是固定的。本例目的端口号为00 15,换算成十进制为21,这正是FTP的默认端口,需要指出的是这是FTP的控制端口,数据传送时用另一端口,第三组的分析能看到这一点。客户端与服务器联系时随机开一个大于1024的端口,本例为04 28,换算成十进制为1064。你的电脑中了木马也会开一个服务端口。观察端口非常重要,不但能看出本机提供的正常服务,还能看出不正常的连接。Windows察看端口的命令时netstat。
32位序号:
也称为顺序号(Sequence Number),简写为SEQ,从上面三次握手的分析可以看出,当一方要与另一方联系时就发送一个初始序号给对方,意思是:“让我们建立联系吧?”,服务方收到后要发个独立的序号给发送方,意思是“消息收到,数据流将以这个数开始。”由此可看出,TCP连接完全是双向的,即双方的数据流可同时传输。在传输过程中双方数据是独立的,因此每个TCP连接必须有两个顺序号分别对应不同方向的数据流。
32位确认序号:
也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答,在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表示确实收到这些数据。在第三组的分析中将看到这一过程。
4位首部长度
:
这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。
6个标志位
:
URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据
ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。
SYN 置1时用来发起一个连接。
FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。
图13的3个图分别为3-5行TCP协议的头信息,这三行是三次握手的过程,我们看看握手的过程标志位发生了什么?
如图13-1请求端208号机发送一个初始序号(SEQ)987694419给1号机。标志位SYN置为1。
如图13-2服务器1号机收到这个序号后,将应答信号(ACK)和随机产生一个初始序号(SEQ)1773195208发回到请求端208号机,因为有应答信号和初始序号,所以标志位ACK和SYN都置为1。
如图13-3请求端208号机收到1号机的信号后,发回信息给1号机。标志位ACK置为1,其它标志为都为0。注意此时SYN值为0,SYN是标示发起连接的,上两部连接已经完成。
16位窗口大小:
TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗口大小最大为65535字节。
16位检验和:
检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
16位紧急指针:
只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
选项:
图13-1和图13-2有8个字节选项,图13-3没有选项。最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。图13-1可以看出208号机可以接受的最大字节数为1460字节,1460也是以太网默认的大小,在第三组的数据分析中可以看到数据传送正是以1460字节传送的。
握手小结
上面我们分开讲了三次握手,看着有点散,现在小结一下。
第三组 数据传输
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扫描判断对方机器是否在线的一种方法。
收藏
分享
资源发布组申请点这里
逍遥九少
发短消息
加为好友
逍遥九少
当前离线
我的天使,我的森林
UID
33109
帖子
1972
精华
0
积分
2312
阅读权限
100
在线时间
188 小时
注册时间
2007-4-22
最后登录
2012-2-21
资源发布组
帖子
1972
积分
2312
注册时间
2007-4-22
3
#
发表于 2007-11-11 13:07
|
只看该作者
利用协议分析工具学习TCP/IP(续1)
一、前言
曾写过《用协议分析工具学习TCP/IP》一文,有幸受到一些人的关注,该文中用的工具是Iris,其实Sniffer Pro是非常优秀的协议分析软件,许多下载网站说它是最好的网络协议分析软件。做为一名合格的网管肯定需要有这么一套好的网络协议分析软件,它对分析网络故障等极为有用。 Sniffer Pro同时又是非常优秀的嗅探器,也就是说它可以捕捉到网络中其它机器的帐号和密码。本文介绍它的基本功能和用几个例子来演示捕捉密码的过程,也算是对学习TCP/IP的一些补充。介绍嗅探(Sniffer)原理的文章非常多,本文就不啰嗦了。
二、运行环境及安装
Sniffer Pro可运行在局域网的任何一台机器上,如果是练习使用,网络连接最好用Hub且在一个子网,这样能抓到连到Hub上每台机器传输的包。
本文用的版本是4.6,Sniffer Pro软件的获取可在
http://www.baidu.com/
或
http://www.google.com
中输入sniffer%20pro%204.6/ 中输入Sniffer Pro 4.6,查找相应的下载站点来下载。 该版本是不要序列号的。
安装非常简单,setup后一路确定即可,第一次运行时需要选择你的网卡。
最好在win2000下运行,在win2003下运行网络流量表有问题。
三、常用功能介绍
1、Dashboard (网络流量表)
点击图1中①所指的图标,出现三个表,第一个表显示的是网络的使用率(Utilization),第二个表显示的是网络的每秒钟通过的包数量(Packets),第三个表显示的是网络的每秒错误率(Errors)。通过这三个表可以直观的观察到网络的使用情况,红色部分显示的是根据网络要求设置的上限。
选择图1中②所指的选项将显示如图2所示的更为详细的网络相关数据的曲线图。每个子项的含义无需多言,下面介绍一下测试网络速度中的几个常用单位。
在TCP/IP协议中,数据被分成若干个包(Packets)进行传输,包的大小跟操作系统和网络带宽都有关系,一般为64、128、256、512、1024、1460等,包的单位是字节。
很多初学者对Kbps、KB、Mbps 等单位不太明白,B 和 b 分别代表 Bytes(字节) 和 bits(比特),1比特就是0或1。1 Byte = 8 bits 。
1Mbps (megabits per second兆比特每秒),亦即 1 x 1024 / 8 = 128KB/sec(字节/秒),我们常用的ADSL下行512K指的是每秒?512K比特(Kb), 也就是每秒512/8=64K字节(KB)
图1
图2
2、Host table(主机列表)
如图3所示,点击图3中①所指的图标,出现图中显示的界面,选择图中②所指的IP选项,界面中出现的是所有在线的本网主机地址及连到外网的外网服务器地址,此时想看看192.168.113.88这台机器的上网情况,只需如图中③所示单击该地址出现图4界面。
图3 图4中清楚地显示出该机器连接的地址。
点击左栏中其它的图标都会弹出该机器连接情况的相关数据的界面。
图4
3、Detail(协议列表)
点击图5所示的“Detail”图标,图中显示的是整个网络中的协议分布情况,可清楚地看出哪台机器运行了那些协议。注意,此时是在图3的界面上点击的,如果在图4的界面上点击显示的是那台机器的情况。
图5
4、Bar(流量列表)
点击图6所示的“Bar”图标,图中显示的是整个网络中的机器所用带宽前10名的情况。显示方式是柱状图,图7显示的内容与图6相同,只是显示方式是饼图。
图6
图7
5、Matrix (网络连接)
点击图8中箭头所指的图标,出现全网的连接示意图,图中绿线表示正在发生的网络连接,蓝线表示过去发生的连接。将鼠标放到线上可以看出连接情况。鼠标右键在弹出的菜单中可选择放大(zoom)此图。
图8
四、抓包实例
1、抓某台机器的所有数据包
如图9所示,本例要抓192.168.113.208这台机器的所有数据包,如图中①选择这台机器。点击②所指图标,出现图10界面,等到图10中箭头所指的望远镜图标变红时,表示已捕捉到数据,点击该图标出现图11界面,选择箭头所指的Decode选项即可看到捕捉到的所有包。
图9
图10
图11
2、抓Telnet密码
本例从192.168.113.208 这台机器telnet到192.168.113.50,用Sniff Pro抓到用户名和密码。
步骤1:设置规则
如图12所示,选择Capture菜单中的Defind Filter,出现图13界面,选择图13中的ADDress项,在station1和2中分别填写两台机器的IP地址,如图14所示选择Advanced选项,选择选IP/TCP/Telnet ,将 Packet Size设置为 Equal 55, Packet Type 设置为 Normal.。
图12
图13
图14
步骤2:抓包
按F10键出现图15界面,开始抓包。
图15
步骤3:运行telnet命令
本例使telnet到一台开有telnet服务的Linux机器上。 telnet 192.168.113.50 login: test Password:
步骤4:察看结果
图16中箭头所指的望远镜图标变红时,表示已捕捉到数据,点击该图标出现图17界面,选择箭头所指的Decode选项即可看到捕捉到的所有包。可以清楚地看出用户名为test密码为123456。
图16
图17
解释:
虽然把密码抓到了,但大家也许对包大小(Packet Size)设为55不理解,网上的数据传送是把数据分成若干个包来传送,根据协议的不同包的大小也不相同,从图18可以看出当客户端telnet到服务端时一次只传送一个字节的数据,由于协议的头长度是一定的,所以telnet的数据包大小=DLC(14字节)+IP(20字节)+TCP(20字节)+数据(一个字节)=55字节,这样将Packet Size设为55正好能抓到用户名和密码,否则将抓到许多不相关的包。
图18
3、抓FTP密码
本例从192.168.113.208 这台机器ftp到192.168.113.50,用Sniff Pro抓到用户名和密码。
步骤1:设置规则
如图12所示,选择Capture菜单中的Defind Filter出现图19界面,选择图19中的ADDress项,在station1和2中分别填写两台机器的IP地址,选择Advanced选项,选择选IP/TCP/FTP ,将 Packet Size设置为 In Between 63 -71, Packet Type 设置为 Normal。如图20所示,选择Data Pattern项,点击箭头所指的Add Pattern按钮,出现图21界面,按图设置OFFset为2F,方格内填入18,name可任意起。确定后如图22点击Add NOT按钮,再点击Add Pattern按钮增加第二条规则,按图23所示设置好规则,确定后如图24所示。
图19
图20
图21
图22
图23
图24
步骤2:抓包
按F10键出现图15界面,开始抓包。
步骤3:运行FTP命令
本例使FTP到一台开有FTP服务的Linux机器上 D:\>ftp 192.168.113.50 Connected to 192.168.113.50. 220 test1 FTP server (Version wu-2.6.1(1) Wed Aug 9 05:54:50 EDT 2000) ready. User (192.168.113.50
none)): test 331 Password required for test. Password:
步骤4:察看结果
图16中箭头所指的望远镜图标变红时,表示已捕捉到数据,点击该图标出现图25界面,选择箭头所指的Decode选项即可看到捕捉到的所有包。可以清楚地看出用户名为test密码为123456789。
图25
解释:
虽然把密码抓到了,但大家也许设不理解,将图19中Packet Size设置为 63 -71是根据用户名和口令的包大小来设置的,图25可以看出口令的数据包长度为70字节,其中协议头长度为:14+20+20=54,与telnet的头长度相同。Ftp的数据长度为16,其中关键字PASS占4个字节,空格占1个字节,密码占9个字节,Od 0a(回车 换行)占2个字节,包长度=54+16=70。如果用户名和密码比较长那么Packet Size的值也要相应的增长。 Data Pattern中的设置是根据用户名和密码中包的特有规则设定的,为了更好的说明这个问题,请在开着图15的情况下选择Capture菜单中的Defind Filter,如图20所示,选择Data Pattern项,点击箭头所指的Add Pattern按钮,出现图26界面,选择图中1所指然后点击2所指的Set Data按钮。OFFset、方格内、Name将填上相应的值。 同理图27中也是如此。 这些规则的设置都是根据你要抓的包的相应特征来设置的,这些都需要对TCP/IP协议的深入了解,从图28中可以看出网上传输的都是一位一位的比特流,操作系统将比特流转换为二进制,Sniffer这类的软件又把二进制换算为16进制,然后又为这些数赋予相应的意思,图中的18指的是TCP协议中的标志位是18。OFFset指的是数据包中某位数据的位置,方格内填的是值。
图26
图27
图28
4、抓HTTP密码
步骤1:设置规则
按照下图29、30进行设置规则,设置方法同上。
图29
图30
步骤2:抓包
按F10 键开始抓包。
步骤3:访问
http://www.ccidnet.com/
网站
步骤4:察看结果
图16中箭头所 指的望远镜图标变红时,表示已捕捉到数据,点击该图标出现图31界面,选择箭头所指的Decode选项即可看到捕捉到的所有包。在Summary中找到含有POST关键字的包,可以清楚地看出用户名为qiangkn997,密码为?,这可是我邮箱的真实密码!当然不能告诉你,不过欢迎来信进行交流。
图31
五、后记
本文中的例子是网内试验,若捕捉全网机器的有关数据请将图13中的station设置为anyany,作为学习研究可以,可别做坏事!如果要用好Sniff Pro必须有扎实的网络基础知识特别是TCP/IP协议的知识,其实Sniff Pro本身也是学习这些知识的好工具。Sniffer Pro是个博大精深的工具,由于水平有限,本文这是介绍了其中的一小部分,希望能起到抛砖引玉的作用。(责任编辑:张元)
资源发布组申请点这里
TOP
逍遥九少
发短消息
加为好友
逍遥九少
当前离线
我的天使,我的森林
UID
33109
帖子
1972
精华
0
积分
2312
阅读权限
100
在线时间
188 小时
注册时间
2007-4-22
最后登录
2012-2-21
资源发布组
帖子
1972
积分
2312
注册时间
2007-4-22
2
#
发表于 2007-11-11 13:06
|
只看该作者
協議分析工具學習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的狀態
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
八、 詳解幾個狀態
1、伺服器端LISTENING狀態
LISTENING表示處於偵聽狀態,只有提供某種服務才會處於LISTENING狀態,前面提到過TCP狀態變化就是某個埠的狀態變化,提供一個服務就打開一個埠,例如:提供www服務默認開的是80埠,提供ftp服務默認的埠為21,當提供的服務沒有被連接時就處於LISTENING狀態。FTP服務啟動後首先處於偵聽(LISTENING)狀態。處於偵聽LISTENING狀態時,該埠是開放的,等待連接,但還沒有被連接。就像你房子的門已經敞開的,但還沒有人進來。
看LISTENING狀態最主要的是看本機開了哪些埠,這些埠都是哪個程式開的,關閉不必要的埠是保證安全的一個非常重要的方面,服務埠都對應一個服務(應用程式),停止該服務就關閉了該埠,例如要關閉21埠只要停止IIS服務中的FTP服務即可。關於這方面的知識請參閱其他文章。
如果你不幸中了服務埠的木馬,木馬也開個埠處於LISTENING狀態。
2、ESTABLISHED狀態
ESTABLISHED狀態是表示兩台機器正在傳輸資料,觀察這個狀態最主要的就是看哪個程式正在處於ESTABLISHED狀態,圖12是IEXPLORE.EXE(IE)在正常的訪問一個網站,而圖13是EXPLORER.EXE(木馬程式)在和駭客交換資料。
圖12
圖13
3、用戶端SYN_SENT狀態
從上面的分析可以看出,當請求連接時用戶端首先要發送同步信號給要訪問的機器,此時狀態為SYN_SENT,如果連接成功了就變為ESTABLISHED,正常情況下SYN_SENT狀態非常短暫。例如要訪問網站
http://www.ccidnet.com
,如果是正常連接的話,用TCPView觀察IEXPLORE.EXE(IE)建立的連接會發現很快從SYN_SENT變為ESTABLISHED,表示連接成功。SYN_SENT狀態快的也許看不到。
如果發現有很多SYN_SENT出現,那一般有這麼幾種情況,一是你要訪問的網站不存在或線路不好,二是用掃描軟體掃描一個網段的機器,如下圖14所示:在用xscan掃描軟體掃描192.168.113.0這個網段時用TCPView捕捉到的,另外就是可能中了病毒了,例如中了"衝擊波",病毒發作時會掃描其他機器,這樣會有很多SYN_SENT出現。
圖14
4、伺服器端狀態SYN_RCVD
從上面的分析可以看出,當伺服器收到用戶端發送的同步信號時,將標誌位元ACK和SYN置1發送給用戶端,此時伺服器端處於SYN_RCVD狀態,如果連接成功了就變為ESTABLISHED,正常情況下SYN_RCVD狀態非常短暫。
如果發現有很多SYN_RCVD狀態,那你的機器有可能被SYN Flood的DoS(拒絕服務攻擊)攻擊了。下圖15就是在其他機器上模擬對本機進行SYN Flood攻擊時用TCPView捕捉到的。SYN Flood的攻擊原理是:在進行三次握手時,攻擊軟體向被攻擊的伺服器(本例是192.168.113.207)發送SYN連接請求(握手的第一步),但是這個位址是偽造的,如圖攻擊軟體隨機偽造了51.133.163.104、65.158.99.152等等位址,207號機在收到連接請求時將標誌位元ACK和SYN置1發送給用戶端(握手的第二步),但是這些用戶端的IP位址都是偽造的,伺服器根本找不到客戶機,也就是說握手的第三步不可能完成。這種情況下伺服器端一般會重試(再次發送SYN+ACK給用戶端)並等待一段時間後丟棄這個未完成的連接,這段時間的長度我們稱為SYN Timeout,一般來說這個時間是分鐘的數量級(大約為30秒-2分鐘);一個用戶出現異常導致伺服器的一個線程等待1分鐘並不是什麼很大的問題,但如果有一個惡意的攻擊者大量類比這種情況,伺服器端將為了維護一個非常大的半連接列表而消耗非常多的資源----數以萬計的半連接,即使是簡單的保存並遍曆也會消耗非常多的CPU時間和記憶體,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。此時從正常客戶的角度看來,伺服器失去響應,這種情況我們稱做:伺服器端受到了SYN Flood攻擊(SYN洪水攻擊)。
圖15 下圖是用sniffer pro抓的SYN Flood攻擊資料包,從圖上可以清楚地看出,120行是第一次握手,121是207號機對51.133.163.104這個位址的回復,但這個位址不通的,第三次握手沒法進行下去。
圖16 因為涉及到攻擊,具體攻擊過程不做演示,只把結果貼出來。
5、其他
在TCP的標誌位元中有一位元是Reset,如果包重發該標誌位置為1,重發包很多時網路一定有問題,圖17是我上網時打不開用網頁用IRIS抓得包,8-13行的Reset位都為1且SEQ號都相同,這種情況網肯定是有問題了,後查明是ADSL貓有問題了。
圖17
九、 後記
在學習的過程中不要刻意去抓某個狀態,有些狀態非常短暫,應該多瞭解原理性的東西,等碰上時知道怎麼回事。本文我是從我的實驗資料和自己的理解的角度來寫的,如果和你學的教材的說法不一樣請以你的教材為准。 其實TCP的狀態變化就是把TCP的標誌位元變化的不同階段起個名字,關於TCP標誌的變化又牽扯到一個話題____TCP掃描,關於這個話題以後再聊。
资源发布组申请点这里
TOP
返回列表
医学保健
其他系统
饮食健康
软件使用交流
免费资源
自然风光
社区交易
家园茶馆
体坛风云
病毒控制中心
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]