ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:1.02MB ,
资源ID:14150195      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14150195.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据通信与计算机网络课程设计.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据通信与计算机网络课程设计.docx

1、数据通信与计算机网络课程设计第一部分 数据通信与计算机网络课程设计(要求)一、课程设计的性质、目的和任务性质:独立设课目的和任务:1、掌握数据通信和计算机网络的基本原理2、掌握数据通信和计算机网络设计、分析和实现方法3、提高学生编制网络通信程序、网络应用服务程序的能力二、课程设计的基本内容和要求基本内容:网络数据通信的基本方法及实现。基本要求:根据选定的项目,课题小组成员认真查阅相关资料,发挥学生的主体作用,提出设计方案,老师参与,进行讨论和分析,最终确定设计方案。在此基础上,合理分工,协同完成项目的设计与实现,最后完成课程设计的报告撰写。三、课程设计的内容学时安排序号实验项目学时分配实验类型

2、每组人数内容提要1ARP协议数据包的捕获解析设计与实现1周设计性3-6人通过本实验,掌握网络协议数据包捕获和解析编程的技术2基于Socket的在线数据传输设计与实现1周设计性3-6人基于Socket套接口,实现通信双方的在线键盘数据传输服务。目的使学生掌握网络在线数据交换的设计方法。3基于Socket的文件传输服务(FTP)设计与实现1周设计性3-6人基于Socket套接口,实现文件数据传输服务。目的使学生掌握文件传输服务的设计方法。4基于Socket的HTTP文件传输服务设计与实现1周设计性3-6人基于Socket套接口,实现HTTP文件数据传输服务。目的使学生掌握Web网络服务的设计方法。

3、5基于Socket的Telnet服务设计与实现1周设计性3-6人基于Socket套接口,实现Telnet服务。目的使学生掌握远程登录网络访问服务的设计方法。6滑动窗口协议的模拟1周设计性3-6人通过实现对于滑动窗口协议的模拟,加深对滑动窗口协议的理解。7简单的端口扫描1周设计性3-6人实现一个扫描器,必须能够完成以下所有功能:使用TCP connect、TCP SYN和 TCP FIN 进行端口扫描,使用ICMP echo扫描实现IP扫描。并把扫描得知的结果记录下来。注:一、滑动窗口协议的模拟1 关于滑动窗口,请阅读网络教材(实现 选择性重发);2 运行时启动两个线程client 和serve

4、r。其中sever 初始应该为监听状态;3 可指定滑动窗口数目m(m2n,n为大于1的整数)和要发送的帧总数,停等的超时时间间隔以及发送类型(正常发送,即没有缺帧和错序发送帧的现象),发送速率等参数;4 client向server发起连接,成功则转入5;5 client端发出帧,帧的内容可同序号或者为“111”“222”“aaa”“bbb”或者是一段文章中的部分内容;6 选择发送类型为“缺帧”,模拟因网络拥塞造成丢帧的情况,开始发送情况同“正常发送”的情况。不同的是在帧x发送前用户可以选择丢失,则客户端继续接收帧x+1,x+2并且对帧x+1,x+2发出确认并缓存该帧;7 服务器端等待一段相当长

5、的时间(超时),重发帧x;8 选择发送类型为“错序发送”。将一组待发送的帧按照指定(错序)顺序发送。具体实现同“缺帧”情况;9 以上各种情况下,client和server窗口中应实时显示帧的发送和接受情况,包括序号,到达时间,内容等。以及窗口的填充和清空情况;10 使用socket编程;11 本实验要求实现的是一个简化了许多的滑动窗口协议。对于所有包,在生成序列号后进行发送。接收方为每个包设定一个定时器,记录包的到达情况。如发送方发送速度过快,或某包定时器超时,则发送方应重发。接受方窗口满时,接受到的包应被拷贝至硬盘(以下部分可以自由设计,仅做参考)。12 主要的数据结构:包:class pa

6、cketprotect:int num;/数据包的序号cstring content;/数据包内容 /method 消息:class messageprotect:int no;/消息的序号cstring content;/消息内容int id;/消息的方向/method 13 程序主要流程14 方法:void create_windows();/模拟滑动窗口协议中发送,接受窗口void create_packet();/模拟滑动窗口协议中包bool create_timer();/模拟滑动窗口协议中的定时器int waitfornext();/等待下一个包void resend();/重发v

7、oid receive();/数据包到达,接受数据包void write();/数据包全部到达,写入硬盘注:本实验主要目的是为了加深同学们对于滑动窗口协议的了解,而不是底层的网络编程。所以在这里,“包”的概念可以是一组题为“1”、“2”、“3”等等的文件(由程序动态创建)。如果是在两台机器上实现,其中一台机器作为发送方,另一台则是接收方,双方进行通讯。如果接收方窗口大小为6,则当编号为7的包(文件)到达时,接受方应作相应处理,包括通知发送方暂停发送,缓存收到的包,清空滑动窗口等。当然,对于出错的情况,比如包丢失,不按序到达等情况编程者应有所考虑,所以在模拟接收方的机器上,应提供选择待发送包序号

8、的界面。一个简单的选择发送包的界面如下:15按序发送16 错序发送(包4未发送)二、简单的端口扫描1、基本概念 三次握手Three-wayHandshake一个虚拟连接的建立是通过三次握手来实现的1.(B)-SYN-(A) 假如服务器A和客户机B通讯.当A要和B通信时,B首先向A发一个SYN(Synchronize)标记的包,告诉A请求建立连接.注意:一个SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources).认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动

9、建立连接。2.(B)-SYN/ACKACK-(A)B收到SYN/ACK包,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成。 Note:ACK包就是仅ACK标记设为1的TCP包.需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。 这就是为何连接跟踪很重要的原因了.没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意).而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包 四次握手Four-wayHands

10、hake四次握手用来关闭已建立的TCP连接1.(B)-ACK/FIN-(A)2.(B)-ACK-(A)3.(B)-ACK/FINACK-(A)注意:由于TCP连接是双向连接,因此关闭连接需要在两个方向上做。ACK/FIN包(ACK和FIN标记设为1)通常被认为是FIN(终结)包.然而,由于连接还没有关闭,FIN包总是打上ACK标记.没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。最常见的非法组合是SYN/FIN包.注意:由于SYN包是用来初始化连接的,它不可能和FIN和RST标记一起出现.这也是一个恶意攻击。表3-2TCP状态表状态描述CLOSED 关闭状态,没有连接活

11、动或正在进行LISTEN 监听状态,服务器正在等待连接进入SYNRCVD 收到一个连接请求,尚未确认SYNSENT已经发出连接请求,等待确认ESTABLISHED连接建立,正常数据传输状态FINWAIT1(主动关闭)已经发送关闭请求,等待确认FINWAIT2(主动关闭)收到对方关闭确认,等待对方关闭请求TIMEDWAIT完成双向关闭,等待所有分组死掉CLOSING双方同时尝试关闭,等待对方确认CLOSEWAIT(被动关闭)收到对方关闭请求,已经确认LASTACK(被动关闭)等待最后一个关闭确认,并等待所有分组死掉 正常状态转换1 服务器端首先执行LISTEN原语进入被动打开状态(LISTEN)

12、,等待客户端连接;2当客户端的一个应用程序发出CONNECT命令后,本地的TCP实体为其创建一个连接记录并标记为SYNSENT状态,然后给服务器发送一个SYN报文段;3 服务器收到一个SYN报文段,其TCP实体给客户端发送确认ACK报文段同时发送一个SYN信号,进入SYNRCVD状态;4客户端收到SYN+ACK报文段,其TCP实体给服务器端发送出三次握手的最后一个ACK报文段,并转换为ESTABLISHED状态;5 服务器端收到确认的ACK报文段,完成了三次握手,于是也进入ESTABLISHED状态。在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭TCP连接。假设

13、仍由客户端发起主动关闭连接。6 客户端执行CLOSE原语,本地的TCP实体发送一个FIN报文段并等待响应的确认(进入状态FINWAIT1);7 服务器收到一个FIN报文段,它确认客户端的请求发回一个ACK报文段,进入CLOSEWAIT状态;8 客户端收到确认ACK报文段,就转移到FINWAIT2状态,此时连接在一个方向上就断开了;9 服务器端应用得到通告后,也执行CLOSE原语关闭另一个方向的连接,其本地TCP实体向客户端发送一个FIN报文段,并进入LASTACK状态,等待最后一个ACK确认报文段;10 客户端收到FIN报文段并确认,进入TIMEDWAIT状态,此时双方连接均已经断开,但TCP

14、要等待一个2倍报文段最大生存时间MSL(MaximumSegmentLifetime),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后,TCP删除该连接记录,返回到初始状态(CLOSED)。11 服务器收到最后一个确认ACK报文段,其TCP实体便释放该连接,并删除连接记录,返回到初始状态(CLOSED)。2、几种扫描的原理 TCP connect() 扫描:这是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术

15、的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。 TCP SYN扫描 :这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好像准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN/ACK的返回信息表示端口处于侦听状态。一个RST返回,表示

16、端口没有处于侦听态。如果收到一个SYN/ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。 TCP FIN 扫描 :有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系。有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。这种方法在区分Unix和NT时,是十分有用的。 ICMP Echo扫描:使用ICMP Reques

17、t数据包来判断在一个网络上主机是否开机。如果主机开机,则会回复ICMP Echo数据包。否则得不到回复。注释:从上述所列的课程设计内容中,选择一个必做。若有能力或业余时间的学生,可选择一个以上的设计内容做。四、课程设计报告要求写出课程设计目的,设计内容,实验环境,设计思想和实现流程,源程序、运行结果以及分析。第二部分 涉及到的概念1、Socket for C:2、Socket for java:第三部分 实例1、ftp客户端程序代码如下:package ftpclient;import java.awt.*;import java.awt.event.*;import javax.swing.

18、*;import .ftp.*;import .*;import java.io.*;public class FtpClientFrame extends JFrame JPanel contentPane; Label labelPrompt = new Label(); / 状态提示 Label labelHost = new Label(); TextField textFieldHost = new TextField(); / 主机地址 Label labelUser = new Label(); TextField textFieldUser = new TextField();

19、 / 用户名 Label labelPassword = new Label(); TextField textFieldPassword = new TextField(); / 密码 Button buttonLink = new Button(); / 连接按钮 Button buttonDisconnect = new Button(); / 断开按钮 Label labelFileShow = new Label(); TextArea textAreaContent = new TextArea(); / 显示文件和目录的文本域 Label labelFile = new Labe

20、l(); TextField textFieldFile = new TextField(); / 要下载的文件名输入框 Label labelDir = new Label(); TextField textFieldDir = new TextField(); / 保存文件的本机目录名 Button buttonDownload = new Button(); / 下载按钮 FtpClient myFtp = null; / FtpClient对象 TelnetInputStream inStream = null; / 输入流对象 public FtpClientFrame() / 构造

21、函数 try jbInit(); / 界面初始化并显示 catch(Exception e) e.printStackTrace(); / 界面初始化并显示 private void jbInit() throws Exception contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); labelPrompt.setBounds(new Rectangle(25, 6, 180, 22); labelHost.setText(主机名:); labelHost.setBounds(new Recta

22、ngle(25, 38, 50, 22); textFieldHost.setBounds(new Rectangle(78, 38, 280, 22); labelUser.setText(用户名:); labelUser.setBounds(new Rectangle(25, 70, 50, 22); textFieldUser.setBounds(new Rectangle(78, 70, 114, 22); labelPassword.setText(密码:); labelPassword.setBounds(new Rectangle(205, 70, 37, 22); textFi

23、eldPassword.setBounds(new Rectangle(244, 70, 114, 22); textFieldPassword.setEchoChar(*); buttonLink.setLabel(连接); buttonLink.setBounds(new Rectangle(375, 38, 70, 22); buttonLink.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) buttonLink_actionPerforme

24、d(e); ); buttonLink.setEnabled(true); buttonDisconnect.setLabel(断开); buttonDisconnect.setBounds(new Rectangle(375, 70, 70, 22); buttonDisconnect.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) buttonDisconnect_actionPerformed(e); ); buttonDisconnect.s

25、etEnabled(false); labelFileShow.setText(目录列表); labelFileShow.setBounds(new Rectangle(25, 105, 140, 22); textAreaContent.setBounds(new Rectangle(25, 135, 420, 235); textAreaContent.setEditable(false); labelFile.setText(欲下载的文件名:); labelFile.setBounds(new Rectangle(25, 380, 100, 22); textFieldFile.setB

26、ounds(new Rectangle(128, 380, 230, 22); labelDir.setText(存放文件的路径:); labelDir.setBounds(new Rectangle(25, 412, 100, 22); textFieldDir.setBounds(new Rectangle(128, 412, 230, 22); buttonDownload.setLabel(下载); buttonDownload.setBounds(new Rectangle(375, 412, 70, 22); buttonDownload.addActionListener(new

27、 java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) buttonDownload_actionPerformed(e); ); buttonDownload.setEnabled(false); contentPane.add(labelPrompt, null); contentPane.add(labelHost, null); contentPane.add(textFieldHost, null); contentPane.add(labelUser, null); contentPan

28、e.add(textFieldUser, null); contentPane.add(labelPassword, null); contentPane.add(textFieldPassword, null); contentPane.add(buttonLink, null); contentPane.add(buttonDisconnect, null); contentPane.add(labelFileShow, null); contentPane.add(textAreaContent, null); contentPane.add(textFieldFile, null);

29、contentPane.add(labelFile, null); contentPane.add(labelDir, null); contentPane.add(textFieldDir, null); contentPane.add(buttonDownload, null); enableEvents(AWTEvent.WINDOW_EVENT_MASK); this.setSize(new Dimension(480, 485); this.setResizable(false); this.setTitle(ftp客户端); this.setVisible(true); / 响应“连接”按钮的点击消息,连接到服务器端 void buttonLink_actionPerformed(ActionEvent e) String

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2