计算机网络协议仿真实验
clilen = sizeof(SOCKADDR_IN); socketClient = accept(sockfd,
(LPSOCKADDR)&SockAddr, &clilen);
/*出错处理*/
if (socketClient == INVALID_SOCKET) {
printf(\ break; }
/* 打印已建立的连接信息*/
printf(\ socketClient,
inet_ntoa(SockAddr.sin_addr));
/*启动一个新线程处理该请求*/
dwClientThread =CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)&ClientThread, (void *)socketClient, 0,
&ThreadAddr);
/*错误处理*/
if(!dwClientThread)
printf(\
/*线程建立以后,主程序里不再使用线程handle,将其关闭,但线程继续运行*/ CloseHandle((HANDLE)dwClientThread); }
/*结束 windows sockets API*/ WSACleanup(); return 0; }
上述服务员程序已经在服务器端运行,请学生认真阅读,然后根据实验原理二中介绍的内容,设计面向连接的客户端程序,实现客户与服务员间的数据传输。
计算机网络协议仿真实验
在仿真机一端运行客户端进程,在监控机端捕获数据并分析。
练习三:使用TCP协议进行复杂的客户-服务员程序设计。
上述的例子程序比较简单,有一些进程中往往同时存在几条连接,这样的进程在有报文到来时,可以在它处理的任何socket上执行recv调用,但它不知道哪个socket上已有报文,哪个上没有,可以使用select()系统调用来解决这样的问题。有兴趣的同学可自行编写这样较复杂的客户-服务员程序。
【思考问题】
结合实验过程中的实验结果,回答下列问题
1、根据编程练习实验中记录的客户和服务器程序的端口号并结合程序,说明:
在客户/服务器模型当中,客户进程的端口号和服务器进程的端口号都是由程序给出说明的吗?为什么?
2、在TCP/IP网络中,当客户与服务员进程建立了一条TCP连接以后,是否属于该连接的所有包都是经过同一路径(即一条虚电路)传递的?为什么?
【实验结论】
实验八SNMP协议与网络管理
【实验目的】
1、理解SNMP协议的工作原理 2、理解SNMP协议的作用 【实验学时】 4学时
【实验类型】 综合型
【实验要求】
1、理解SNMP协议的作用 2、熟悉SNMP协议的格式 3、了解SNMP与UDP的关系
4、了解MIB以及基本的MIB变量 5、了解ASN.1的编码标准 【实验原理】
(1)SNMP的报文格式:
计算机网络协议仿真实验
字段说明: 共同体:
共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认值是public。
PUD类型(五种): PUD类型 0 1 2 3 4 名 称 get-request get-next-request get-response set-request trap 描 述 从代理进程提取一个或多个参数值 从代理进程提取一个或多个参数的小一个参数值 返回的一个或多个参数值。(由代理进程发出,是前三个操作的相应操作) 设置代理进程的一个或多个参数值 代理进程主动发出的报文,通知管理进程有某些事情发生
请求标识:
请求标识由管理进程设置,由代理进程在get-response中返回。客户进程(管理进程)通过它来确定服务器(代理)进程发出的响应与客户进程发出的查询是否匹配。
差错状态(六种): 差错状态 0 1 2 3 4 5
名 称 noError tooBig noSuchName badValue readOnly genErr 描 述 没有错误 代理进程无法把响应放在一个SNAP消息中发送 操作不存在的变量 set操作的值或语义有错误 管理进程试图修改一个只读变量 其他错误 计算机网络协议仿真实验
差错索引:
是一个整数偏移量,指明当有差错发生时,差错发生在哪一个参数。它是由代理进程标注的,只有在发生noSuchName、badValue、readOnly差错时才标注。
trap类型(七种): trap类型 0 1 2 3 4 5 6 名 称 coldStart warmStart linkDown linkUp 描 述 代理进程对自己初始化 代理进程对自己重新初始化 一个接口已经从工作状态改变为故障状态,报文中的第一个变量标识此接口 一个接口已经从故障状态改变为工作状态,报文中的第一个变量标识此接口 一个EGP邻站已改变为故障状态。报文中的第一个变量包含此邻站的IP地址 在这个特定的代码字段中查找trap信息 authenticationFailure 从SNMP管理进程收到无效共同体的报文 egpNeighborLoss enterpriseSpecific
(2)其他原理请参考教材: 第五章 应用协议
【实验步骤】
1、仿真机端
主控设备端的SNMP服务已经启动,本实验选择服务器端的SNMP进程作为服务进程即SNMP代理进程,并进行访问。
练习一:编辑并发送SNMP数据包
由于SNMP服务是建立在UDP协议之上的,SNMP数据封装在UDP数据包内,故对SNMP数据的编辑即是对UDP数据字段内容的编辑。
1、打开协议仿真编辑器。
2、填写该帧的以太网协议首部:
(a) 源MAC地址”和“目的MAC地址”字段
(b) “类型或长度”字段值应为:0800(即IP协议的类型值) 3、填写IP协议头信息:
注意协议字段,选择上层协议类型为UDP协议,其类型值为17; 目的地址为服务器主机的IP地址。 4、填写UDP协议信息: (a) 16位源端口号:自选
计算机网络协议仿真实验
(b) 16位目的端口号:161(SNMP代理进程的UDP端口号) (c) 16位UDP长度:UDP报头长度(8)与UDP数据长度之和。 (d) 编辑UDP数据字段(即:SNMP数据信息):
例如:02 01 00 04 06 70 75 62 6C 69 63 A0 5F 02 01 04 02 01 00 02 01 00 30 54 30 0C 06 08 2B 06 01 02 01 01 01 00 05 00
(e) 校验和:覆盖UDP首部(含伪首部)和数据两部分。计算方法参考实验五。 5、点击工具栏或菜单栏中的“发送”,在弹出菜单上选择“发送”按钮,发送UDP报文; 6、在监控机一端截获该报文及响应报文并分析。
【思考问题】
结合实验过程中的实验结果,回答下列问题
1、SNMP服务为什么选择UDP协议而不是TCP协议作为下层协议? 【实验结论】
实验九 应用层协议 – 1:HTTP协议
【实验目的】
1、掌握HTTP协议的使用 2、了解HTTP协议的实现方式 【实验学时】 4学时
【实验类型】 综合型
【实验要求】
1、学习HTTP协议的格式
2、理解HTTP协议与TCP协议的关系 3、了解HTTP协议的通信过程
4、理解HTTP协议的无连接、无状态特性 【实验原理】
HTTP报文共有两种通用类型:请求报文,响应报文。
(1)请求报文:包括请求行、首部,以及有时出现的主体。如图
请求行 首部 空行