计算机通信网 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一应用层P2P软件通信实验
一、实验目的
1. 用Skype实现P2P通信;
2. 总结对P2P协议的理解。
二、实验内容
1. 了解P2P软件和抓包软件的获取、安装和使用。
1) 下载安装P2P软件Skype;下载安装抓包软件Wireshark(即以前的Ethereal软件);
2) 了解上述两种软件的基本使用方法,为后续实验操作做好准备。
2. 使用P2P软件发起点对点通信,在通信过程中使用抓包软件跟踪相关信息。
3. 分析P2P通信过程中的交互消息,总结对P2P协议的理解
三、实验过程
1、安装Skype软件,注册2个账号,用于手机和电脑的通信
2、下载Wireshark软件并安装
3、使用Skype拨打电话,并用WireShark抓取数据包
4、保存抓包文件后分析数据
使用Wireshark过滤器过滤IP,本机IP为223.68.77.135,手机IP为223.68.124.170
过滤语句“ip.addr==223.68.77.135&&ip.addr==223.68.124.170”
四、实验结果分析
Skype是一种完全分布式的P2P VoIP系统,它的设计原理是一种重叠的对等网络设计。在Skype网络中有注册服务器、普通节点和超级节点3种角色。注册服务器是SKYPE系统中唯一的有集中控制功能的服务器。它存储着所有SKYPE用户的用户名和密码信息。用户通过它进行注册认证,广播它的在线状态和好友信息,并能够检测是否用户位于防火墙或NAT后,同时判断防火墙的种类。另外,通过注册服务器SKYPE客户端软件还可以获得更新的超级节点列表,用于后续的
通信。注册之后,SKYPE客户端就不再需要注册服务器的参与,VoIP接续和用户查找功能都由SKYPE普通节点和超级节点组成的SKYPE网络完成。普通节点就是可以进行普通的VoIP呼叫和即时消息的客户端。超级节点除了可以进行普通节点的通话和即时消息外,还可以当作普通节点的转接点。
我们可以看到本机Skype端口为51425
在打电话通讯的过程中,手机不停和51425端口交互
当通话建立以后,对于媒体流的传输,将尽可能地选用UDP进行传输。与呼叫信令的工作方
式类似,如果SKYPE主叫和被叫都在公网上,则主叫和被叫之间直接通过UDP进行通信;如果主叫或被叫在NAT后面,则它们通过超级节点进行媒体转发,也使用UDP进行通信;如果主叫和被叫都在UDP被禁止的防火墙和NAT后面,那么它们将使用TCP连接到超级节点,并由超级节点进行媒体转发。
实验二多线程Web服务器的实现
一、实验目的
1. 了解Windows网络编程(Socket)的基本原理和方法。
2. 了解多线程机制,以及多线程在应用程序中的实现。
3. 了解TCP对等层之间的通信机制。
二、实验内容
开发一个多线程Web服务器,它能并行服务多个请求。
三、实验原理
www 的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信, HTTP协议的作用原理包括四个步骤:连接,请求,应答。
(1) 连接:
Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
(2) 请求:
Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM 参数的传递)。GET命令的格式为:
GET 路径/文件名 HTTP/1.1
文件名指出所访问的文件,HTTP/1.1指出Web浏览器使用的HTTP版本。
(3) 应答:
Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
(4) 关闭连接:
当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
四、实验过程
实验采用Java语言编写,核心代码如下
1、使用TCP/IP协议,开启监听端口6789
ServerSocket listenSocket = new ServerSocket(6789);
2、接收到握手后新建一个scoket用于连接
Socket socket = listenSocket.accept();
3、多线程操作
构造RequestHandler类,继承Runnable接口
class RequestHandler implements Runnable {
Socket connectionSocket;
OutputStream outToClient;
BufferedReader inFormClient;
String requestMessageLine;
String fileName;
// 构造方法
public RequestHandler(Socket connectionSocket) throws Exception {
this.connectionSocket = connectionSocket;
}
public void run(){ // 实现Runnable 接口的run()方法
try { processRequest();}
catch(Exception e) { System.out.println(e);}
}
private void processRequest() throws Exception {
//读取并显示Web 浏览器提交的请求信息