计算机网络实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验名称NS路由模拟和Socket编程课程名称计算机网络原理与技术
NS路由模拟实验
一、实验目的
了解NS网络模拟器的基本操作;
学习采用距离矢量算法(Distance Vector Algorithm)的动态路由。
二、实验步骤
这个实验主要是观察链路状态发生变化时,使用静态路由和动态路由的差异性。实验的结构如图1所示,节点n0会使用ftp将数据传送到n5,传送时间为0.1s~3.0s,在1.0s时,链路n1到n4发生问题,所以数据无法从n1到n4之间的链路传送。在2.0s时,链路n1到n4问题解决,数据有可以从此路传送。
图1 网络拓扑结构
TCL程序:
静态路由执行方法
1、运行TCl脚本
运行成功后生成的文件
2、运行Nam程序,观察结果
(1)使用静
态路由,传送数据从n0到n5的路径是n0----n1----n4---n5.
(2)在1.0s时,n1到n4链路发生问题,因为使用静态路由算法,路由表不会更新,所以数据无法发送到n4.
(3)在3.0s时,n1到n4链路的问题得到解决,所以数据又按路径n0----n1----n4---n5传送到n5.
动态路由执行方式
1、运行TCL脚本
2、运行nam程序,观察结果
(1)因为使用动态路由方式,所以一开始,节点与节点之间必须互换信息,以建立路由表,如图3-1
图3-1
图3-2
(2)路由表建立后,数据传送的路径是n0----n1----n4---n5.如图3-2 (3)在1.0s时,n1到n4链路发生问题,因为使用动态路由算法,所以节点互相通信,因此n0到n5数据发送的路径更新为n0----n1----n2---n3----n5. 如图3-3
图3-3
图3-4
(4)在3.0s时,n1到n4之间的链路恢复,节点互相通信后,路由表更新,因此n0到n5数据发送的路径也恢复为n0----n1---n4----n5.如图3-4
Socket编程
1.实验目的
在实际的环境中,数据帧是网络数据层里传输的基本数据单位,数据的传输时要实现双工传输,而滑动窗口协议是其中能够实现双工数据传输的一种协议标准。本实验模拟实现该协议在数据链路层上的数据传输过程是为加深大家对滑动窗口协议的理解。
2.实验要求
(1)了解和掌握“基于UDP-无面向连接的应用程序”的运行机制和编程方法;
(2)了解和掌握“基于TCP-面向连接的应用程序”的运行机制和编程方法;
(3)编写一个网络通信应用程序:客户机发出数据请求命令,服务器根据其命令提供数据;
(4)总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。
3.实验指导
基于TCP-面向连接的应用程序:
(1)分别编写基于TCP协议的“简单聊天室网络通信程序”的客户端和服务器端。
(2)在单机上运行它们,验证其通信结果;
(3)在多机上运行它们,验证其通信结果;(服务器端只需运行在一台主机上,客户端
可在其它主机上运行,要知道服务器端所在主机的IP地址)。
其客户端主程序流程图如下图所示:
图3.6 数据帧传输客户端流程图服务器端的流程图如图3.7所示:
图3.7 数据帧传输实验服务器端流程图
4.实验结果及展示
客服端界面默认监听接口是4700
客服端代码
package lzf.socket;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import .*;
public class SocketClient extends JFrame implements ActionListener{ static {
try
{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
e.printStackTrace();
}
}
JPanel contentPane;
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField("127.0.0.1");
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField("4700");
JButton jButton1 = new JButton();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton jButton2 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
BufferedReader instr =null;
Socket socket = null;
PrintWriter os=null;
public SocketClient() {
jbInit();
}
class MyThread extends Thread{
public void run(){
try{
os=new PrintWriter(socket.getOutputStream());
instr=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
while(true){
Thread.sleep(100);
if(instr.ready()){
jTextArea1.append("服务器: "+instr.readLine()+"\n");
}