搜档网
当前位置:搜档网 › 北邮 计网实验2 IP和TCP数据分组的捕获和解析

北邮 计网实验2 IP和TCP数据分组的捕获和解析

北邮 计网实验2 IP和TCP数据分组的捕获和解析
北邮 计网实验2 IP和TCP数据分组的捕获和解析

实验报告

实验二:IP和TCP数据分组的捕获和解析

ytinrete

1.实验类别

协议分析型

2.实验内容和实验目的

本次实验内容:

1)捕获在连接Internet过程中产生的网络层分组:DHCP分组,ARP分组,IP数据分组,ICMP分组。

2)分析各种分组的格式,说明各种分组在建立网络连接过程中的作用。

3)分析IP数据分组分片的结构。

通过本次实验了解计算机上网的工作过程,学习各种网络层分组的格式及其作用,理解长度大于1500字节IP数据组分片传输的结构。

4)分析TCP建立连接,拆除连接和数据通信的流程。

3.实验组人数

单人组

4.实验环境

windows7

WireShark

5.实验步骤和实验结果

5.1 捕获DHCP报文并分析

打开软件,并设置过滤器为udp.port= =68则可捕获DHCP报文

分析DHCP分组格式:

OP:若是client 送给server 的封包,设为1 ,反向为2。

HTYPE:硬件类别,Ethernet 为1。

HLEN:硬件地址长度,Ethernet 为6。

HOPS:若封包需经过router 传送,每站加1 ,若在同一网内,为0。

TRANSACTION ID:DHCP REQUEST 时产生的数值,以作DHCPREPL Y 时的依据。SECONDS:Client 端启动时间(秒)。

FLAGS:从0 到15 共16 bits ,最左一bit 为1 时表示server 将以广播方式传送封包给client ,其余尚未使用。

Ciaddr:要是client 端想继续使用之前取得之IP 地址,则列于这里。

Yiaddr:从server 送回client 之DHCP OFFER 与DHCPACK封包中,此栏填写分配给client 的IP 地址。

Siaddr:若client 需要透过网络开机,从server 送出之DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在server 之地址。

Giaddr:若需跨网域进行DHCP 发放,此栏为relay agent 的地址,否则为0。

Chaddr:Client 之硬件地址。

Sname:Server 之名称字符串,以0x00 结尾。

File:若client 需要透过网络开机,此栏将指出开机程序名称,稍后以TFTP 传送。Options:允许厂商定议选项(Vendor-Specific Area),以提供更多的设定信息

查看DHCP的四次握手获得IP地址,缺省路由DNS等参数的过程。在DOS窗口执行命令ipconfig/release先释放已经申请的IP地址。

再执行ipconfig/renew。

Wireshark捕获四次握手

具体分析分析四次握手的过程:

1)第一次握手

本地端向网络以广播形式发送DHCP discover报文,等待网络中的DHCP server给出回应。

由抓包结果可知,discover报文第二层源mac地址为源端口mac,目的mac为广播地址ff:ff:ff:ff:ff:ff. 。三层源地址为0.0.0.0,目的地址为广播地址255.255.255.255。UDP源端口为68,目的端口为67。

当DHCP server接收到本地端发出的discover报文后,它会从那些还没有租出的地址范围内,选择最前面的空置IP ,连同其它TCP/IP 设定,响应给本地端一个DHCP offer 封包。由于客户端在开始的时候还没有IP 地址,所以在其DHCP discover 封包内会带有其MAC 地址信息,并且有一个XID 编号来辨别该封包,DHCP 服务器响应的DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer 封包会包含一个租约期限的信息,当本地端到了这个期限,会释放出IP,再次发送discover报文重新申请。

由抓包结果可得:

Client IP address =0.0.0.0(0.0.0.0)

Your(Client)IPaddress=10.201.18.140(10.201.18.140):DHCP Server分配给本地端的IP地址

DHCP Message Type=DHCP Offer :表示这是offer报文

Server identifier=10.3.9.3 (10.3.9.3):DHCP server的 IP地址

Ip address lease time=12 hour 表示租期是12小时

Subnet Mask=255.255.255.128 :子网掩码

Domain Name="https://www.sodocs.net/doc/8f4807859.html," : 域名

Router=10.201.18.129(10.201.18.129) :路由网关

本地端向网络以广播形式发送request报文作为响应,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。

由抓包结果可看出这是一个request报文,IP为我们刚刚申请的IP:10.201.18.140。

4)第四次握手

网络中的DHCP server接收到本地端发送的request之后,向本地端以单播方式回应DHCP ack报文,确认IP租约生效,整个过程结束

由抓包结果可以看出,这是一个ACK报文,内容类似于DHCP offer。

四次握手用简图可表示为:

DHCP分组在建立网络连接中用于给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

5.2 观察ARP和PING命令的执行过程

Arp分组格式为:

开始测试arp分组,在命令行中输入Ping 10.201.18.129

可见给10.201.18.129发送了4个数据包都得到了回复。

从抓包结果看

首先以广播的形式发出了一个长度为42的报文,内容是请求10.201.18.129的mac地址,请求告知10.201.18.140。

然后接收到一个长度为60的回复报文,头6个字节是本地的mac地址接着的6个字节就是对方的mac地址,这样我们就知道了对方地址。加进缓存表。

DHCP分组在建立网络连接中用于获取目标主机的mac地址。在以太网协议中规定,同一局域网中的一台主机要和另一台主机迚行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP 地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

5.3 IP数据分组

分组格式

实验结果:

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:default 正常时延、正常吞吐量、正常可靠性总长度Total length : 1454 数据分组长1454字节

标识Identification : 0x709b(28827) 标识为28827

标志Flags: 0x00 DF=0;MF=0;

片偏移Fragment offset:0 偏移量为0

生存周期Time to live:47 每跳生存时间为47秒

协议Protocol: TCP(6) 使用TCP协议

首部校验和Header checksum:0x4036[correct] IP头部校验和为0x4036,校验正确源地址Source:58.250.135.111 源地址:58.250.135.111

目标地址Destination:10.201.8.71 目标地址:10.201.8.71

5.4 ICMP 分组 分组格式:

实验结果

:

ICMP 是(Internet Control Message Protocol )Internet 控制报文协议。它是TCP/IP 协议族的一个子协议,用于在IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

字段 报文 解释 类型 Type :0 echo 响应 代码 Code: 0

echo 响应

校验和 Checksum:0x5543 校验和为0x5543校验正确 标识符 Identifier(BE):1 Identifier(LE):256 标识符 序列号

Sequence number(BE):24 Sequence number(LE):6144

序列号

5.5 分析IP数据分组的分片传输过程

ping -l 8000 https://www.sodocs.net/doc/8f4807859.html,

则捕捉到如下所示:

可见,整个8000的包被分成6个包,下面一一分析:

第一个

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:0x00 正常时延、正常吞吐量、正常可靠性总长度Total length : 1500 数据分组长1500字节

标识Identification : 0x02f5(757) 标识为757

标志Flags: 0x01 DF=0;MF=1(还有帧);

片偏移Fragment offset:0 偏移量为0

生存周期Time to live:64 每跳生存时间为64秒

协议Protocol: ICMP(1) 使用ICMP协议

首部校验和Header checksum:0xc46b[correct] IP头部校验和为0xc46b,校验正确

源地址Source:10.201.8.71 源地址:10.201.8.71

目标地址Destination:121.194.0.239 目标地址:121.194.0.239

数据段Data (1480 bytes) 数据段长度为 1480字节

第二个

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:0x00 正常时延、正常吞吐量、正常可靠性总长度Total length : 1500 数据分组长1500字节

标识Identification : 0x02f5(757) 标识为757

标志Flags: 0x01 DF=0;MF=1(还有帧);

片偏移Fragment offset:1480 偏移量为1480

生存周期Time to live:64 每跳生存时间为64秒

协议Protocol: ICMP(6) 使用ICMP协议

首部校验和Header checksum:0xc3b2[correct] IP头部校验和为0xc3b2,校验正确

源地址Source:10.201.8.71 源地址:10.201.8.71

目标地址Destination:121.194.0.239 目标地址:121.194.0.239

数据段Data (1480 bytes) 数据段长度为 1480字节

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:0x00 正常时延、正常吞吐量、正常可靠性总长度Total length : 1500 数据分组长1500字节

标识Identification : 0x02f5(757) 标识为757

标志Flags: 0x01 DF=0;MF=1(还有帧);

片偏移Fragment offset:2960 偏移量为2960

生存周期Time to live:64 每跳生存时间为64秒

协议Protocol: ICMP(6) 使用ICMP协议

首部校验和Header checksum:0xc2f9[correct] IP头部校验和为0xc2f9,校验正确

源地址Source:10.201.8.71 源地址:10.201.8.71

目标地址Destination:121.194.0.239 目标地址:121.194.0.239

数据段Data (1480 bytes) 数据段长度为 1480字节

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:0x00 正常时延、正常吞吐量、正常可靠性总长度Total length : 1500 数据分组长1500字节

标识Identification : 0x02f5(757) 标识为757

标志Flags: 0x01 DF=0;MF=1(还有帧);

片偏移Fragment offset:4440 偏移量为4440

生存周期Time to live:64 每跳生存时间为64秒

协议Protocol: ICMP(6) 使用ICMP协议

首部校验和Header checksum:0xc240[correct] IP头部校验和为0xc240,校验正确

源地址Source:10.201.8.71 源地址:10.201.8.71

目标地址Destination:121.194.0.239 目标地址:121.194.0.239

数据段Data (1480 bytes) 数据段长度为 1480字节

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:0x00 正常时延、正常吞吐量、正常可靠性总长度Total length : 1500 数据分组长1500字节

标识Identification : 0x02f5(757) 标识为757

标志Flags: 0x01 DF=0;MF=1(还有帧);

片偏移Fragment offset:5920 偏移量为5920

生存周期Time to live:64 每跳生存时间为64秒

协议Protocol: ICMP(6) 使用ICMP协议

首部校验和Header checksum:0x187[correct] IP头部校验和为0xc187,校验正确

源地址Source:10.201.8.71 源地址:10.201.8.71

目标地址Destination:121.194.0.239 目标地址:121.194.0.239

数据段Data (1480 bytes) 数据段长度为 1480字节

字段报文解释

版本Version: 4 版本为IPv4

首部长度Header length: 20 bytes 首部长20字节

服务类型Differentiated services codepoint:0x00 正常时延、正常吞吐量、正常可靠性总长度Total length : 628 数据分组长628字节

标识Identification : 0x02f5(757) 标识为757

标志Flags: 0x00 DF=0;MF=0(接下来没有帧了);

片偏移Fragment offset:7400 偏移量为7400

生存周期Time to live:64 每跳生存时间为64秒

协议Protocol: ICMP(6) 使用ICMP协议

首部校验和Header checksum:0xe436[correct] IP头部校验和为0xe436,校验正确

源地址Source:10.201.8.71 源地址:10.201.8.71

目标地址Destination:121.194.0.239 目标地址:121.194.0.239

数据段Data (608 bytes) 数据段长度为 608字节

由此可看出分段方式为8000=1480×5+608-8(多余的8字节为控制信息)

5.6 分析TCP建立连接,拆除连接和数据通信的流程

WireShark的Filter项填为tcp.port==21(仅观察FTP的TCP通信,FTP端口号为21)。捕获所有下面通信过程的TCP报文进行分析。

1) 观察TCP建立连接的三次握手和粗暴方式拆除连接的流程。

执行命令ftp https://www.sodocs.net/doc/8f4807859.html,

连接建立后直接按下Ctrl-C中止程序运行。

实验结果:

三次握手:

可以看出,本地端IP为:10.201.8.71 目标IP为:202.38.97.197

字段报文解释

源端口Source port: 59518 源端口:59518

目的端口Destination port: ftp (21) 目的端口:21 (FTP)

序列Sequence number: 0 (relative sequence number) 相对序列为0

首部长度header length :32 bytes 首部长度 32 字节

标志位Flags: 0x002 (SYN) 标志位只设置SYN,请求建立连接窗口大小Window size value : 8192 窗口大小:8192

校验Checksum: 0x84b7校验和为: 0x84b7

选项Options: (12 bytes) 选项是:12字节

可以看出本地端发出第一次握手,sequence=0,请求链接SNY=1。

北邮数据库实验四数据库模式的设计

北邮数据库实验四数据 库模式的设计 Revised by Chen Zhen in 2021

北京邮电大学 实验报告 课程名称数据库 实验名称数据库模式的设计班级 姓名 学号 指导老师 成绩_________ 实验

.1.实验目的 1.了解E-R图的基本概念和根据数据需求描述抽象出E-R图并将其转换为数据库逻辑模式进而实现数据库中的表和视图。 2.通过进行数据库表的建立操作,熟悉并掌握Power designer数据库表的建立方法,理解关系数据库表的结构,巩固SQL标准中关于数据库表的建立语句。 3.通过对Power designer中建立、维护视图的实验,熟悉Power designe中对视图的操作方法和途径,理解和掌握视图的概念。 .2.实验内容 1 针对以下需求信息,尽可能全面地给出各个实体的属性和实体之间的系。 在线考试系统需求信息如下: 在线考试系统是关于一门课程的授课教师安排自己的学生在线参加各种考试的应 用,如果阶段性考试,期中考试和期末考试等。在线考试系统要求有用户的登录和登出。在线考试系统主要包括用户管理、试题管理、试卷管理和考试管理功能。需要实现教师输入试题,从试题生成试卷;学生参加考试获取试卷,提交答案和给出考试成绩等主要逻辑功能。 系统的用户包括教师、学生角色,一个用户有且只有一种角色。 鉴于在线考试的客观条件限制,试题完全采用单项选择形式。试题有所属知识点、内容、分值、备选答案和唯一正确答案等属性组成。课程的知识点是确定的,可以扩展,一道试题只能考察一个知识点。

教师录入各种试题构成题库,并根据考察的知识点不同生成试卷,相同知识点的试题只能在一张试卷中出现一次,试卷由试卷标题和一定数量(即知识点的数量)的试题组成。试卷生成后,教师指定某次考试使用的试卷,学生参加考试使用统一的试卷,考试信息还包含考试标题、任教老师、考试时间。 学生登录后,可以参加考试并在提交答案后立刻得到自己的考试成绩,也可以查看自己的考试历史记录。教师登录后可以查看学生的成绩。 ?2将E-R图输入Power Designer形成概念模型 ? 3 使用Power Designe将输入的E-R图转换成数据库物理模型 ? 4 使用Power Designe将输入的数据库物理模型转化为生成数据库中的表和视图的脚 本 ? 5 执行SQl脚本,生成表和视图 ? 6 成功后,查看生成的表和视图的情况 .3.实验环境 普通PC、Windows系列操作系统、IBM DB2 数据库管理系统 .4.实验步骤、结果与分析 1)五个实体: 用户: 用户ID( UserID )、用户名(UserName)、角色(Role)、密码(Password). 试题库(ItemBank): 题目代码(ItemID)、题目内容(Icontent)、分数(Iscore)、选项(Ioption)、正确答案(Ianswer)、知识点代码(PointID)(froeign). 知识点(KonwledgePoint): 知识点代码(PointID)、知识点内容(Pcontent)、知识点学科(Psubject). 试卷(Paper):

北邮信通院数据结构实验报告三哈夫曼编码器之欧阳光明创编

数据结构实验报告 欧阳光明(2021.03.07) 实验名称:实验三树——哈夫曼编/解码器 学生姓名: 班级: 班内序号: 学号: 日期: 2014年12月11日 1.实验要求 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统 计,统计每个字符的频度,并建立赫夫曼树 2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编 码,并将每个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并 将编码后的字符串输出。 4、译码(Decoding):利用已经建好的赫夫曼树对编码后的字符 串进行译码,并输出译码结果。 5、打印(Print):以直观的方式打印赫夫曼树(选作) 6、计算输入的字符串编码前和编码后的长度,并进行分析, 讨论赫夫曼编码的压缩效果。 测试数据: I love data Structure, I love Computer。I will try my best to study

data Structure. 提示: 1、用户界面可以设计为“菜单”方式:能够进行交互。 2、根据输入的字符串中每个字符出现的次数统计频度,对没有 出现的 字符一律不用编码。 2. 程序分析 2.1 存储结构 Huffman树 给定一组具有确定权值的叶子结点,可以构造出不同的二叉树,其中带权路径长度最小的二叉树称为Huffman树,也叫做最优二叉树。

weight lchild rchildparent 2-1-1-1 5-1-1-1 6-1-1-1 7-1-1-1 9-1-1-1 weight lchild rchild parent

数据库实验5实验报告

淮海工学院计算机工程学院实验报告书 课程名:《数据库原理及应用》 题目:数据库的完整性 班级:软件132 学号:2013122907 姓名:莹莹

一.目的与要求 1.掌握索引创建和删除的方法; 2.掌握创建视图和使用视图的方法; 3.掌握完整性约束的定义方法,包括primary key、foreign key等。 二.实验容 1.基于前面建立的factory数据库,使用T-SQL语句在worker表的“部门号”列上创建一个非聚集索引,若该索引已经存在,则删除后重建。 2.在salary表的“职工号”和“日期”列创建聚集索引,并且强制唯一性。 3.建立视图view1,查询所有职工的职工号、、部门名和2004年2月工资,并按部门名顺序排列。 4.建立视图view2,查询所有职工的职工号、和平均工资; 5.建立视图view3,查询各部门名和该部门的所有职工平均工资; 6.显示视图view3的定义; 7.实施worker表的“性别”列默认值为“男”的约束; 8.实施salary表的“工资”列值限定在0~9999的约束; 9.实施depart表的“部门号”列值唯一的非聚集索引的约束; 10.为worker表建立外键“部门号”,参考表depart的“部门号”列。 11.建立一个规则sex:性别=’男’ OR 性别=’女’,将其绑定到“性别”上; 12.删除上面第7、8、9和10建立的约束; 13.解除第11题所建立的绑定并删除规则sex。 三.实验步骤 1 USE factory GO --判断是否存在depno索引;若存在,则删除之 IF EXISTS(SELECT name FROM sysindexes WHERE name='depno') DROP INDEX worker.depno GO --创建depno索引 CREATE INDEX depno ON worker(部门号) GO EXEC sp_helpindex worker GO 2 USE factory GO --判断是否存在no_date索引;若存在,则删除之 IF EXISTS(SELECT name FROM sysindexes WHERE name='no_date') DROP INDEX salary.no_date GO --创建no_date索引

北邮大三数据库实验六数据查询分析实验

实验六数据查询分析实验 实验目的 通过对不同情况下查询语句的执行分析,巩固和加深对查询和查询优化相关理论知识的理解,提高优化数据库系统的实践能力,熟悉了解Sybase中查询分析器的使用,并进一步提高编写复杂查询的SQL 程序的能力。 实验内容 1.索引对查询的影响 (1)对结果集只有一个元组的查询分三种情况进行执行(必如查询一个具体学生的信息):不建立索引,(学号上)建立非聚集索引,(学号上)建立聚集索引。 建立聚集索引: create clustered index student on student(student_id) go 建立非聚集索引: create nonclustered index student_index on student(student_id) go 用查询分析器的执行步骤和结果对执行进行分析比较。 select*from student where student_id='30201' 不建立索引 建立聚集索引

建立非聚集索引 (2)对结果集中有多个元组的查询(例如查看某门成绩的成绩表)分类似(1)的三种情况进行执行比较。 select*from student where student_id>'30401' 不建立索引:

建立聚集索引: 建立非聚集索引: (3)对查询条件为一个连续的范围的查询(例如查看学号在某个范围内的学生的选课情况)分类似(1)的三种情况进行执行比较,注意系统处理的选择。 select*from student where student_id between'31201'and'31415' 不建立索引:

北邮数据库实验报告

数据库原理与应用 实验报告 实验指导教师:袁宝库 课程主讲教师: 袁宝库 报告提交日期: 2012 年10 月18 日 北京邮电大学

目录 实验任务 (3) 实验任务一 (4) 实验任务二 (5) 实验任务三 (7) 实验任务四 (8) 实验任务五 (9) 实验任务六 (12) 实验任务七 (20) 思考题 (22) 实验总结 (24)

实验任务 1、安装SQL Server 2008 2、使用SQL Server 配置管理器 3、使用SQL Server Management Studio 4、分别使用对象资源管理器和T-SQL创建一个实验数据库 5、使用对象资源管理器修改数据库的相关参数并将一个实验数据库删除 6、分别使用对象资源管理器和T-SQL创建、删除和修改表 7、分别使用对象资源管理器和T-SQL向表中插入、修改和删除数据 思考题: 1、配置SQL Server 2008 以允许远程连接 使用SQL Server 外围应用配置器配置SQL Server 2008 允许远程连接。 经过前几步的实验,现在已经可以通过远程客户端访问SQL Server 2008数据库服务器了,这里要求2个人一组,互相用自己的客户端(SQL Server Management Studio)连接并访问对方的数据库系统。

实验任务一:安装SQL Server 2008 1、实验设计 使用SQL Server 2008安装光盘将SQL Server 2008开发版安装到本地计算机,使本地计算机成为服务器和客户端工具; 选择Windows 7为操作系统,安装开发版SQL Server 2008; 安装数据库服务、客户端组件、文档、示例和示例数据库; 命名实例为shijing; 使用混合模式进行身份验证; 2、实验过程 使用SQL Server 2008安装介质将SQL Server 2008安装到本地计算机,使本地计算机成为服务器和客户端工具

数据库实验四

西南石油大学实验报告 注意:在粘贴截图时请保留窗口完整标题,但只需保留关键界面,多余的空白界面请删除。 一、实验课时:2 二、实验目的 (1) 掌握使用T-SQL语句创建登录帐户的方法。 (2) 掌握使用T-SQL语句创建数据库用户的方法。 (3) 掌握使用T-SQL语句创建数据库角色的方法。 (4) 掌握使用T-SQL语句管理数据库用户权限方法。 三、实验要求 (1) 使用SQL Server 2008查询分析器。 (2) 严格依照操作步骤进行。 四、实验环境 (1) PC机。 (2) SQL Server 2008。 五、实验内容及步骤 注意事项: (1)首先在C盘根目录创建文件夹Bluesky,执行脚本文件“PracticePre-第11章安全管理.sql”,创建数据库BlueSkyDB和表; (2)如何建立“数据库引擎查询”;

(3)使用“select user_name()”可查询当前登录账号在当前数据库中的用户名。 步骤1 使用Transact-SQL创建三个SQL Server登录账户TUser1、TUser2、TUser3,初始密码均为“123456”。 --SA CREATE LOGIN TUser1 WITH PASSWORD='123456' CREATE LOGIN TUser2 WITH PASSWORD='123456' CREATE LOGIN TUser3 WITH PASSWORD='123456' 步骤2 使用TUser1建立一个新的数据库引擎查询,在“可用数据库”下拉列表框中是否能看到并选中BlueSkyDB数据库?为什么?

北邮数据结构实验3哈夫曼编码

数据结构实验报告 实验名称:实验3——哈夫曼编码 学生姓名: 班级: 班内序号: 学号: 日期:2013年11月24日 1.实验要求 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个 字符的频度,并建立赫夫曼树 2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每 个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的 字符串输出。 4、译码(Decoding):利用已经建好的赫夫曼树对编码后的字符串进行译 码,并输出译码结果。 5、打印(Print):以直观的方式打印赫夫曼树(选作) 6、计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼 编码的压缩效果。 2. 程序分析 2.1存储结构: struct HNode { char c;//存字符内容 int weight; int lchild, rchild, parent; }; struct HCode

{ char data; char code[100]; }; //字符及其编码结构 class Huffman { private: HNode* huffTree; //Huffman树 HCode* HCodeTable; //Huffman编码表 public: Huffman(void); void CreateHTree(int a[], int n); //创建huffman树 void CreateCodeTable(char b[], int n); //创建编码表 void Encode(char *s, string *d); //编码 void Decode(char *s, char *d); //解码 void differ(char *,int n); char str2[100];//数组中不同的字符组成的串 int dif;//str2[]的大小 ~Huffman(void); }; 结点结构为如下所示: 三叉树的节点结构: struct HNode//哈夫曼树结点的结构体 { int weight;//结点权值 int parent;//双亲指针 int lchild;//左孩子指针 int rchild;//右孩子指针 char data;//字符 }; 示意图为: int weight int parent int lchild int rchild Char c 编码表节点结构:

北邮数据库实验报告

数据库实验报告(四) 姓名:学号:班级: 1.简单查询: (1) 查询“数据库开发技术”课程的学分; SQL语句: select credit from course where course_name='SQL Server数据库开发技术'; 或者模糊查询: select credit from course where course_name like'%数据库开发技术'; 执行结果: (2) 查询选修了课程编号为“dep04_s004”的学生的学号和成绩,并将成绩按降序输出; SQL语句: select student_id,grade from student_course where course_id='dep04_s003' order by grade desc; 执行结果:

(3) 查询学号为“g9940205”的学生选修的课程编号和成绩; SQL语句: select course_id,grade from student_course where student_id='g9940205'; 执行结果: (4) 查询选修了课程编号为“dep04_s001”且成绩高于85分的学生的学号和成绩。 SQL语句: select student_id,grade from student_course where course_id='dep04_s001'and grade>'85'; 执行结果:

2.在多表连接的查询实验中,用Transact SQL语句完成以下查询操作: (1)查询选修了课程编号为“dep04_s002”且成绩高于85分的学生的学号、姓名和成绩; SQL语句: select student.student_id,student_name,grade from student,student_course where student.student_id=student_course.student_id and student_course.course_id='dep04_s002' and student_course.grade>'85'; 执行结果: (2)查询所有学生的学号、姓名、选修的课程名称和成绩; SQL语句: select student.student_id,student_name,course_name,grade from student,course,student_course where student.student_id=student_course.student_id and student_course.course_id=course.course_id; 执行结果:

数据库实验五题目答案

实验五 实验5.1 数据查询 1)要求 以School数据库为例,在该数据库中存在四表格,分别为: ●表STUDENTS(sid, sname, email, grade); ●表TEACHERS(tid, tname, email, salary); ●表COURSES(cid, cname, hour); ●表CHOICES(no, sid, tid, cid, score) 在数据库中,存在这样的关系:学生可以选择课程,一个课程对应一个教师。在表CHOICES中保存学生的选课记录。 按以下要求对数据库进行查询操作: (1)查询年级为2001的所有学生的名称并按编号升序排列。 程序:Select sname from students where grade='2001' order by sid asc; (2)查询学生的选课成绩合格的课程成绩。 程序:Select score from choices where score>'59';

(3)查询课时是48或60的课程的名称。 程序:select cname from courses where hour='48'or hour='60'; (4)查询所有课程名称中含有data的课程编号。 程序:select cid from courses where cname like'%data%';

(5)查询所有选课记录的课程号(不重复显示)。 程序:select distinct cid from choices; (6)统计所有教师的平均工资。 程序:select avg(salary) from teachers;

北邮大数据库实验三

实验三完整性及视图、索引 视图是基于某个查询结果的一个虚拟表,只是用来查看数据的窗口而已。索引能够提供一种以一列或多列的值为基础迅速查找数据表(或视图)中行的能力,用来快速访问数据表(或视图)中的数据。触发器是一种特殊的存储过程,它在特定语言事件发生时自动执行,通常用于实现强制业务规则和数据完整性。 【实验目的】 掌握MySQL视图、索引的使用,理解什么是数据库的完整性。 【实验要求】 1、每完成一个任务,截取全屏幕快照1~3作为中间步骤和结果的贴图,粘贴在最后的实验报告中。 2、除了使用我们提供的数据外还要自己向表中添加些新数据,以保证每个查询结果不为空集,或计数结果不为0。 3、思考题可以选做,作为优秀加分的依据。 【实验任务】 1、创建一个视图,该视图为每门课程的平均成绩,视图包括的列有课程号 及平均成绩,并用利用该视图查询所有课程的平均成绩,要求给出课程号、课程名及平均成绩。

2、创建一个视图,该视图为每门课程的平均成绩,视图包括的列有课程号、 课程名及平均成绩,并用利用该视图查询所有课程的平均成绩,要求给出课程号、课程名及平均成绩。

3、为院系代码表(dept_code)创建基于“院系代码”列的索引。 4、为教室信息表(classroom_info)创建基于room_id列的惟一索引并插入一 条room_id列与表中已有的值重复的数据,观察系统的反馈。

5、重新修改表stud_info、lesson_info及stud_grade,修改的容为: ①为三表增加主码约束,stud_info的主码为stud_id,lesson_info的主码为 course_id,stud_grade的主码为stud_id、course_id。

北邮数据结构第四次实验题目一排序

数据结构实验报告实验名称:实验四排序(题目1) 姓名: 班级: 班内序号: 学号:

1.实验要求 实验目的:学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。实验内容:使用简单数组实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、希尔排序 3、冒泡排序 4、快速排序 5、简单选择排序 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换 计为3次移动)。 3、对2的结果进行分析,验证上述各种算法的时间复杂度。 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 2.2 关键算法分析 2.2.1 插入排序 插入排序的基本方法是寻找一个指定元素在待排序元素中的位置,然后插入。一趟直接插入排序的C++描述过程如下: ①将待插入纪录赋值给哨兵r[0]:r[0]=r[i]; ②从后向前进行顺序查找:for(j=i-1;r[0]

{r[j+1]=r[j];move++; comp++;} //循环中移动计数器++ comp++; //比较计数器++ r[j+1]=r[0];move++; //移动计数器++ } comp++; //比较计数器++ } cout<<"本次直接插入排序数据长度为:"<=1;d=d/2) //以d 为增量在子序列中进行插入排序 { for(int i=d+1;i<=n;i++) //一趟希尔排序 { if(r[i]0&&r[0]

北邮数据库实验三-实验报告

题目:数据库实验三:嵌入式SQL 完成日期:2014.5.22 操作环境:Microsoft Visual C++ 6.0 SQL server 2008 R2 1 实验目的 1、熟悉在Visual Studio C++环境中通过ODBC实现数据库互连; 2、熟悉通过嵌入式SQL对数据库进行操作; 3、掌握数据库应用程序界面开发基本流程。 2 实验内容及要求 1、在Visual Studio C++环境中通过ODBC实现与实验1建立的数据库StuManagement的互联,进行实验要求的各种操作,关系模式和数据的操作均通过应用程序界面完成; 2、根据以下要求认真进行实验,记录所有的实验用例,填写实验报告。 2.1 数据库连接 2.1.1 通过ODBC实现与实验1数据库互连; 2.2 关系模式定义 2.2.1创建1个基本表,并插入2行数据; 2.2.2修改及删除基本表; 2.3 数据操作 2.3.1 数据查询操作; 2.3.2 数据删除操作;( 2.3.3 界面执行SQL语句操作 2.4 界面要求: 2.4.1 查询结果的多行显示(至少支持5行以上查询结果的显示) ;(2分) 2.4.2 界面美观,操作简单。 3 操作环境 Microsoft Visual C++ 6.0 Sql server 2008 R2 4 实验步骤 (1)ODBC与数据库互联

找到控制面板——管理工具 打开数据源(ODBC) 点击【添加】,选择SQL server

填写名称和描述,选择自己机器的服务器 按照默认就可以

点击【完成】,数据源就创建好了 5 实验内容与完成情况 (1)整体外观 本次实验,完成了记录的查询(按主键、按内容),记录的添加与删除,新建表,删除表,添加数据,修改表;执行SQL语句,并将查询结果显示出来。 (2)添加记录

北邮信通院数据结构实验报告三哈夫曼编码器

北京邮电大学电信工程学院 数据结构实验报告 实验名称:实验三树 ----- 哈夫曼编/解码器 学生姓名: 班级: 班内序号: 学号: 日期:2014年12月11日 1. 实验要求 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个 字符的频度,并建立赫夫曼树 2、建立编码表(CreateTable)利用已经建好的赫夫曼树进行编码,并将每 个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的 字符串输出。 4、译码(Decoding):禾U用已经建好的赫夫曼树对编码后的字符串进行译 码,并输出译码结果。 5、打印(Print):以直观的方式打印赫夫曼树(选作) 6计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼编码的压缩效果。 测试数据: I love data Structure, I love Computer。I will try my best to study data Structure. 提示: 1、用户界面可以设计为“菜单”方式:能够进行交互。 2、根据输入的字符串中每个字符出现的次数统计频度,对没有出现的字符 一律不用编码。

2. 程序分析 2.1存储结构 Huffman 树给定一组具有确定权值的叶子结点,可以构造出不同的二叉树,其中带权路径 长度最小的二叉树称为Huffman 树,也叫做最优二叉树 哈夫虽树示意图 root 孩子双亲表示法 _____________________ JL________________ weight Ichild rchild pare nt

北邮数据结构实验 第三次实验 排序

数据结构实验报告 1.实验要求 (1)实验目的 通过选择下面两个题目之一,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。 (2)实验内容 使用简单数组实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、希尔排序 3、冒泡排序 4、快速排序 5、简单选择排序 6、堆排序(选作) 7、归并排序(选作) 8、基数排序(选作) 9、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其 中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒 (选作) 4、对2和3的结果进行分析,验证上述各种算法的时间复杂度 编写测试main()函数测试排序算法的正确性。 2. 程序分析 2.1 存储结构 顺序表: 示意图: 2.2 关键算法分析 (1)测试数据的产生:正序、逆序、随机数据 用两个数组实现乱序、顺序以及逆序数据的排序。 基本思想为:随机序列产生一个指定长度的乱序序列,然后通过memcpy()函数拷贝到第

二个数组里,第二个数组作为乱序序列的保存数组,每次对第一个数组进行排序,之后拷贝第二个数组中的乱序序列到第一个数组,实现各次乱序排列。只要算法正确(第一步可以检验),之后顺序排列只需反复对第一个数组进行操作即可,再后用第二个数组保存逆序数组,然后同样在每次排序之后复制第二数组存储的乱序序列到第一组,对第一组反复排序即可。 <1> pRandom1=new long int[Max+1];pRandom2=new long int[Max+1]; <2> srand((unsigned)time(NULL)); for(int i = 1; i <= Max;i++ ) pRandom2[i]=rand(); <3> memcpy(obj.pRandom1,obj.pRandom2,(Max+1)*sizeof(long int)); (2)排序算法: <1>插入排序:依次将待排序的序列中的每一个记录插入到先前排序好的序列中,直到全部记录排序完毕。 /1/int j=0; /2/ for(int i =2; i <= Max;i++) parray[0]=parray[i];comparetimes[0]++; /4/parray[j+1]=parray[0];movetimes[0]+=2; 示意图: r1,r2,r3,…,ri-1,ri,ri+1,…,rn 有序区待插入无序区 <2>希尔排序:先将整个序列分割成若干个子列,分别在各个子列中运用直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。 int Sort::ShellSort(long int parray[]) {int j=0; for(int d=Max/2;d>=1;d/=2) {for(int i=d+1;i<=Max;i++) { parray[0]=parray[i]; comparetimes[1]++; for(j=i-d;j>0 && parray[0]冒泡排序:两两比较相邻记录的关键码,如果反序则交换,直到没有反序记录为止。 int Sort::BubbleSort(long int parray[])

北邮大三下数据库实验报告5

北京邮电大学 实验报告 课程名称数据库系统原理 实验内容实验5 数据库完整性与安全性实验 班级2013211***姓名 *** 指导老师成绩_________ 2016年05月20日

实验5 数据库完整性与安全性实验 实验目的: 1.通过对完整性规则的定义实现,熟悉了解SQL SERVER中完整性保证的规则和实现方 法,加深对数据完整性的理解。 2.通过对安全性相关内容的定义,熟悉了解SQL SERVER中安全性的内容和实现方法, 加深对数据库安全性的理解 实验内容 完整性实验与要求: 1.分别定义数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束; 定义主键: 方法一:使用Enterprise Manager设置主键(以book表为例) ①光标移到book表的位置,右键->设计 ②在你要选的属性列右键->设置主键,完成。

方法二:使用SQL语句。 ①右键数据库,新建查询 设置外键: 方法一:使用Enterprise Manager设置外键(以student表为例) ①单击student表,鼠标移到“键”文件夹,单击右键,选择“新建外键”。 ②选择“表和列规范”进行设置

③我们想在student表设置class_id属性为外键,按照下图选择,点击确定,保存即可。 方法二:SQL语句 新建查询,输入如图语句。

2.向学生表插入具有相同学号的数据,验证其实体完整性约束; Student表的主键是学号,所以不能插入有相同学号的学生。 3.向学生表中插入一条数据,班级号是学生表的外键,验证参照完整性约束; Class表中没有“2013211302”这个班级,所以无法插入。改变班级号为class表中存在的,则能够进行插入,结果如下: 4.删除教师表中的所有数据,验证参照完整性约束;

北邮大三上选修课数据库实验二数据库维护

《数据库技术及应用》实验报告 题目:数据库的日常维护和安全性管理姓名日期 实验环境:Microsoft SQL Server 2012 实验内容与完成情况: 3.1.1 完成数据库的备份、还原分+分) 通过SQL语句,对已建立的数据库StuManagement进行备份和还原操作 备份: backup database StuManagement to mybackup1 还原: use master restore database StuManagement from mybackup1 with recovery,replace; 完成数据的导入、导出操作(1分+1分): 直接在Management Studio中,手工对已建立的数据库StuManagement进行数据的导入和导出操作(可导为Access数据库、Excel表格等) 导入:

导出:将S表导出到中 3.1安全性管理 3.2.1对已建立的数据库StuManagement进行,设置用户 直接在Management Studio中,手工对已建立的数据库StuManagement进行安全性管

理,建立2个不同的数据库用户。(1+1分) 在安全性下登录名右键新建,创建 在StuManagement下安全性用户处右键新建两个用户wb和wb1 3.2.2完成“授权和权利回收”的操作例子分+分)

分别用grant和revoke语句,对3.2.1已建立的用户,进行授权和权利回收的操作,并运行验证。 wb用户只具有public身份,用wb登录执行select语句,发现错误。 select Sno from S; 退出,用Windows 账户登录,grant语句赋给wb select权限,并允许wb把这种权限再授予给别的用户 grant select on S to wb with grant option; 断开连接,用wb用户登录,执行select语句,发现成功查询

北邮数据结构实验四-链表排序

数据结构实验报告 实验名称:实验四——链表的排序 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 [内容要求] 使用链表实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、冒泡排序 3、快速排序 4、简单选择排序 5、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其 中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒 (选作) 4、对2和3的结果进行分析,验证上述各种算法的时间复杂度 编写测试main()函数测试线性表的正确性 代码要求 1、必须要有异常处理,比如删除空链表时需要抛出异常; 2、保持良好的编程的风格: 代码段与段之间要有空行和缩近 标识符名称应该与其代表的意义一致 函数名之前应该添加注释说明该函数的功能 关键代码应说明其功能 3、递归程序注意调用的过程,防止栈溢出

2. 程序分析 2.1 存储结构 [内容要求] 存储结构:双链表 2.2 关键算法分析 [内容要求] 定义类: template class LinkList { public: LinkList(){front = new Node ;front->next=rear;front->prior=NULL;rear=new Node;rear->next=NULL;rear->prior=front;} LinkList(T a[],int n); void BackLinkList(T a[]);//恢复原链表 ~LinkList();//析构函数 void PrintList();//打印数列 void InsertSort();//插入排序 void BubbleSort();//冒泡排序 Node * Partion(Node *i,Node *j);//快速排序中寻找轴值的函数 void Qsort(Node *i,Node *j);//快速排序 void SelectSort();//选择排序 Node*front; Node*rear; }; 成员函数包括:构造函数:单链表,打印单链表,插入排序,快速排序,冒泡排序,选择排序,析构函数 公有成员:头指针和尾指针 1、构造函数: LinkList::LinkList(T a[],int n) { front=new Node; rear=new Node; front->prior=NULL;front->next=rear; rear->next=NULL;rear->prior=front; Node *s; for (int i=n-1;i>=0;i--) {

北邮大三数据库实验六数据查询分析实验

北邮大三数据库实验六数据查询分析实验

————————————————————————————————作者:————————————————————————————————日期: ?

实验六数据查询分析实验 实验目的 通过对不同情况下查询语句的执行分析,巩固和加深对查询和查询优化相关理论知识的理解,提高优化数据库系统的实践能力,熟悉了解Sybase中查询分析器的使用,并进一步提高编写复杂查询的SQL程序的能力。 实验内容 1.索引对查询的影响 (1)对结果集只有一个元组的查询分三种情况进行执行(必如查询一个具体学生的信息): ?不建立索引,(学号上)建立非聚集索引,(学号上)建立聚集索引。 建立聚集索引: createclustered indexstudent on student(student_id) go 建立非聚集索引: create nonclusteredindexstudent_index on student(student_id) go 用查询分析器的执行步骤和结果对执行进行分析比较。 select*from student where student_id='30201' 不建立索引 建立聚集索引

建立非聚集索引 (2)对结果集中有多个元组的查询(例如查看某门成绩的成绩表)分类似(1)的三种情况进行执行比较。 select*from student wherestudent_id>'30401' 不建立索引:

建立聚集索引: 建立非聚集索引: (3)对查询条件为一个连续的范围的查询(例如查看学号在某个范围内的学生的选课情况)分类似(1)的三种情况进行执行比较,注意系统处理的选择。 select*fromstudent where student_idbetween'31201'and'31415' 不建立索引:

数据库实验5答案

实验五:数据库综合查询 一、实验目的 1.掌握SELECT语句的基本语法和查询条件表示方法; 2.掌握查询条件种类和表示方法; 3.掌握连接查询的表示及使用; 4.掌握嵌套查询的表示及使用; 5.了解集合查询的表示及使用。 二、实验环境 已安装SQL Server企业版的计算机(120台); 具有局域网环境,有固定IP; 三、实验学时 2学时 四、实验要求 1.了解SELECT语句的基本语法格式和执行方法; 2.了解连接查询的表示及使用; 3.了解嵌套查询的表示及使用; 4.了解集合查询的表示及使用; 5.完成实验报告; 五、实验内容及步骤 1.利用Transact-SQL嵌套语句实现下列数据查询操作。 1) 查询选修了计算机体系结构的学生的基本信息。 select*from student where Sno in(select Sno from course where Cno in(select Cno from sc where Cname='计算机体系结构')) 2) 查询年龄比李勇小的学生的学号和成绩。 select a.sno,grade from student a,course where a.sno=course.sno and sage<(select sage from student where sname='李勇') 3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1') 4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。 select*from student where dnum<>'D3'AND SAGE>all(select sage from student where dnum='D3')

相关主题