[摘要]本文给出了一个基于Web的、跨平台的校园网网络计费系统的初步设计与实施方案,并给出系统的模块结构和功能的描述,同时详细地探讨了计费信息获取子系统(底层数据报文截取及其接口)的分析、设计与实现。
[关键词]计费系统、底层数据报文截取、TCP/IP、FTP、数据报文、共享介质信息流量、虚拟设备、VxD技术、数据采集、数据控制
一、引言
因特网以其信息传送方便、快捷、费用低廉,并且可以实现资源共享等诸多优点,深受广大用户青睐。目前,我院已通过国家教科网连入因特网,给我们的教学、科研带来极大的方便,同时也不可回避因特网服务的计费问题。目前的网络虽然在速度上有了很大的提高,但是随着网络用户数量的迅速增加和传输量的增加(比如图片和多媒体资料越来越普遍),网络带宽仍然很紧张。对网络使用收取合理的费用一方面可以维持网络的运行和发展,另一方面,也可以促使用户合理使用网络资源。由于网络结构的多样性和计费规则的复杂性,为此我们分析我院校园网的特点,在校园网网络的软硬件上提出了一种校园网的网络计费系统的设计与实施方案。
作为计费信息系统的基础,计费信息的截取是系统整体的核心关键部分,该模块的分析、设计与实现好坏直接影响着系统的设计与实现和校园网的网络计费管理,本文对此进行详细的探讨和讨论。
二、系统设计和分析
国际上,计费管理负责监视和记录用户对网络资源的使用,并分配网络运行成本。其主要功能有:
我院校园网的主干网络采用高速非共享介质的网络结构,但是院内各部门与外界的互联均依赖共享介质,所以我们设计的校园网网络计费系统正是建立在这一"关口"上。
在共享介质网络中,流经这一网络的任何数据包,均可由这一网段的任何一台主机所截获。因此,把网络计费系统设计在与外界互联的网段上,即可统计出校园内各部门与外界的所有通信量。
具体情况如下:
⑴、因特网采用的是TCP/IP协议,所以Win32平台上的进程只要截获到所有的IP数据包,就可以分析出所需要统计的计费信息。对于统计信息分以下几种情况:FTP:又分上传和下载,下载的数据报信息不用列入统计范围,上传则需要;UDP:数据报信息需要统计;拨号上网:可以通过在路由器上生成的日志文件进行分析;电子邮件:也可以通过WindowsNTServer上的Nescape邮件服务器留下的日志文件进行统计,而不需要进行数据报的截获;⑵、后台的数据库信息管理通过由Delphi开发的管理信息系统采集上述的数据信息实现的,对FTP、UDP、拨号上网和电子邮件的信息进行再次整理、分析,统计出必要的数据存于数据库中,可供使用校园网服务的各部门查询其费用情况之用。⑶、计费信息用户查询子系统,用户通过页面浏览器访问,提交请求反馈该用户使用校园网信息服务的费用情况。查询子系统通过权限(如身份认证)和查询条件查询数据库的数据,输出该用户的需求的信息。
系统计费依据
三、计费信息获取子系统(底层数据报截取及其接口)的分析与设计
3.2截取部分的分析与设计
在计算机网络体系结构中,虽然TCP/IP体系结构不是国际标准,但占有非常重要的地位。世界上第一个分组交换网是美国军方的实验网ARPANET,它的体系结构也采用分层次的结构。当初的ARPANET现已发展成为世界上规模最大的计算机网络Internet,即因特网。在因特网所使用的协议中,最著名的就是运输层的TCP传输控制协议和网络层的IP互连网协议。TCP/IP体系结构已成为计算机网络的事实上的国际标准,也称为工业标准。又因为因特网采用的是TCP/IP协议(传输控制协议与互连网协议),流经共享介质的网络任何的数据报文遵循着该协议,所以Win32操作系统平台上的数据报截取进程模块只要截获到所有的TCP/IP数据报,从其报文的首部即可分析出所需的必要计费数据信息。
首先是分析TCP/IP网络体系下两个最主要的协议--互连网协议IP和传输控制协议的数据报文格式开始,从协议报文最基本的字段信息中提取出对计费管理有效的数据依据。
以下详细描述TCP/IP报文格式。
IP数据报文段的格式如下所示:
其中首部中几个重要字段的意义是:
而相应的TCP数据报文段的格式如下所示:
其中首部中重要字段的意义是:
其次是如何进行TCP/IP数据报文的截获。由于计费信息的实时动态性,及Win32操作系统的普遍性、易操作和可视化等优点,所以我们决定在Win32平台上编写底层数据报截取模块,但是Win32系统不提供底层设备的直接操作,于是我们利用Win32的编程特色,使用虚拟设备驱动程序的技术,使Win32系统对设备的控制如同对文件的操作,(前面已详细描述了VxD技术)任何流经共享介质网段的数据报文也必然会流经连接在共享介质网段上的计算机的设备(网卡),利用对虚拟设备驱动程序的读写就能够轻易地操作该设备,截获所有的TCP/IP数据报文。又因为在共享介质网段上流经的数据报文的流量是不可估算的,所以采用线程技术的编程思想,就能较好地处理数据报文的流量问题。
从上可见,网络计费管理系统的核心关键部分就在于"数据报文的截获----分类、统计、汇总相应的计费信息"两个子系统,前者充分利用Win32操作系统的特性和系统核心编进行数据报文的截取、后者采用数据库技术对计费信息的进行系统管理,两者的处理是相互独立的,但同时各自又有必然的联系。查询系统的虽然是一个独立的模块,但可以看成计费处理信息的一部分。
计费信息截获子系统,该子系统模块的详细结构图如下所示:
3.3流量控制的原理分析和总体设计
在任何网络体系结构的层次中,控制都是必不可少的功能,但不同的层次有不同的控制内容,不同层次之间的有不同的分工。TCP/IP体系结构中IP层同OSI/ISO体系结构中的网络层相似,其控制功能包括:差错控制、拥塞控制以及路径控制等。IP层作为TCP/IP体系结构中至关重要的一层,其控制功能是最复杂的。IP层协议ICMP,就是TCP/IP中传递网络控制信息的主要手段。同时,ICMP还提供差错报告功能,可以利用它实现校园网的流量控制。
如同其他高层协议数据一样,ICMP报文也是封装在IP数据报的数据部分中进行传输的,如图所示。
包含ICMP报文的IP数据报报头"协议"域指出数据区内容为ICMP报文。
ICMP报文也分为头标和数据区两大部分,其中头标包含"类型"、"代码"和"校验和"三个域。ICMP报文格式如图所示。
类型域所代表的意义如下表:
我们知道,网关的主要功能是进行数据报寻径并转发数据报,网关寻径和转发数据报并不总是能够成功的。在下述情况下,网关便会发现信宿不可到达:⑴信宿机硬件不在运行中(如故障、关机),⑵发送者指定的信宿地址不存在,⑶网关不知道去往信宿的路径。一旦发生以上情况,网关便会向信宿机发送"信宿不可到达"报文(如图)并抛弃相应数据报。
分析我院的网络体系结构,不难发现基于共享介质网络的很容易实现流量控制这一功能,只要伪造一个ICMP包即可达到干扰目的。当收到IP包时(不包含ICMP本身),分析其IP地址是否有效,如无效,则向信宿发送一个差错控制报文(ICMP)即可。在局域网传输的速度远远高于广域网,所以这个差错控制报文(ICMP)一定会比正确的信息快得多,导致正确的信息被当作无效数据抛弃,从而达到干扰的目的。这是关键的一个步骤,经过实验证明,使用码值0和1均可,因为所谓"信宿"四个层次的概念,从大到小依次为:网络、主机、协议、端口,因此采用1更合适。
四、系统结构和实现
4.1系统的结构
4.2系统的实现
网络计费系统在实现时分成三大模块:Win32平台截获数据报的进程模块和WindowsNTServer4.0上的数据库信息管理模块以及Web信息查询模块。
五、计费信息截获子系统的系统实现
5.1计费信息截获子系统(底层数据报文截取)的实现
基本数据结构的说明由于Win32的虚拟设备驱动程序技术使对设备的控制如同对文件的操作,任何流经共享介质网段的数据报文也必然会流经连接在共享介质网段上的计算机的设备(网卡),利用系统Win32操作系统的特性就能够轻易地操作该设备,截获所有的TCP/IP数据报文。
所以引用系统的IncludeHeadFile来定义数据结构:
structEtherAddr{unsignedcharAddrByte[6];};structEtherPacketHead{structEtherAddrDestEther;structEtherAddrSourEther;unsignedshortServType;};structIPAddr{unsignedcharAddrByte[4];};structIPPacketHead{BYTEVerHLen;BYTEType;WORDTtlLen;WORDId;WORDFlgOff;BYTETTL;BYTEProto;WORDChkSum;structIPAddrSourIP;structIPAddrDestIP;};
初始化过程初始化网卡设备的接口1、载入虚拟驱动程序参照3.1VxD技术2、绑定虚拟驱动程序到设备上if(!this->Bind(hVxD,ndis)){ShowMessage("无法绑定网络设备(网卡)");return;};
其中ndis的含义是设备名,一般是0000、0001等等。在Win32注册表的如下位置:HKEY_LOCAL_MACHINE/System/CurrentControlSet/control/net/0000(可从设置适配器的对话框中设置)
建立双线程
读线程专门负责网卡设备上读取数据报文,及将其放入缓冲区GetIpThread*GetIPPacket=newGetIpThread(true);GetIPPacket->Resume();//请求同步写线程负责从缓冲区读取数据报文,并对报文的网络协议值进行过滤,只有协议值为6时的报文才有效。及实时显示当前的状态和其它与Windows有关的操作。SaveInfo*SaveMemo=newSaveInfo(true);SaveMemo->Resume();
在程序中过滤的代码段如下:
if(FormMain->swaps(pEtherHead->ServType)==ETHER_PROTO_IP)//从以太网过滤出IP数据报文{……if(pIPHead->Proto==6)//TCP(6){……//协议值为6,即是TCP的数据报文……}……}
退出处理
在模块截取的日志文件实例为:
……210.33.89.106:1246:202.102.13.156:80:40:2000/5/21210.33.89.106:1543:204.178.112.166:80:40:2000/5/21210.33.89.105:1579:194.117.203.152:80:40:2000/5/21210.33.89.106:1246:202.102.13.156:80:40:2000/5/21210.33.89.106:1246:202.102.13.156:80:40:2000/5/21……
在WindowsNTServer上的计费处理部分中的数据处理模块将日志文件通过FTP协议获取,逐条记录分析、分类、统计和汇总,最后得出有效得计费管理信息,导入计费信息数据库中。这就是基本的接口处理。
5.2流量控制的设计与实现
设计与实现
建立一个合法用户的数据库如下表:
计费信息截获子系统,控制部分的详细结构图如下所示:
基本数据结构的说明
引用系统的IncludeHeadFile来定义数据结构:
structICMPPacketHead{BYTEType;BYTECode;WORDChkSum;}
初始化过程参照3.2截取部分的分析与设计
读线程专门负责网卡设备上读取数据报文,及将其放入缓冲区GetIpThread*GetIPPacket=newGetIpThread(true);GetIPPacket->Resume();//请求同步
干扰线程负责从缓冲区读取数据报文,并对报文的网络协议值进行过滤,只有协议值为6时的报文才有效。及判断无效IP进行干扰。SaveInfo*SaveMemo=newSaveInfo(true);SaveMemo->Resume();
在程序中过滤和干扰的代码段如下:if(isValid(Apsourip)||isValid(Apdestip))FormMain->MemoRpy->Lines->Add("合法用户");else{FormMain->MemoRpy->Lines->Add("非法用户");SendICMPPacket(FormMain->hVxD,pdestether,psourether,pdestip,psourip,Buffer,128);//发送ICMP包,干扰非法用户}
退出处理为了维护系统的安全稳定,模块退出是必须对打开的文件、设备进行逐一处理。
六、结束语
校园网网络计费系统的初步设计与实现如上所述,由于采用底层开发进行数据的截取,迅速获得必要的信息,使计费系统的运行更加迅速、准确、有效,适应校园网的网络管理要求。不可否认,底层数据报文这一模块的开发还不够完善,控制部分目前为止还只能手工输入合法用户的数据库,如IP地址和Mac地址一直是手工录入,而理论上应该是只要用户名和密码正确就可以全自动获取IP和Mac地址,从这一点上与163和169等大规模的信息服务网还有相当大的距离,为此该模块仍需不断的扩大、改进和完善。
值此论文定稿之际,谨向一直给予我悉心关怀和教诲的任午令教授和石银保老师表示深深的谢意。在毕业设计和论文的撰写中,导师都给予了热情的帮助和精心的教导。使我的毕设和论文得以完成。导师们严谨务实的治学作风,渊博的学识和诲人不倦的精神使我难以忘怀。