当前位置:
文档之家› 数据通信与计算机网络课程设计
数据通信与计算机网络课程设计
Note: ACK包就是仅ACK标记设为1的TCP包.需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。
这就是为何连接跟踪很重要的原因了.没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意).而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包
三、课程设计的内容学时安排
序号
实验项目
学时分配
实验类型
每组人数
内容提要
1
ARP协议数据包的捕获解析设计与实现
1周
设计性
3-6人
通过本实验,掌握网络协议数据包捕获和解析编程的技术
2
基于Socket的在线数据传输设计与实现
1周
设计性
3-6人
基于Socket套接口,实现通信双方的在线键盘数据传输服务。目的使学生掌握网络在线数据交换的设计方法。
最常见的非法组合是SYN/FIN包.注意:由于SYN包是用来初始化连接的,它不可能和FIN和RST标记一起出现.这也是一个恶意攻击。
表3-2 TCP状态表
状态
描述
CLOSED
关闭状态,没有连接活动或正在进行
LISTEN
监听状态,服务器正在等待连接进入
SYN RCVD
收到一个连接请求,尚未确认
SYN SENT
11服务器收到最后一个确认ACK报文段,其TCP实体便释放该连接,并删除连接记录,返回到初始状态(CLOSED)。
2、几种扫描的原理
TCP connect()扫描:
这是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。
注意:一个SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources).认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。
2. (B) <-- [SYN/ACK] <--(A)
15按序发送
16错序发送(包4未发送)
二、简单的端口扫描
1、基本概念
三次握手Three-way Handshake
一个虚拟连接的建立是通过三次握手来实现的
1. (B) --> [SYN] --> (A)
假如服务器A和客户机B通讯.当A要和B通信时,B首先向A发一个SYN (Synchronize)标记的包,告诉A请求建立连接.
11本实验要求实现的是一个简化了许多的滑动窗口协议。对于所有包,在生成序列号后进行发送。接收方为每个包设定一个定时器,记录包的到达情况。如发送方发送速度过快,或某包定时器超时,则发送方应重发。接受方窗口满时,接受到的包应被拷贝至硬盘(以下部分可以自由设计,仅做参考)。
12主要的数据结构:
包:
classpacket{
注:一、滑动窗口协议的模拟
1关于滑动窗口,请阅读网络教材(实现—选择性重发);
2运行时启动两个线程client和server。其中sever初始应该为监听状态;
3可指定滑动窗口数目m(m=2n,n为大于1的整数)和要发送的帧总数,停等的超时时间间隔以及发送类型(正常发送,即没有缺帧和错序发送帧的现象),发送速率等参数;
5
基于Socket的Telnet服务设计与实现
1周
设计性
3-6人
基于Socket套接口,实现Telnet服务。目的使学生掌握远程登录网络访问服务的设计方法。
6
滑动窗口协议的模拟
1周
设计性
3-6人
通过实现对于滑动窗口协议的模拟,加深对滑动窗口协议的理解。
7
简单的端口扫描
1周
设计性
3-6人
实现一个扫描器,必须能够完成以下所有功能:使用TCP connect、TCP SYN和TCP FIN进行端口扫描,使用ICMPecho扫描实现IP扫描。并把扫描得知的结果记录下来。
在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭TCP连接。假设仍由客户端发起主动关闭连接。
6客户端执行CLOSE原语,本地的TCP实体发送一个FIN报文段并等待响应的确认(进入状态FIN WAIT 1);
7服务器收到一个FIN报文段,它确认客户端的请求发回一个ACK报文段,进入CLOSE WAIT状态;
第一部分
一、课程设计的性质、目的和任务
性质:独立设课
目的和任务:
1、掌握数据通信和计算机网络的基本原理
2、掌握数据通信和计算机网络设计、分析和实现方法
3、提高学生编制网络通信程序、网络应用服务程序的能力
二、课程设计的基本内容和要求
基本内容:网络数据通信的基本方法及实现。
基本要求:根据选定的项目,课题小组成员认真查阅相关资料,发挥学生的主体作用,提出设计方项目的设计与实现,最后完成课程设计的报告撰写。
7服务器端等待一段相当长的时间(超时),重发帧x;
8选择发送类型为“错序发送”。将一组待发送的帧按照指定(错序)顺序发送。具体实现同“缺帧”情况;
9以上各种情况下,client和server窗口中应实时显示帧的发送和接受情况,包括序号,到达时间,内容等。以及窗口的填充和清空情况;
10使用socket编程;
3
基于Socket的文件传输服务(FTP)设计与实现
1周
设计性
3-6人
基于Socket套接口,实现文件数据传输服务。目的使学生掌握文件传输服务的设计方法。
4
基于Socket的HTTP文件传输服务设计与实现
1周
设计性
3-6人
基于Socket套接口,实现HTTP文件数据传输服务。目的使学生掌握Web网络服务的设计方法。
4 client向server发起连接,成功则转入5;
5 client端发出帧,帧的内容可同序号或者为“111”“222”…“aaa”“bbb”…或者是一段文章中的部分内容;
6选择发送类型为“缺帧”,模拟因网络拥塞造成丢帧的情况,开始发送情况同“正常发送”的情况。不同的是在帧x发送前用户可以选择丢失,则客户端继续接收帧x+1,x+2…并且对帧x+1,x+2…发出确认并缓存该帧;
ICMP Echo扫描:
使用ICMPRequest数据包来判断在一个网络上主机是否开机。如果主机开机,则会回复ICMP Echo数据包。否则得不到回复。
注释:从上述所列的课程设计内容中,选择一个必做。若有能力或业余时间的学生,可选择一个以上的设计内容做。
8客户端收到确认ACK报文段,就转移到FIN WAIT 2状态,此时连接在一个方向上就断开了;
9服务器端应用得到通告后,也执行CLOSE原语关闭另一个方向的连接,其本地TCP实体向客户端发送一个FIN报文段,并进入LAST ACK状态,等待最后一个ACK确认报文段;
10客户端收到FIN报文段并确认,进入TIMED WAIT状态,此时双方连接均已经断开,但TCP要等待一个2倍报文段最大生存时间MSL(Maximum Segment Lifetime),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后,TCP删除该连接记录,返回到初始状态(CLOSED)。
四次握手Four-way Handshake
四次握手用来关闭已建立的TCP连接
1. (B) --> ACK/FIN --> (A)
2. (B) <-- ACK <-- (A)
3. (B) <-- ACK/FIN <-- (A)
4. (B) --> ACK --> (A)
注意:由于TCP连接是双向连接,因此关闭连接需要在两个方向上做。ACK/FIN包(ACK和FIN标记设为1)通常被认为是FIN(终结)包.然而,由于连接还没有关闭, FIN包总是打上ACK标记.没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。
voidwrite();//数据包全部到达,写入硬盘
注:本实验主要目的是为了加深同学们对于滑动窗口协议的了解,而不是底层的网络编程。所以在这里,“包”的概念可以是一组题为“1”、“2”、“3”等等的文件(由程序动态创建)。如果是在两台机器上实现,其中一台机器作为发送方,另一台则是接收方,双方进行通讯。如果接收方窗口大小为6,则当编号为7的包(文件)到达时,接受方应作相应处理,包括通知发送方暂停发送,缓存收到的包,清空滑动窗口等。当然,对于出错的情况,比如包丢失,不按序到达等情况编程者应有所考虑,所以在模拟接收方的机器上,应提供选择待发送包序号的界面。一个简单的选择发送包的界面如下:
TCP FIN扫描:
有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系。有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。这种方法在区分Unix和NT时,是十分有用的。
已经发出连接请求,等待确认
ESTABLISHED