计算机通信网 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 浏览器提交的请求信息

相关文档
最新文档