网络工程设计与实践(第三版)课件:网络数据报的捕获与分析_第1页
网络工程设计与实践(第三版)课件:网络数据报的捕获与分析_第2页
网络工程设计与实践(第三版)课件:网络数据报的捕获与分析_第3页
网络工程设计与实践(第三版)课件:网络数据报的捕获与分析_第4页
网络工程设计与实践(第三版)课件:网络数据报的捕获与分析_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络数据报的捕获与分析9.1基本原理

9.2常见的IP数据报

9.3Wireshark的使用9.4数据采集与分析

9.1基本原理

9.1.1TCP/IP体系结构

开放系统互连(OSI)模型将网络划分为七层,在各层上实现不同的功能,这七层分别为应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。而TCP/IP体系也同样遵循这七层标准,只不过在某些OSI功能上进行了压缩。与OSI参考模型不同,TCP/IP模型更侧重于互联设备间的数据传送,而不是严格的功能层次划分,它通过解释功能层次分布的重要性来做到这一点,但仍为设计者具体实现协议留下很大的余地。因此,OSI参考模型在解释互联网络通信机制上比较适合,而TCP/IP却是互联网络协议的市场标准。

TCP/IP参考模型比OSI模型更灵活,参照图9.1(a)。图9.1OSI参考模型和TCP/IP参考模型比较(a) TCP/IP参考模型与OSI参考模型;(b) TCP/IP协议族

1.进程/应用层

应用层协议提供远程访问和资源共享,常见的应用包括Telnet、FTP、SMTP、HTTP等,很多其他应用程序也驻留运行在此层,并且依赖于底层的功能。相似的,在IP网络上要求通信的任何应用也在模型的这一层中描述。

2.运输层

运输层又称主机到主机层,大致对应于OSI参考模型的会话层和传输层。为了在网络传输中对应用数据进行分段,该层必须执行数学检查来保证所接收数据的完整性,以便为多个应用同时传输数据多路复用数据流(传输和接收)。这意味着主机到主机层能识别特殊应用,对乱序收到的数据进行重新排序。

当前的主机到主机层包括两个协议实体:传输控制协议(TCP)和用户数据报协议(UDP)。还有一个协议正在定义中,是针对不断增长的面向事务的需要,该协议称为事务/传输控制协议(T/TCP,Transaction/TransmissionControlProtocol)。

3.网际层

网际层又称网络层,该层由两个主机之间通信所必须的协议和过程组成。这意味着数据报文必须是可路由的,网际层(IP)负责数据报文路由。

网际层也必须支持其他的路由管理功能,必须提供第二层地址到第三层地址的解析功能及反向解析功能。这些功能由对应的IP协议提供。网际层的路由和路由管理功能由外部对等协议提供,这些协议被称为路由协议。路由协议包括内部网关协议(IGP,InterorGatewayProtocol)、外部网关协议(EGP,EnteriorGatewayProtocol)。因为它们驻留在网络层中,但却不是IP协议组件与生俱来的部分,所以标识为对等。实际上,许多路由协议能够在多路由协议地址结构中发现、计算路由。用于其他地址结构的路由协议例子包括IPX和AppleTalk。

4.网络访问层

网络访问层又称链路层,该层提供用于物理连接、传输的所有功能。OSI模型把这一层功能分为两层:物理层和数据链路层。TCP/IP参考模型把两层合在一起。IP协议假设所有底层功能由局域网或串口连接提供。9.1.2TCP/IP组件

虽然上节所述的协议一般标识为“TCP/IP”,但实质上在IP协议组件内还有好几个不同的协议。主要协议之间的关系如图9.1(b)所示。

TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络层协议。

虽然TCP使用不可靠的IP服务,但可以提供一种可靠的运输层服务。UDP可为应用程序发送和接收数据报。数据报是指从发送方传输到接收方的信息单元。与TCP不同的是,UDP不可靠,它不能保证数据报能安全无误地到达最终目的地。IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中传输。

ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。ICMP主要被IP使用,但应用程序也有可能使用。

IGMP是Internet组管理协议,用来把一个UDP数据报多播到多个主机。

ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层地址和网络接口层地址。驻留于进程/应用层中的应用(如Telnet、FTP和许多其他应用)被认为是IP协议组件与生俱来的组成部分,但这些属于应用范畴而不是协议范畴。

从图9.1(b)中可以看出,网络访问层是TCP/IP的基础,而TCP/IP本身并不十分关心底层,因为处在数据链路层的硬件接口(即网络设备驱动程序)把协议与实际硬件、物理介质隔离开。应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图9.2所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCPSegment)。IP传给网络接口层的数据单元称作IP数据报(IPDatagram)。通过以太网传输的比特流称作帧(Frame)。图9.2数据进入协议栈时的封装过程9.1.3IEEE802.3网络

1.媒体访问方法

媒体访问方法取决于以太网操作是半双工还是全双工模式。

在半双工操作下,两个或多个节点竞争使用物理媒体,一次仅允许一个节点发送数据。在传输前,每个节点首先监听传输媒体以便确定媒体闲或忙(载波侦听)。如果媒体忙,节点就继续监听;如果媒体空闲,则立即发送数据;如果多个节点在同一时间发送数据,便会产生冲突。因此,每个节点要监视自己的传输,才能检测到可能的冲突。检测到冲突后,节点发送一个简短的冲突加强信号,确保所有节点都意识到冲突的发生。为了避免所有节点同时重传它们的帧,所有冲突检测节点要运行一个截断二进制指数后退(TruncatedBinaryExponentialBackoff)算法,计算各自的重传延迟,称为后退延迟(BackoffDelay)。

在全双工操作下,两个节点共享物理媒体。如果媒体具备同时双向传输而不受干扰的能力,就不可能出现竞争,因此不需要CSMA/CD算法。

2.传输媒体

IEEE802.3标准定义了几种传输媒体和电缆拓扑结构。在IEEE802.3中,媒体规范由三个字段类型标识(最后一部分标识方式可以改变),媒体规范如下所示:

<数据速率Mb/s><媒体类型><最大段长×100米>

表9.1显示了802.3网络定义的媒体类型和无中继器的最大配置。表9.1IEEE802.3传输媒体

3.最大有效载荷

最大帧长为1518个字节,不包括前导码(7字节)和帧始界符(1字节)。最大有效载荷长度取决于地址大小。采用2字节地址时发送的数据可达1508个字节;采用6字节地址时发送的数据最高达1500字节。对于100Mb/s或更低速率的传输媒体,最小帧长为64个字节。

以速率大于100Mb/s的半双工方式运行的媒体,需要的最小帧长为512个字节。较小的帧用非数据位填充,这些非数据位作为扩展字段附加在原始帧上。对于原始标准作这种修改是必需的,因为只有这样,才能适应千兆位网络所需的物理距离(距离定义了信号传播时间)和维持发送器在发送最小帧的同时检测出冲突的能力。同样,对于操作速率高于100Mb/s的全双工模式,常见的实现方式是发送突发的数据帧的同时不放弃控制,最大突发长度为8192个字节。在发送包括任何扩展的第一个帧后,后续帧的发送不再需要扩展字段。发送者用非数据位填充帧间的空隙,以便指示接收者这是突发模式。9.1.4数据监听原理

以太网提供物理上的连接,而TCP/IP工作在上层。在以太网中,所有的通信都是广播式的,也就是说,同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都有一个惟一的硬件地址,这个硬件地址也就是网卡的MAC地址,大多数系统使用48bits的地址,表示网络中的每一个设备。MAC地址通常用12位十六进制的数字表示,前6位十六进制数字由IEEE统一分发,以确定厂商的惟一性,后6位数字由厂商负责管理。一般来说每一块网卡上的MAC地址都是不同的,每个网卡厂家得到一段地址,然后将这段地址分配给生产的网卡。在硬件地址和IP地址间使用ARP和RARP协议进行相互转换。在一个实际的系统中,数据的收发是由网卡来完成的。网卡接收到传输来的数据,检查数据帧目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断接收与否。如接收,则产生中断信号通知CPU;如不接收,则将数据帧丢弃。CPU得到中断信号产生中断,操作系统接收数据。通常网卡有如下接收模式:

(1)广播方式:能够接收网络中的广播信息。

(2)组播方式:能够接收组播数据。

(3)直接方式:只有目的网卡才能接收该数据。

(4)混杂(Promiscuous)模式:能够接收通过它的一切数据,而不管该数据是否是传给它的。嗅探(Sniffer)是指将本地NIC工作状态设成混杂模式,捕捉与其连接的物理媒体上传输的所有数据的软件或硬件。Sniffer工作在网络环境中的底层。它将拦截的数据通过相应的软件处理,可以实时分析数据的内容,进而分析所处的网络状态和整体布局。

Sniffer一般用于分析网络的数据,以便找出网络中所关心的潜在问题。例如,网络的某一段运行不畅,报文的发送比较慢,而故障点未知,此时就可以通过Sniffer的协助判断出问题所在。Sniffer在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可能能够分析几百种协议。Sniffer可以是软件、硬件,甚至是软/硬件的结合。常见的Sniffer软件有NetXRay、SnifferPro、Sniffit、Snort、TCPdump等。

只有将Sniffer放置于被检测的机器或网络附近,才能有效地收集所需要的信息;另外一个比较好的方法就是将Sniffer放在网关上。这样,系统管理员可以使用Sniffer来分析网络信息交通状况,并且找出网络上发生问题的位置。安全管理员则可以同时使用多种Sniffer,将它们放置在网络的不同位置,从而形成一个入侵警报系统。工作于混杂模式的网络适配器可以接受任何一个在同一网段上传输的数据包,因此也就存在着各种Sniffer程序用来捕获网络上传递的密码、E-mail信息、文档等一些没有加密的信息。表9.2列出了常见传输介质被监听的可能性。表9.2常见传输介质安全性表9.1.5网络拓扑与数据监听

1.网络拓扑类型

每一种网络都要有布线、网络设备、文件服务器、工作站、软件和培训,这些要素以多种不同的方式进行综合便可以创建与具体单位的需要和资源相适应的网络。有些网络的启动成本很低,但是维护和升级的代价很高;而另一些网络虽然建立时耗资较大,但是易维护、易升级。

拓扑结构是指网络的物理布局以及其逻辑特征。物理布局就像是描述办公室、建筑物或校园中如何布线的示意图,通常称为电缆线路。网络的逻辑是指信号沿电缆从一点向另一点进行传输的方法。网络拓扑结构主要有三种:总线拓扑、环型拓扑和星型拓扑。

1)总线拓扑

总线拓扑结构(BusTopology)由从一台PC机或文件服务器连向另一台的电缆组成,与链上的链接非常相像。与链一样,采用总线拓扑结构的网络有一个起始点和一个终止点,也就是与总线电缆段每个端点相连的终结器。传送包时,段中所有的节点都要对包进行检测,而且包必须在给定时间内到达目标。总线网络必须符合IEEE的长度规范,以确保包在期望的时间内到达。如图9.3所示。图9.3总线拓扑结构由于终结器标志着段的物理终点,在总线网络中至关重要。终结器是一个电阻。如果没有终结器,信号将从原路径反射回去。信号的反射会影响网络时间的调配,与网络上传输的新的信号发生冲突。因此当没有终结器或终结器出错时,段上的通信不能进行。

传统的总线设计适用于小型网络。由于总线结构需要的布线远远少于其他拓扑结构,所以建设成本可以降到最低;同时,添加其他工作站、在房间或办公室中短距离扩展总线也非常便利。其缺点是管理的成本非常高,例如,如果一个节点或电缆段发生故障,那么隔离故障段是很困难的,也就是说,一个有缺陷的节点、网络段或连接器会使整个网络瘫痪。另外,信息流使总线异常拥挤,需要添加网桥和其他设备来控制信息流量。2)环型拓扑

环型拓扑结构(RingTopology)中,数据的路径是连续的,没有逻辑的起点与终点,因此也就没有终结器。工作站和文件服务器在环的周围各点上相连(见图9.4)。当数据传输到环时,将沿着环从一个节点流向另一个节点,找到其目标,然后继续传输直到又回到原节点。图9.4环型拓扑结构图在环型拓扑结构的开发早期,只允许数据沿一个方向传输,并在传输节点结束。新型高速环型技术采用两个环,使冗余数据可以沿相反的方向传输,因此,如果一个方向上的环中断了,那么数据还可以以相反的方向在另一个环上传输,最终到达其目标。

因为用来创建环型拓扑结构的设备能轻易地定位出故障的节点或电缆问题,所以环型拓扑结构管理起来比总线拓扑结构要容易。这种结构非常适合于LAN中长距离传输信号的情况,在处理大容量的信息流时要优于总线拓扑结构。

然而,环型拓扑结构在实施时比总线拓扑结构要昂贵。一般情况下,它在开始时需要的电缆和网络设备比较多;而且,环型拓扑结构的应用不像总线拓扑结构那样广泛,因此供用户选择的设备选项较少,扩展高速通信的选项也不多。3)星型拓扑

星型拓扑结构(StarTopology)是最古老的一种通信设计方法,是现代网络的主流选择。星型拓扑结构的物理布局由与中央集线器相连的多个节点组成(见图9.5)。集线器是一种将各个单独的电缆段或单独的LAN连接为一个网络的中央设备,有些集线器也被称为集中器或存取装置。单一的通信电缆段从集线器处向外辐射与终端连接。图9.5星型拓扑结构星型拓扑结构的建设成本目前比总线网络和环型网络的要低,主要因为其网络设备和电缆的成本较低。与环型拓扑类似,星型拓扑结构比传统的总线网络易于管理,可以轻易地把网络设备从网络中隔离出来,而不影响对其他节点的服务。星型拓扑结构可以非常容易地通过连接其他节点或网络来进行扩展,同时提供了将网络扩展为高速网络互连的最佳选项。星型拓扑结构是最流行的拓扑结构,因此适用于这种网络类型的设备范围也更广一些。

这种结构的缺点在于,集线器是单独的失效点。如果集线器失效了,所有连接在其上的节点都不能进行通信(除非集线器中内建有冗余提供备份措施)。另一个缺点是,星型拓扑结构需要的电缆比总线拓扑结构多,但星型拓扑结构的布线和连接器比总线结构的便宜。

2.各连接类型的监听

监听的目的是获取所需的数据报,因此监听目标的选择是十分重要的。对于不同的网络拓扑结构,监听点(安装嗅探器的节点)的选取决定了所能监听到的信息量。

1)总线拓扑

总线拓扑结构网络的信息总是在主干电缆上以广播的方式传播,因此在主干电缆上任意一点接收到的信息都是相同的,如图9.6(a)所示,图中ABCDE各点都是等效的。所以对于总线拓扑的网络,只要将监听节点插入所要监听的网络,即可获得在网络上传输的所有数据报。2)环型拓扑

环型拓扑结构网络与总线拓扑结构传输信息方式相似,信息在环型的主干电缆上以广播的方式传播,因此如图9.6(b)所示,图中ABCD各点等效。所以对于环型拓扑的网络,只要将监听节点插入所要监听的网络,即可获得在网络上传输的所有数据报。

3)星型拓扑

监听点在星型拓扑结构网络中的位置根据中心节点的类型不同而不同。星型拓扑网络的中心节点分为Hub和Switch两种类型(两者联系和区别参见“Hub原理与交换机设置互联”的共享式与交换式网络相关章节)。以Hub为中心的星型拓扑网络称为共享型网络,以Switch为中心的星型拓扑网络称为交换型网络。在共享式星型网络中,Hub将各节点的数据报向所有的端口广播,因此只要将监听点接入Hub的任一空闲端口或嵌入Hub至任一节点间的通信链路即可获取所有数据报(如图9.6(c)所示);在交换式星型网络中,Switch仅仅将数据报向对应的端口转发,要获取某一节点的数据报,只能将监听点嵌入至该点的数据链路或对交换机进行端口镜像,因此不可能同时获取在网络上传输的所有的数据报文。如图9.6(d)所示,在交换型星型拓扑网络中,要获取所有目标或源为A节点的数据报文,只能在交换机处设置镜像端口,引出监听点A′(参见“Hub原理与交换机设置互联”的ConfigurePortMirroring相关章节);或者将监听点置于A″处。

综上所述,在不考虑通信链路保密性的前提下,交换式的星型拓扑结构是几种结构中数据保密性最好的,因此在实际中得到了广泛的应用。图9.6不同拓扑网络监听点示意图

9.2常见的IP数据报

9.2.1IPv4头结构

IP数据报头最小长度是5个字(20字节,1个字=4字节),如果有其他选项的话,报头可能会更长。IPv4数据报中的数据(包括报头中的数据)以32位(4字节)的方式来组织。IPv4数据报头中包含至少12个不同字段,且在没有选项时长度为20字节,但在包含选项时可达60字节。数据报结构如图9.7所示。图9.7IPv4头结构

(1)版本号(VERS):对于IPv4来说,版本号为4。

(2)报头长度(HLENS):范围是5~15个字。

(3)服务类型(ServiceType):表示数据报的服务类型TOS,即处理的优先级,包括延时、吞吐量、可靠性或代价,在IPv4中的应用并不广泛。

(4)报文总长度(TotalLength):以字节为单位。限定了IP数据报的最大长度为65 535字节,网络主机可以使用数据报长度来确定一个数据报的结束和下一个数据报的开始;当传送长度超过65535字节的IP数据报时,大多数的链路层都会分片。主机一般要求接收的数据报不超过576字节。由于TCP把用户数据分成若干片,因此,一般来说这个限制不会影响TCP。(5)标识符(ID):该16位标识符由产生它的主机惟一指定给数据报,分段后的数据报共享同一个数据报ID,有助于接收主机对分段的数据报重装。

(6)标志位(FLG):包括三个1位标志,用于标识报文是否允许被分段和是否使用了这些域。第一位保留并设为0;第二位标识报文能否被分段;0表示报文可以被分段,1表示报文不能被分段;第三位只有在第二位为0时才有意义,这一位标识此报文是否是这一系列分段的最后一个,或者接收应用程序时是否还希望有更多的段,0指示报文是最后一个。

(7)分段偏移(FragmentOffset):接收主机时,同时使用标志位和分段偏移,以重组被分段的数据报。这个值以64位为单位递增。(8)生存时间(TTL):代表数据报在被丢弃前能够穿越的最大主机跳数,TTL的初始值由源主机设置(通常为32或64),每经过一个处理节点减1。当该字段的值为0时,报文就被认为是不可转发的,之后产生一个ICMP报文并发回源主机,不可转发的报文被丢弃。

(9)协议(Protocol):指明数据报中携带的净荷类型,主要标识所使用的协议,一般是指TCP协议、UDP协议、ICMP报文和IGMP报文。

(10)头校验和(HeaderChecksum):目的是保证报文头的正确性,目的主机、网络中的每个网关要重新计算报文头的校验和,如果计算出的校验和与报文所含的校验和不同,就必须丢弃该报文。

(11)源IP地址(SourceIPAddress):指明数据报的发送方地址。

(12)目的IP地址(DestinationIPAddress):指明数据报的接收方地址。

(13) IP选项(IPOptions):在IPv4中,IP选项主要用于网络测试和调试。

(14)填充区(Padding):为了保证IP头长度是32位的整数倍,要填充额外的0。由图9.1可以得知,IPv4的网际层是无连接的,网络中的转发设备可以自由决定通过网络的报文的理想转发路径;不提供任何上层协议(如TCP)的应答、流控、顺序化功能;不能用于传输IP报文中数据到正确目的地的应用程序。这些功能是由TCP/UDP等上层协议完成的。9.2.2TCP

1. TCP的服务

在一个TCP连接中,仅有两方进行相互通信。TCP通过如下方式来提供可靠性连接:

(1)用户数据被分割成TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段(Segment)(见图9.2)。

(2)当TCP发出一个段后,启动一个定时器,等待目的端收到这个报文段的确认。如果不能及时收到一个确认信息,将重发这个报文段。

(3)当TCP收到来自TCP连接另一端的数据时,将发送一个确认信息。这个确认信息不是立即发送的,通常推迟几分之一秒。

(4) TCP将保持首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段并对收到此报文段的事件进行确认(希望发送端超时重发)。

(5)由于TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP将对收到的数据进行重新排序后,以正确的顺序交给应用层。

(6)由于IP数据可能会发生重复,TCP的接收端必须丢弃重复的数据。

(7) TCP还提供流量控制。TCP连接的双方都有固定大小的缓冲空间。接收端只允许发送端发送接收端缓冲区所能容纳的数据,防止发送信息较快的主机导致较慢主机的缓冲区溢出。

两个应用程序通过TCP连接交换字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(ByteStreamService)。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。另外,TCP对字节流的内容不作任何解释,TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释是由TCP连接双方的应用层完成的。

2. TCP报文头

TCP数据被封装在一个IP数据报中,如图9.8所示。图9.8TCP数据在IP数据报中的封装图9.9给出了TCP首部的数据格式。如果不计任选字段,通常是20个字节。图9.9TCP包首部(1)源端口(SourcePort):16位的源端口字段包含了初始化通信的端口号。源端口和源IP地址的作用是标识报文的返回地址。

(2)目的端口(DestinationPort):16位的目的端口字段定义了传输的目的地端口号,指明接收报文的计算机上的应用程序地址接口。

每个TCP段都包含源端和目的端的端口号,用于寻找发送端和接收端应用进程。这两个参数加上IP首部中的源端IP地址和目的端IP地址惟一确定一个TCP连接。一个IP地址和一个端口号也称为一个插口(Socket)。插口对(SocketPair)(包含客户IP地址、客户端口号、服务器IP地址和服务器端口号的四元组)可惟一确定互联网络中每个TCP连接的双方。(3)序号字段(InitialSequanceNumber):该序号是32bit的无符号数,到达232-1后又从0开始,表示在这个报文段中的第一个数据字节的编号。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号字段对每个字节进行计数。在动态路由网络中,报文很可能使用不同的路由,因此,报文可能乱序。利用序号字段可以纠正传输导致的乱序,从而重组分段的报文。

(4)确认序号(AcknowledgmentNumber):TCP使用32位的应答(ACK)域标识下一个希望收到的报文的第一个字节的编号,收到ACK报文的源计算机会知道哪些特定的段已被收到。每个ACK的号是应答报文的序列号,这个域只在ACK标志被设置时才有效。

(5)首部长度(DataOffset):长为4位,该字段以Word(32bit)为单位计量TCP头长度。

(6)保留字段(ReservedBits):是6位恒为0的域,为将来定义新的用途保留。

(7) URG:紧急指针有效。

(8) ACK:确认序号有效。

(9) PSH:接收方应该尽快将这个报文段交给应用层。

(10) RST:重置连接。

(11) SYN:同步序号用来发起一个连接。

(12) FIN:发送端完成发送任务。(13)窗口大小:该字段表明接收端声明可以接收的TCP数据段的大小。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端期望接收的字节数。窗口大小是一个16位字段,因而窗口大小最大为65535字节。

(14)校验和(Checksum):16位的数据校验段是一个强制性的字段,由发送端计算存储,由接收端进行验证。校验和对整个TCP报文段进行校验,包括TCP首部和TCP数据。如果收到的内容没有被改变过,双方的计算结果应该完全一样,从而保证了数据的有效性。(15)紧急指针(UrgentPoint):只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。

(16)选项(Option):常见的可选字段是最长报文大小(MSS,MaximumSegmentSize)。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项,指明本端所能接收的最大报文段长度。

(17)数据段(Data):TCP报文段中的数据部分是可选的。在连接建立和连接中止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,仍然要发送一个没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

3.建立TCP连接

为了建立一条TCP连接,双方进行如下通信(如图9.10所示):

(1)请求端(通常称为客户)发送一个SYN段,指明客户打算连接的服务器的端口,以及初始序号(SEQ)。这个SYN段为报文段1。

(2)服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1,用以对客户的SYN报文段进行确认。一个SYN占用一个序号。

(3)客户必须将确认序号设置为服务器的ISN加1,用以对服务器的SYN报文段进行确认(报文段3)。

上述三个过程的完成表明建立了连接,该过程也称为三次握手(Three-wayHandshake)。图9.10建立连接的三次握手机制

4.中止TCP连接

建立一个连接需要三次握手,而中止一个连接要经过四次握手,它是由TCP的半关闭(half-close)特性造成的。由于TCP是全双工连接,每个方向的连接必须单独关闭,因此当一方完成数据发送任务后必须发送一个FIN标志来中止这个方向的连接。当一端收到一个FIN后,必须通知应用层另一端已经中止了该方向的数据传送。发送FIN通常是应用层关闭连接的结果。

TCP连接收到一个FIN标志只意味着对方已不再发送数据,但己方仍能发送数据,这是半关闭型应用。正常关闭过程如图9.11所示。图9.11中止连接的四次握手机制9.2.3UDP

UDP是一个简单的面向数据报的运输层协议。进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP协议与TCP等面向流字符的协议不同,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。UDP数据报封装成IP数据报的格式如图9.12所示。图9.12UDP数据在IP数据报中的封装UDP不提供可靠性,它把应用程序的数据发送出去,但是并不保证它们能到达目的地。UDP是小型的、资源占用率很低的一种传输层协议,实际操作比TCP快。因此,它适合于不断出现的、和时间相关的应用(如IP上传输语音和实时的可视会议),以及其他的网络功能(如在路由器之间传输路由表更新,或传输网络管理/监控数据)。这些功能,虽然对网络的可操作性很关键,但是,如果使用可靠的TCP传输机制会占用过多的网络资源。不提供可靠性的协议并不意味着是无用协议,它只意味着设计用于支持不同的应用类型。

UDP报文头的各字段如图9.13所示。图9.13UDP包首部(1)源端口(SourcePort):源端口是发送端上的连接端口。源端口和源IP地址可作为报文的返回地址。TCP端口号与UDP端口号是相互独立的。

(2)目的端口(DestinationPort):目的端口是接收端上的连接端口。目的端口用于把到达接收端的报文准确无误地转发。

(3)信息长度(TotalLength):该字段为16位,存储UDP首部和UDP数据的字节长度,最小值为8字节。

(4)校验和(Checksum):是一个基于报文的内容计算得到的16位的错误检查域。接收端执行和发送端相同的数学计算,若两个计算值不同则表明报文在传输过程中出现了错误。9.2.4ARP

数据链路(如以太网或令牌环网)都有自己的寻址机制(通常为48bit地址),这是基于数据链路的任何网络层都必须遵从的。一个物理网络(如以太网)可以同时被不同的网络层使用。例如,一组使用TCP/IP协议的主机和另一组使用某种PC网络软件的主机可以共享相同的电缆。

当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口的,设备驱动程序从不检查IP数据报中的目的IP地址。地址解析为这两种不同的地址形式提供映射,即提供32 bit的IP地址和数据链路层使用的任何类型的地址之间的转换。

ARP为IP地址到对应的硬件地址之间提供动态映射,即将逻辑的Internet地址翻译成对应的物理硬件地址。动态表明这个过程是自动完成的,应用程序用户或系统管理员不必关心。

1. ARP工作过程

假设在一个以太网中,客户端要将一个IP报文发送到服务器端,那么客户端必须把32bit的IP地址转换成48bit的以太网地址。

(1) ARP以广播的方式发送ARPRequest数据帧给以太网上的每个主机,如图9.14中的虚线所示。ARP请求数据帧中包含目的主机的IP地址,意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。图9.14ARP操作过程(2)目的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。这个ARP应答包含IP地址及对应的硬件地址。

(3)收到ARP应答后,主机间通过使用ARP协议获得的硬件地址进行通信。

ARP要求网络接口有一个硬件地址。在硬件上进行的数据帧交换必须有正确的接口地址。TCP/IP的地址是32bit的IP地址,且知道主机的IP地址并不能让内核(如以太网驱动程序)发送数据帧给主机,内核必须知道目的端的硬件地址才能发送数据。ARP的作用是指在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知链路每一端的IP地址,并不涉及以太网地址这样的硬件地址。

2. ARP分组格式

在以太网上解析IP地址时,ARP请求和应答分组的格式如图9.15所示(ARP亦可用于解析其他类型网络的IP地址以外的地址,紧跟着帧类型字段的前四个字段决定了最后四个字段的类型和长度)。

(1)目的地址(DestinationAddress):该字段为6字节,存储以太网的目的地址。

(2)源地址(SourceAddress):该字段为6字节,存储以太网的源地址。(3)以太网数据帧类型(EtherType):该字段为2字节,存储以太网数据帧类型,表示后面数据的类型。对于ARP请求/应答来说,该字段的值为0x0806。

上述三个字段组成了以太网帧首部(见图9.2),以太网报头中DestinationAddress为全1的特殊地址是广播地址,电缆上的所有以太网接口都必须接收广播的数据帧。因此ARP协议在询问硬件地址时将目的地址设置为0xFFFFFFFFFFFF,表明该数据帧是向全体硬件接口发出的。图9.15以太网传输的ARP请求和应答分组格式(4)硬件接口类型(HardwareType):该字段为2字节,用以识别硬件接口类型,0x0001表示以太网接口,其他接口对应的值如表9.3所示。表9.3硬件接口类型一览表(5)协议类型(ProtocolType):该字段为2字节,标识发送设备所使用的协议,在TCP/IP中,这些协议通常是EtherType,以0x0800表示。

(6)硬件地址长度(LengthofHarewareAddress):该字段为1字节。

(7)协议地址长度(LengthofProtocolAddress):该字段为1字节。

上述两个字段以字节为单位,对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4,表明硬件地址即MAC地址为6字节,协议地址即IP地址为4字节。

(8)操作类型(Opcode):该字段为2字节,区分协议的四种操作,即ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。ARP请求和ARP应答的帧类型字段值是相同的,因此必须用操作类型字段将其区分。

(9)存储发送端硬件地址(Sender’sHardwareAddress):该字段为6字节。

(10)存储发送端协议地址(Sender’sProtocolAddress):该字段为4字节。

(11)存储目的端硬件地址(TargetHardwareAddress):该字段为6字节。

(12)存储目的端协议地址(TargetProtocolAddress):该字段为4字节。对于一个ARP请求来说,除目标端的硬件地址外的所有其他的字段都有填充值。当系统收到一份目标端为本机的ARP请求报文后,首先把硬件地址填进去,然后用两个目标端地址分别替换两个发送端地址,并把操作类型置为2,最后把它发送回去。9.2.5ICMP

ICMP是IP层的一个组成部分,通常由IP层或更高层协议(TCP或UDP)调用,主要功能是传递差错报文以及其他需要注意的信息。部分ICMP报文把差错信息返回至用户进程。

ICMP报文是在IP数据报内部被传输的,如图9.16所示。图9.16ICMP数据在IP数据报中的封装类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。

校验和字段覆盖了整个ICMP报文。对于ICMP报文来说,校验和是必需的。

1. ICMP报文类型

ICMP的报文类型由报文中的类型字段和代码字段来共同决定,如表9.4所示。表中的最后两列表明ICMP报文是查询报文还是差错报文。对ICMP差错报文有时需要作特殊处理,因此需要对它们进行区分。例如,在对ICMP差错报文进行响应时,不能生成另一个ICMP差错报文(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错继续产生差错,这样会产生无限循环)。ICMP差错报文包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节,这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。为了防止由于ICMP差错报文响应所引发的广播风暴,协议规定当接收端收到下列的报文时不会产生ICMP差错报文:

(1) ICMP差错报文(但ICMP查询报文可能会产生ICMP差错报文)。

(2)目的地址是广播地址或多播地址的IP数据报。

(3)作为链路层广播的数据报。

(4)不是IP数据报第一个分片的数据报。

(5)源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。表9.4ICMP报文类型

2. Ping程序与ICMP回显报文

Ping程序的功能是对两个TCP/IP系统的连通性进行测试。该程序发送一份ICMP回显请求查询报文给主机,并等待返回ICMP回显应答,利用ICMP回显请求和回显应答报文,而不经过传输层(TCP/UDP)。

一般来说,如果不能Ping通某台主机,那么就不能连接到该主机。反过来,如果不能连接到某台主机,就可以用Ping来确定问题出在哪里。Ping还能测出本机到这台主机的往返时间,以确定该主机离我们有“多远”。但是随着网络安全意识的增强,出现了提供访问控制的网络设备,一台主机的可达性不只取决于IP层是否可达,还取决于使用何种协议以及端口号。Ping程序的运行结果可能显示某台主机不可达,但我们仍然可以使用该主机的服务。虽然如此,Ping程序仍然是检查网络故障的较好工具之一。

通常称发送回显请求的Ping程序为客户,称被Ping的主机为服务器。大多数的TCP/IP实现都在内核中直接支持Ping服务器。ICMP回显请求和回显应答报文如图9.17所示。图9.17ICMP回显请求和回显应答报文格式对于其他类型的ICMP查询报文,服务器必须响应标识符和序列号字段。另外,客户发送的选项数据必须回显。序列号从0开始,每发送一次新的回显请求就加1。Ping程序打印出返回的每个分组的序列号,从而查看是否有分组丢失、失序或重复。对于IP服务来说,这三种情况都有可能发生。9.2.6SNMP

SNMP通常用来管理网络设备并获取设备信息,通常用在TCP/IP网络中,尤其是大规模网络中。SNMP可用来将自身的状态发送给特殊的SNMP服务器软件,显示错误隐患及其他可能出现的问题。网络管理员使用SNMP可以在一个地方获取所有支持SNMP的网络节点的信息,并且可进行远程配置。

简单网络管理协议最初是为处理网络上的路由器而设计的。SNMP是TCP/IP协议族中的一员,但它并不依赖于IP。目前大部分SNMP都使用IP协议,但SNMP仍是独立的协议(例如,它也可以用于Novell公司SPX/IPX中的IPX协议之上)。

SNMP并不是单个协议,它由用于网络管理的三个协议组成。组成SNMP协议的三个部分及功能如下所示:

(1)一个管理信息库MIB(ManagementInformationBase)。

管理信息库包含所有代理进程的可被查询和修改的参数。RFC1213[McCloghrieandRose1991]定义了第二版的MIB,叫做MIB-Ⅱ。

(2)关于MIB的一套公用的结构和表示符号,叫做管理信息结构(SMI,StructureofManagementInformation)。这个在RFC1155[RoseandMcCloghrie1990]中定义。例如:SMI定义计数器是一个非负整数,它的计数范围是0~4294967295,当达到最大值时,又从0开始计数。(3)管理进程和代理进程之间的通信协议,叫做简单网络管理协议(SNMP,SimpleNetworkManagementProtocol)。在RFC1157[Caseetal.1990]中定义。SNMP包括数据报交换的格式等内容。尽管可以在传输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。

上面提到的RFC所定义的SNMP叫做SNMPv1,或者就叫做SNMP。截至今日,又有一些新的关于SNMP的RFC发表,在这些RFC中定义的SNMP分别叫做SNMPv2和SNMPv3。本节只介绍SNMPv1的主要内容。

1.协议

关于管理进程和代理进程之间的交互信息,SNMP定义了五种报文:

(1) get-request操作:从代理进程处提取一个或多个参数值。

(2) get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。

(3) set-request操作:设置代理进程的一个或多个参数值。

(4) get-response操作:返回一个或多个参数值。这个操作是由代理进程发出的。它是 (3) 中操作的响应操作。

(5) trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。前面的三个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的(为简化起见,前面三个操作今后叫做get、get-next和set操作)。图9.18描述了这五种操作。图9.18SNMP的五种操作这些操作中的前四种操作是简单的请求应答方式(也就是管理进程发出请求,代理进程应答响应),而且在SNMP中往往使用UDP协议,可能发生管理进程和代理进程之间数据报丢失的情况,因此一定要有超时和重传机制。

管理进程发出的前面三种操作采用UDP的161端口。代理进程发出的Trap操作采用UDP的162端口。由于收发采用了不同的端口号,所以一个系统可以同时是管理进程和代理进程。

图9.19是封装成UDP数据报的五种操作的SNMP报文格式。图9.19SNMP报文格式在图中对IP和UDP的首部长度进行了标注。各个字段的内容和作用为:

(1)版本字段是0。该字段的值是通过SNMP版本号减去1得到的,显然0代表SNMPv1。

(2) PDU(ProtocolDataUnit),协议数据单元,也就是分组。表9.5显示了各种PDU的值和相对应的类型名称。表9.5SNMP报文中的PDU类型(3)共同体字段是一个字符串,是管理进程和代理进程之间的口令,是明文格式。默认的值是public。

(4)请求标识。对于get、get-next和set操作,请求标识由管理进程设置,然后由代理进程在get-response中返回。这个字段的作用可将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配,此外还允许管理进程对一个或多个代理进程发出多个请求,并且将返回的众多应答进行分类。

(5)差错状态字段是一个整数,是由代理进程标注的,指明是否有差错发生。表9.6是差错状态、名称和描述之间的对应关系。表9.6SNMP差错状态的值(6)差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数上。它是由代理进程标注的,并且只有在发生noSuchName、readOnly和badValue差错时才进行标注。

在get、get-next和set的请求数据报中,包含了变量名称和变量值。对于get和get-next操作,变量值部分被忽略,也就是不需要填写。对于trap操作符(PDU类型是4),SNMP报文格式会有所变化。

2.管理信息结构

SNMP中,数据类型并不多。下面讨论这些数据类型,但不必关心这些数据类型在实际中是如何编码的。

(1) INTEGER:一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志只有允许转发时的1和不允许转发时的2两种),有些整型变量定义为一个特定的范围(例如,UDP和TCP的端口号范围是0~65535)。

(2) OCTERSTRING:0或多个8bit字节,每个字节值在0~255之间。对于这种数据类型和下一种数据类型的BER(BasicEncodingRules)编码,字符串的字节个数要超过字符串本身的长度。这些字符串是不以NULL结尾的字符串。

(3) DisplayString:0或多个8bit字节,但是每个字节必须是ASCII码。在MIB-Ⅱ中,该类型的变量不能超过255个字符(0个字符是可以的)。

(4) OBJECTIDENTIFIER:对象标识符。

(5) NULL:代表相关的变量没有值。例如,在get或get-next操作中,变量的值就是NULL,这些值有待到代理进程中获取。

(6) IpAddress:4字节长度的OCTERSTRING,是以网络顺序表示的IP地址。每个字节代表IP地址的一个字段。

(7) PhysAddress:OCTERSTRING类型,代表物理地址(例如6个字节的以太网物理地址)。

(8) Counter:非负的整数,可从0递增到232-1(4294976295),达到最大值后归0。

(9) Gauge:非负的整数,取值范围是0~4294976295(或增或减)。达到最大值后锁定,直到复位。

(10) TimeTicks:时间计数器,以0.01秒为单位递增,不同的变量可以有不同的递增幅度,所以在定义这种类型的变量的时候,必须指明递增幅度。

(11) SEQUENCE:这一数据类型与C程序设计语言中的结构体类似。一个SEQUENCE包括0个或多个元素,每个元素又是另一个ASN.1数据类型。在这个变量中包含两个元素:

①IpAddress类型中的udpLocalAddress,表示IP地址。

②INTEGER类型中的udpLocalPort,0~65535,表示端口号。

(12) SEQUENDEOF:这是一个向量的定义,其中所有元素具有相同的类型。如果每一个元素都具有简单的数据类型,例如整数类型,就可得到一个简单的向量(一个一维向量)。但是,SNMP在使用这个数据类型时,其向量中的每一个元素都是一个SEQUENCE(结构),因而可以将它看成为一个二维数组或表。例如,名为udpTable的UDP监听表(listener)就是这种类型的变量。它是一个二元的SEQUENCE变量。每个二元组就是一个udpEntry,如图9.20所示。在SNMP中,对于这种类型的表格并没有标注它的列数。图9.20表格形式的udpTable变量

3.对象标识符

对象标识是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,而是由一些权威机构进行管理和分配的。

对象标识是一个整数序列,以点“.”分隔。这些整数构成一个树型结构,类似于DNS或Unix的文件系统。对象标识从树的顶部开始,顶部没有标识,以root表示(这和Unix中文件系统的树遍历方向非常类似)。

图9.21显示了在SNMP中用到的这种树型结构。所有的MIB变量都从.2.1这个标识开始。图9.21管理信息库中的对象标识树上的每个节点同时还有一个文字名,例如标识.2.1就和ernet.mgmt.mib对应。实际上,管理进程和代理进程进行数据报交互时,MIB变量名是以对象标识来标识的,当然都是从.2.1开始的。

在图9.21中,除了给出了mib对象标识外,还给出了ernet.private.enterprises(.4.1)这个标识,这是为厂家自定义而预留的。

9.3Wireshark的使用

9.3.1数据报捕捉

Wireshark支持以下四种方式启动数据包捕捉。

(1)可以使用工具栏“”图标,打开“CaptureInterfaces”对话框,浏览可用本地网络接口(见图9.22),选择所需进行捕捉的接口启动捕捉。图9.22浏览可用本地网络接口图9.23CaptureOptions对话框

CaptureOptions对话框分为Capture、CaptureFile(s)、StopCapture…、DisplayOptions、NameResolution和按钮六个区域。

① Capture区域中,Interface指定进行捕捉的借口,每次只能选择一个接口。IPaddress表示选择接口的IP地址。Link-layerheadertype表示数据链路层头类型,默认使用以太网(Ethernet)类型。Buffersize表明捕获数据包时使用的内存缓存大小。Capturepacketsinpromiscuousmode指定Wireshark捕捉包时,接口为混杂模式(如果该项未指定,则只捕获发送给本机的数据包)。Limiteachpacketto指定捕捉过程中,每个包的最大字节数。CaptureFilter指定只捕捉特定的数据包。

②CaptureFile(s)区域中,File指定捕捉数据存储的文件名,空白表明数据存储在临时文件夹。Usemultiplefiles表明指定条件达到临界值时,将自动生成一个新文件。Nextfileeverynmegabyte(s)/minutes(s)指定捕捉文件容量或持续时间达到指定值,将切换到新文件。Ringbufferwithnfiles指定生成n个文件的环形缓冲池。Stopcaputureafternfile(s)指生成指定数目文件后停止捕捉。

③StopCapture…区域中,...afternpacket(s)表明在捕捉到指定数目数据包后停止捕捉。...afternbyte(s)/kilobyte(s)/megabyte(s)/gigabyte(s)表明在捕捉到指定容量的数据后停止捕捉。...afternminute(s)表明在达到指定时间后停止捕捉。

④DisplayOptions区域中,Updatelistofpacketsinrealtime指定实时更新捕捉数据,未选定该选项则在捕捉结束之前不显示数据。Automaticscrollinginlivecapture指定有数据进入时实时滚屏,否则最新数据包放置在行末。Hidecaptureinfodialog指定在捕捉时隐藏捕捉信息对话框。

⑤NameResolution区域中,EnableMACnameresolution设置是否解析MAC地址的前24位生产厂家。Enablenetworknameresolution设置是否解析网络地址为域名。

⑥按钮区域中,start按钮进行捕捉,Cancel退出捕捉。9.3.4数据报分析

在捕捉过程中、捕捉完成后或者打开先前保存的包文件时,单击列表面板中的包,可以再看到关于这个包的详情(见图9.24)。图9.24包详情面板该窗口主要分为列表面板(PacketListPanes)、详情面板(PacketDetailPanes)、字节面板(PacketBytePanes)三个部分。列表面板中每行显示捕捉到的一个包,选择其中任何一个包,则其具体情况会显示在详情面板和字节面板中。

(1)列表面板:显示捕捉包的各项主要的信息。No.显示包在此次捕捉中的编号,即使使用过滤后编号也不会改变。Time显示包的捕捉时间戳。Source显示包的源地址。Destination显示包的目标地址。Protocol显示包的协议类型。Info显示包内容的附加信息。(2)详情面板:以树状方式显示包列表面板选中包的协议及协议字段。

(3)字节面板:以16进制转储方式显示当前选择包的数据。左侧显示包数据偏移量,中间栏以16进制表示包内容,右侧显示为对应的ASCII字符。根据包数据的不同,有时候包字节面板可能会由多个页面组成。

9.4数据采集与分析

9.4.1TCP连接

TCP是一个面向连接的协议。一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本小节将以一个实例详细介绍TCP连接是如何建立的以及通信结束后是如何终止的。

首先,打开Wireshark并开启数据报捕捉功能,然后打开命令行方式并键入如下命令:表9.7TCP连接建立和中止数据报

1.以太网数据帧

IP数据报的结构是相同的,区别只是其中的内容,因此SnifferPro捕捉到的七个数据报中的任意一个都有足够的代表性来说明IP数据报。数据报1的十六进制码如表9.8所示。表9.8数据报详细内容表9.9IP数据报和TCP数据报报头

2.建立和中止连接

为了建立一条TCP连接,双方进行如下通信(如图9.25所示):

(1)请求端(通常称为客户)发送一个SYN报文段指明客户打算连接的服务器的端口,以及初始序号(SEQ,图中为3267238601)。这个SYN报文段为报文段1。

(2)服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答,同时,将确认序号设置为客户的ISN加1,确认客户的SYN报文段。SYN将占用一个序号。

(3)客户必须将确认序号设置为服务器的ISN加1,确认服务器的SYN报文段(报文段3)。这三个报文段完成连接的建立。发送第一个SYN的一端将执行主动打开(Activeopen)。接收这个SYN并发回下一个SYN的另一端执行被动打开(Passiveopen)。

当一端为建立连接而发送它的SYN时,为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。RFC793[Postel1981c]指出ISN可看作是一个32位的计数器,每4ms加1。选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,从而导致某个连接的一方对它作出错误的解释。

图9.25中的报文段4发起中止连接,它在键入QUIT命令后由Telnet客户端关闭连接时发出。服务器收到QUIT命令后向TCP客户端发送一个FIN,用来关闭从服务器到客户的数据传送。当客户机收到这个FIN,发回一个ACK时,确认序号为收到序号加1(报文段5)。与SYN相似,FIN将占用一个序号。同时客户机向服务器传送一个文件结束符,接着这个客户机就关闭它的连接,导致TCP端发送一个FIN(报文段6),服务器发回一个确认,并将确认序号设置为收到序号加1(报文段7)。在图9.25中,发送FIN将导致应用程序关闭它们的连接,这些FIN的ACK是由TCP软件自动产生的。图9.25建立中止TCP连接

3.建立连接超时

有很多情况导致无法建立连接,其中一种情况是服务器主机没有处于正常状态。为了模拟这种情况,我们断开服务器主机的电缆线,然后向它发出Telnet命令。表9.10显示了TCP连接建立超时的情况。表9.10TCP连接建立超时9.4.2Ping

在局域网上运行Ping程序输出结果的一般格式如下:当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间。从上面的输出中可以看出,回显应答以发送的次序返回。Ping程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在ICMP报文中的时间值,即是往返时间。由于在Windows系列操作系统中自带的Ping程序计时器精度较低,往返时间小于10ms时都显示为0ms。

回显请求大约每隔1秒钟发送一次,从发送回显请求到收到回显应答,时间间隔基本相似。通常,第一个往返时间值要比其他的大,这是由于目的端的硬件地址不在ARP高速缓存中,在发送第一个回显请求之前要发送一个ARP请求并接收ARP应答。用SnifferPro对数据进行捕捉,可得到如表9.11所示的数据。表9.11Ping程序数据报

1. ARP数据

Wireshark采集到的数据分为两个部分。第一个部分为前两个数据报,是Ping程序查询IP地址为01的设备的硬件地址的ARP请求和回应,其具体内容如表9.12所示。

在表9.12中两个数据报的0x00~0x0d字节属于以太网数据帧头。由于两个数据报均为ARP协议的数据报,因此0x0c~0x0d的数据均为0806;第一个数据报为了查询地址,因此DestinationAddress项为FF-FF-FF-FF-FF-FF,表明数据报以广播方式发送;第二个数据报为目的地址的回复,因此该项DestinationAddress的内容为第一个数据报的SourceAddress。表9.12ARP数据报详细内容表中0x0e ~ 0x3b字节为ARP数据报,对应的内容见表9.13。表9.13ARP数据报

2. ICMP数据

Wireshark采集到的数据的第二部分为ICMP报文,由Echo和Echoreply报文组成。前者为主机向01设备发送的回显请求,后者为01设备的回应报文,其具体内容如表9.14所示。表9.14ICMP数据报详细内容在表9.14数据报的0x00~0x0d字节属于以太网数据帧头,由于ICMP数据报附加在IP数据报内,因此0x0c和0x0d字段分别为0x08和0x00。表中0x0e~0x21字节为IP数据报报头,0x22~0x49字节为ICMP数据,对应的内容见表9.15。表9.15ICMP数据报9.4.3Tracert

在局域网上运行Tracert程序,输出结果的一般格式如下:用Wireshark对数据进行捕捉,可得到如表9.16所示的数据。表9.16Tracert程序数据报

(1) Tracert输出“TracingroutetoWORKSTATION-C[]”时,数据报为1、2,作用是使用NetBIOS名字服务查询,获取设备的名称。

(2)报文3~8为本机向设备发出三个TTL为1的报文,由路由器01返回TTL定时器超时的报文,此时本机测定该段链路的响应时间,Tracert输出“116ms<10ms<10ms”。

(3)报文9~14为本机向设备01使用NetBIOS名字服务查询,请求获得设备的名称,但01不支持NetBIOS查询,返回错误信息,此时Tracert输出“01”。

(4)报文15~20为本机向设备发出三个TTL为2的报文,经路由器01后,由路由器返回TTL定时器超时的报文,此时本机测定该段链路的响应时间,Tracert输出“2<10ms<10ms15ms”。

(5)报文21~23为本机向设备使用NetBIOS名字服务查询,请求获得设备的名称,但不支持NetBIOS查询且不响应非本地的UDP数据报,因此无返回信息,此时tracert输出“”。

(6)报文24~29为本机向设备发出三个TTL为3的报文,经路由器01和后,由主机返回ICMPReply报文,此时本机测定该段链路的响应时间,Tracert输出“3<10ms<10ms16ms”。

(7)报文30为本机向设备使用NetBIOS名字服务查询,请求获得设备的名称,报文31为返回NetBIOS名字,此时Tracert输出“WORKSTATION-C[]”。9.4.4UDP数据

UDP是一种小型的传输层协议,操作执行快,适用于承载传输小批量的数据和一些与时间相关的数据(如WINS协议、SMB协议等)。例如,以Wireshark采集如下命令行数据,该命令向子网内所有的计算机发送一个“Hello!”的消息:

C:\>NETSend

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论