网络工程案例教学及综合实践.docx
- 文档编号:25572994
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:16
- 大小:136.20KB
网络工程案例教学及综合实践.docx
《网络工程案例教学及综合实践.docx》由会员分享,可在线阅读,更多相关《网络工程案例教学及综合实践.docx(16页珍藏版)》请在冰豆网上搜索。
网络工程案例教学及综合实践
计算机学院计算机科学与技术专业
《网络工程案例教学及综合实践》报告
(2012/2013学年第一学期)
学生姓名:
学生班级:
计算机092002
学生学号:
200920010220
指导教师:
赵俊忠
2013年1月3日
第一章计算机网络
1.1计算机网络的定义
计算机网络技术是通信技术与计算机技术相结合的产物。
计算机网络是按照网络协议,将地球上分散的、独立的计算机相互连接的集合。
连接介质可以是电缆、双绞线、光纤、微波、载波或通信卫星。
计算机网络具有共享硬件、软件和数据资源的功能,具有对共享数据资源集中处理及管理和维护的能力。
关于计算机网络的最简单定义是:
一些相互连接的、以共享资源为目的的、自治的计算机的集合。
另外,从逻辑功能上看,计算机网络是以传输信息为基础目的,用通信线路将多个计算机连接起来的计算机系统的集合。
一个计算机网络组成包括传输介质和通信设备。
从用户角度看,计算机网络是这样定义的:
存在着一个能为用户自动管理的网络操作系统。
有它调用完成用户所调用的资源,而整个网络像一个大的计算机系统一样,对用户是透明的。
一个比较通用的定义是:
利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。
从整体上来说计算机网络就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。
简单来说,计算机网络就是由通信线路互相连接的许多自主工作的计算机构成的集合体。
计算机网络由一组结点和链络组成。
网络中的结点有两类:
转接结点和访问结点。
通信处理机、集中器和终端控制器等属于转接结点,它们在网络中转接和交换传送信息。
主计算机和终端等是访问结点,它们是信息传送的源结点和目标结点。
计算机网络技术实现了资源共享。
人们可以在办公室、家里或其他任何地方,访问查询网上的任何资源,极大地提高了工作效率,促进了办公自动化、工厂自动化、家庭自动化的发展。
第二章计算机网络体系机构
2.1网络层次模型
层次结构的要点:
1)除了在物理媒体上进行的是实通信之外,其余各对等实体间进行的都是虚通信。
2)对等层的虚通信必须遵循该层的协议。
3)n层的虚通信是通过n/n-1层间接口处n-1层提供的服务以及n-1层的通信(通常也是虚通信)来实现的。
层次结构划分的原则:
1)每层的功能应是明确的,并且是相互独立的。
当某一层的具体实现方法更新时,只要保持上、下层的接口不变,便不会对邻居产生影响。
2)层间接口必须清晰,跨越接口的信息量应尽可能少。
3)层数应适中。
若层数太少,则造成每一层的协议太复杂;若层数太多,则体系结构过于复杂,使描述和实现各层功能变得困难。
网络的体系结构的特点是:
1)以功能作为划分层次的基础。
2)第n层的实体在实现自身定义的功能时,只能使用第n-1层提供的服务。
3)第n层在向第n+1层提供的服务时,此服务不仅包含第n层本身的功能,还包含由下层服务提供的功能。
4)仅在相邻层间有接口,且所提供服务的具体实现细节对上一层完全屏蔽。
2.2数据的封装
数据从源主机传输到目标主机之前,原始数据首先在源主机方对数据进行封装后再进行传输,被封装的数据在到达目标主机后,解除封装恢复原始数据信息。
数据封装是将OSI模型中不同层次的协议信息附加到被传输的数据上,因此当数据在OSI模型中从高层向底层传递时,会在所传输的数据上添加数据报头、数据报尾和其它信息。
也就是数据从应用层箱屋里层的传输过程中,在数据经过的每一层添加上该层信息后再向下层传输。
数据在源主机被封装并传输到目标主机后,需要执行解封装才能将数据恢复成原始信息。
解封装是从源主机来的被封装数据在目标主机的OSI模型的对等层将添加的信息剥离,然后向上一层传输的过程。
数据按层次模型被传输的过程中,每层不断添加本层的控制信息,在传输层添加本层的控制信息后形成的数据格式被称为“数据报文”(Message);在网络层添加本层的控制信息后形成的数据格式被称为“数据分组”(Packet);在数据链路层添加本层的报头和报尾后形成的数据格式被称为“数据帧”(Frame)。
第三章网络通信协议
下面将简单介绍下这次设计我们主要应用到的通信协议。
TCP/IP的体系结构
TCP/IP(TransmissionControlProtocol/InternetProtocol)指传输控制协议/网际协议。
TCP/IP体系共有4个层次:
应用层、传输层、互联层、主机-网络接口层。
TCP/IP的最高层是应用层。
在这层中有许多著名协议,如远程登陆协议Telnet,文件传输协议FTP,简单邮件传送协议SMTP等。
在往下的一层是TCP/IP的传输层,也叫主机到主机层。
这一层可使用两种不同的协议:
一种是面向连接的传输控制协议(TCP,TransmissionControlProtocol),另一种是无连接的用户数据报协议(UDP,UserDataProtocol)。
传输层传送的数据单位是报文(message)或数据流(stream)。
报文也常称为报文段(segment)。
传输层下面的是TCP/IP的互联层,其主要的协议就是无连接的网络互联协议(IP,InternetProtocol)。
该层传送的数据单位是分组(packet)。
与IP协议配合使用的还有三个协议,那就是Internet控制报文协议(ICMP,InternetControlMessageProtocol)、地址解析协议(ARP,AddressResolutionProtocol)和逆地址解析协议(RARP,ReverseAddressResolutionProtocol)。
3.1IP协议
该层定义了正式的IP数据报格式和协议,即IP协议(InternetProtocol)。
网际层发送数据报、处理路由选择、拥塞控制等问题。
IP协议是互联层的主要协议。
它的主要功能是:
无连接数据报传送、数据报路由选择和差错控制。
IP将报文传送到目的主机后,不管传送正确与否都不进行检验,不回送确认,也不保证分组的正确顺序,这些功能都由TCP完成。
3.2TCP协议
TCP位于IP之上的传输层,提供面向连接的可靠的服务。
有确认、超时重发、流量控制和拥塞控制等各种可靠性技术。
TCP实现数据可靠传输。
自动检测丢失的数据报,TCP软件在发送数据的同时,启动一个定时器,当接收端的在定时的时间内未发回‘确认’信号,TCP认为其丢失而重发一次.且超时值随目的主机与源主机的距离而自动的调整;TCP对每个数据报的数据加以标记.接收方可用已收到的数据报标记与到来的进行比较,有重复可丢弃。
图3-1TCP编程流程
3.3UDP协议
是一种无连接的协议。
在OSI模型中,在第四层——传输层,处于IP协议的上一层。
UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
UDP用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
图3-2UDP编程流程
第四章程序设计
基于以上对计算机网络通信的了解,我们将应用这些协议在编程工具中的库函数,来对本次程序进行实现设计。
在设计之前,我对实现功能进行分析,需要两方面技术来完成消息通信,首先我要实现对本机IP及端口的监听,这样就能知道有哪台主机要和本机进行通信连接;其次,要实现另一端主机对本机的通信连接,以及消息的传递。
当然,最主要的是要应用到SOCKET技术,通过这个接口调用TCP/IP协议的各功能函数才得以实现消息之间的通信。
本次程序设计的环境:
编程语言:
C语言
编程环境:
Linux系统
确定我们本次程序设计要实现的功能:
本次程序设计主要实现的功能是两台计算机之间进行数据通信,对此我将要开始设计模拟在同一台计算机中两个进程直接进行数据消息通信(以终端模式)。
下面是本次程序设计的主要代码:
如下是服务器端:
#include"/home/jia/jia/head.h"
#include"list.h"
#defineBOCKLOG20
#definePORT8010
#defineIP"192.168.54.54"
#defineMAXSIZE128
intLEN=sizeof(structsockaddr_in);
void*run(void*d);
intsfd,cfd;
structsockaddr_insaddr,caddr;
chardata[MAXSIZE];
pthread_ttid;
//套接字的初始化
voidinit_socket(void)
{
if((sfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("Createsocketerror!
\n");
exit(0);
}
saddr.sin_family=AF_INET;
saddr.sin_port=htons(PORT);
saddr.sin_addr.s_addr=inet_addr(IP);
if(bind(sfd,(structsockaddr*)&saddr,LEN)==-1)
{
perror("binderror!
\n");
exit(0);
}
if(listen(sfd,BOCKLOG)==-1)
{
perror("listenporterror!
\n");
exit(0);
}
}
//接受客户端连接
voidaccept_socket()
{
fflush(stdout);
printf("ServerisOK,waitingforconnection......\n");
while
(1)
{
if((cfd=accept(sfd,(structsockaddr*)&caddr,&LEN))==-1)
{
perror("Accepterror!
\n");
exit(0);
}
recv(cfd,data,MAXSIZE,0);
Node*p=(Node*)malloc(sizeof(Node));
p->fd=cfd;
p->name=(char*)malloc(MAXSIZE);
strcpy(p->name,data);
strcat(p->name,"发送消息:
");
p->next=NULL;
add_list(p);
memset(data,0,MAXSIZE);
pthread_create(&tid,0,run,&cfd);
}
}
//处理每个客户端的数据的收发
void*run(void*d)
{
intclient_fd=*((int*)d);
send(client_fd,"Welcometochat!
",MAXSIZE,0);
intflag=1;
intr;
Node*p;
while(flag)
{
memset(data,0,MAXSIZE);
if((r=recv(client_fd,data,MAXSIZE,0))==-1)
{
perror("recverror!
\n");
exit(0);
}
elseif(r==0)
{
strcpy(data,"XXXquitthechat");
del_list(client_fd);
flag=0;
}
//printf("%d",r);
p=head;
while(p->next)
{
p=p->next;
char*t1=malloc(100);
time_tt;
t=time(NULL);
t1=ctime(&t);
strcat(p->name,t1);
if(p->fd!
=client_fd)
{
char*name1=malloc(MAXSIZE);
strcpy(name1,p->name);
strcat(p->name,t1);
send(p->fd,p->name,MAXSIZE,0);
send(p->fd,data,MAXSIZE,0);
strcpy(p->name,name1);
}
}
}
pthread_exit(0);
}
//服务端程序的主函数
intmain()
{
init_list();
init_socket();
accept_socket();
close(sfd);
destroy_list();
return0;
}
如下是客户端程序:
#include"/home/jia/jia/head.h"
#include"list.h"
#defineIP"192.168.54.54"
#definePORT8010
#defineMAXSIZE1024
charNAME[]="王佳宾";
intfd;
intlen=sizeof(structsockaddr_in);
pthread_ttid;
chardata[MAXSIZE];
structsockaddr_inaddr;
void*run(void*arg);
voidinit_socket()//创建套接字
{
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("createsocketerror");
exit(0);
}
}
voidconn_socket()
{
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr=inet_addr(IP);
memset(addr.sin_zero,0,8);
if(connect(fd,(structsockaddr*)&addr,len)==-1)
{
perror("connectservererror");
exit(0);
}
send(fd,NAME,MAXSIZE,0);
}
voidrecv_socket()
{
pthread_create(&tid,NULL,run,NULL);
}
voidsend_socket()//发送数据
{
charinput[MAXSIZE];
while
(1)
{
intsum;
memset(input,0,MAXSIZE);
read(0,input,MAXSIZE);
sum=strlen(input)-1;
//system("date");
fflush(stdout);
send(fd,input,sum,0);
}
}
void*run(void*arg)//接受连接
{
while
(1)
{
memset(data,0,MAXSIZE);
if(recv(fd,data,MAXSIZE,0)<=0)
{
pthread_exit(0);
}
printf("%s\n",data);
}
}
intmain()
{
init_socket();
conn_socket();
recv_socket();
send_socket();
//return0;
}
实验截图:
经过不断的调试测试,最终得到以上功能实现,基本完成此次程序功能实现。
设计小结
这次课程设计很具有挑战性,涉及了计算机网络通信方面的很多知识,使我更多的接触到了关于通信方面的实践设计,加强了自己掌握和理解计算机网络通信原理的能力,培养了自己的实际动手能力与综合设计能力,并提高了自己的技术素质。
基本达到了了解计算机网络通信和实现的一般任务,明确了计算机网络通信设计与组建的基本原则,掌握了计算机网络通信编程的通用方法,加深了对网络协议体系、局域网技术、网络互联技术与网络应用服务等理论知识的理解。
在本次设计的过程中,不断的发现问题,通过查阅书本资料以及网上的一些资源,一步步实现了想要实现的功能,收获很多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络工程 案例 教学 综合 实践