毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc

上传人:仙人指路1688 文档编号:2401077 上传时间:2023-02-17 格式:DOC 页数:33 大小:293.50KB
返回 下载 相关 举报
毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc_第1页
第1页 / 共33页
毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc_第2页
第2页 / 共33页
毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc_第3页
第3页 / 共33页
毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc_第4页
第4页 / 共33页
毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc》由会员分享,可在线阅读,更多相关《毕业设计基于ICMP模拟网络控制软件的开发控制管理模块论文.doc(33页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)基于ICMP模拟网络控制软件的开发控制管理模块论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:基于ICMP模拟网络控制软件的开发控制管理模块摘 要随着网络技术的发展,网络通信已经越来越重要。而网络通信的实现,必然离不开网络协议。网络协议是一套传递信息、管理信息的规则。通过这套规则,计算机之间才能相互通信。目前,一些起到平台作用的通信协议已趋于完善,如TCP、UDP和ICMP等。它们是以IP数据包为载体(IP头+TCP/UDP/ICMP头+数据)的。控制管理模块的主要目标是管理和发送控制信息,在ICMP协议的基础上,模拟出一套自定义的规则,用于实现简

2、单的网络控制。具体实现是通过VC 6.0创建一个对话框工程,并采用RAW SOCKET技术完成ICMP数据包的发送和接收,以ICMP的数据部分作为本协议实现的载体,即IP头+ICMP头+数据(自定义的简单协议)的数据包形式实现不同计算机之间的通信,从而达到网络控制的目的。通过测试,该模块实现了控制信息的管理和发送。关键词:ICMP;RAW SOCKET;网络协议;数据包The Controlling and Management software module development of simulating network control based on ICMPAbstractWith

3、 the advance of network technique, internet communication is becoming more and more important. However, it can not be realized without network protocol, which is a set of rules for transmitting and managing information. Through these rules, each computer can communicate with each other. At present,

4、a lot of basal protocols have been nearly perfect, such as TCP、UDP、ICMP, which are based on the IP packets (IP head + TCP/UDP/ICMP head + data). The main task of Control Module is to manage and send the control information, which is to simulate a set of self user-defined rules and realize simple net

5、work control on the basic of ICMP protocol. The concrete realization is that we first establish a dialog-box project through VC 6.0, and then use RAW SOCKET technology to complete the sending and receiving of ICMP packets whose data part can be used as the carrier helping realize the protocol. It me

6、ans that we can use the form of IP head + ICMP head + data (simple user-defined protocol) to realize the correspondence among different computers to achieve the goal of net-controlling. Through the test, the module has realized the management and transmission of control information. Key words:ICMP;

7、RAW SOCKET; network protocol; data packet 目 录论文总页数:24页1引言11.1课题背景11.2国内外研究现状11.3本课题研究的意义11.4本课题的研究方法22TCP/IP概述22.1概念22.2TCP/IP分层结构22.3数据封装格式33ICMP概述43.1ICMP介绍43.2ICMP报文格式53.3ICMP报文的类型53.4ICMP的重要性简介74网络套接字74.1套接字概述74.2Winsock中的几个基本概念94.2.1Winsock94.2.2阻塞和非阻塞94.2.3字节顺序94.2.4客户机/服务器模型94.3Winsock编程原理104

8、.3.1Winsock的启动和终止104.3.2错误检查和控制114.3.3Winsock编程模型115控制协议的模拟实现155.1课题的具体要求155.2课题的实现重点155.3可视化界面的具体实现165.3.1思考过程165.3.2几种控件的具体实现165.4ICMP类的核心实现175.4.1在工程文件中插入ICMP,编写IP和ICMP头结构175.4.2对Winsock进行初始化185.4.3创建一个原始套接字,填充地址结构185.4.4填充数据195.4.5发送控制信息195.5工程文件的组成195.6控制协议的简单设计195.7模拟环境205.7.1硬件环境205.7.2软件环境20

9、5.8操作过程20结 论22参考文献22致 谢23声 明241 引言1.1 课题背景随着科学技术的飞速发展,21世纪的地球人已经生活在信息时代。20世纪人类两大科学技术成果计算机技术和网络技术,均已深入到人类社会的各个领域,Internet把“地球村”的居民紧密联系在一起,“天涯若比邻”已然成为现实。互联网之所以能迅速蔓延,被世人接受,是因为它具备特有的信息来源。近年来Internet的迅速发展,给人们的日常生活带来了全新的感受,“网络生存”已经成为时尚,同时人类社会诸如政治、科研、经济、军事等各种活动对信息网络的依赖程度已经越来越强,“网络经济”时代已初露端倪。1.2 国内外研究现状Ping

10、命令早已是耳熟能详的检查网络畅通的得力方法之一,但是ping命令是来自于哪个网络层次的哪个协议,就不是每个人能说得上的了。其实,ping命令就是ICMP协议的一个重要应用,Traceroute命令也是。ICMP协议是一个非常重要的协议,它对于网络安全、网络的正常运作具有极其重要的意义。它被用于在IP主机、路由器之间传递控制消息,如网络通不通、主机是否可达、路由是否可用等。这些控制信息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。而且,ICMP协议本身的特点又决定了它非常容易被用于攻击网络上的路由器和主机,造成CPU疲与奔命,系统瘫痪,主机死机。1.3 本课题研究的意义网络经济的发

11、展自然离不开网络,而网络的发展更离不开网络协议。协议本.质上是一套行为规则,这些规则也许是非书面形式的,但却是人们在使用中认为是正确而接受的。由于环境和文化的原因,行为规则有些细微差别。有些行为规则是写在纸上的,例如交通规则。但由于国家和地区的不同,交通规则的差异也很大。例如,在中国,黄色交通信号意味着“当心,准备停车”。但是在德国,同样的黄色交通信号却表示“准备,灯就要变成绿色了”。类似地,当两台或更多台计算机需要通信时,它们也要有行为规则和书写与传送信息的习惯。就像世界各地的人们在不同的地区讲不同的语言一样,计算机也需要“讲”特定的网络语言即“协议”。如果一个计算机不能使用某个协议,它就不

12、能与使用那个协议的计算机通信。网络里面充斥着各种协议。一台计算机需要准确地知道信息在网络里以什么形式传递,从而确保信息到达正确的地方。它需要知道网络预计的信息格式(例如,信息的哪一部分是数据,哪一部分用于制定接收方的地址;只有这样,网络才能将数据顺利地传递至目的地。就像上面提到的交通规则,我们可以称之为十字路口的公路交通协议,这种协议可以确保车辆的安全通过。1.4 本课题的研究方法使用VC 6.0,建立一个工程来实现ICMP数据包的发送和接收,用ICMP的数据部分作为本协议实现的载体,即用IP头+ICMP头+数据(自己设计的简单协议)的数据包形式实现不同机器之间的网络通信而达到网络控制的目的。

13、具体的网络通信编程使用的是raw socket即原始套接字编程。2 TCP/IP概述2.1 概念TCP/IP(Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,常用的如:HTTP协议、FTP协议、TELNET协议等,而TCP协议和IP协议是

14、保证数据完整传输的两个最基本的协议。通常说的TCP/IP是Internet协议族,而不单单是TCP和IP。TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的Internet是目前国际上规模最大的计算机网络,正因为Internet的广泛应用,使得TCP/IP成了事实上的标准。2.2 TCP/IP分层结构网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统,应用层,运

15、输层,网络层,链路层。下面简单介绍各层的主要功能和主要协议,它们的工作关系如图2-1所示。1)链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其它任何传输媒介)的物理接口细节。2)网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议,ICMP协议,以及IGMP协议。3)运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供可靠性的数据通信。它所做的

16、工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能达到另一端。任何必须的可靠性必须由应用层来负责。4)应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:Telnet 远程登陆;FTP 文件传输协议;SMTP简单邮件传送协议;SNMP简单网络管理协议。用户进程用户进程用户进程用户进程TCPUDPIPA

17、RP硬件接口RARPICMPIGMP传输层应用层网络层链路层图2-1 TCP/IP各层协议工作关系2.3 数据封装格式当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息。(有时还要增加尾部信息),该过程如图2-2所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。封装过程如图2-2所示。应用程序IPTCP以太网驱动程序以太网尾部以太网首部IP首部TCP首部

18、应用数据IP首部TCP首部应用数据TCP首部用户数据应用数据Appl首部用户数据以太网帧图2-2 数据进入协议栈时的封装过程IP数据报TCP段以太网3 ICMP概述3.1 ICMP介绍ICMP(Internet Control Message Protocol)Internet控制报文协议是一个非常重要的协议,它对于网络安全具有极其重要的意义。ICMP消息是随IP数据报一起传输的,但该消息本身也是与IP协议并行运行在网络层的协议。它是TCP/IP协议族的子协议,用于在IP主机、路由器之间传递控制消息。控制信息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用

19、户数据,但是对于用户数据的传递起着重要的作用。它传递差错报文以及其它需要注意的信息。我们在网络中经常会使用到ICMP协议,只不过我们察觉不到而已。比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其它的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。3.2 ICMP报文格式ICMP报文是在IP数据报内被传输的如表3-1所示:表3-1 ICMP封装在IP数据报内部IP首部ICMP报文ICMP报文的格式如表3-2所示。所有报文的前四个字节都是一样的,但是剩下的其它字节则互不相同。该消息使用了一种简单的数据结构,其报头部分由

20、三个字段组成,作为报头第一项的类型(type)字段占用了一个字节,用来表示该协议消息所实现的功能,而占用一个字节长度的代码(code)字段则用来进一步对消息内容进行分类。报头最后一项是两个字节长度的校验和,检验和字段覆盖整个ICMP报文,ICMP的检验和是必需的。而其后的ICMP消息内容则与消息功能有关,但所有消息内容中都必须带有引发错误消息和数据报的IP报头和前8个字节,而且这些信息足以使其上层协议对自己的报头进行检查并根据ICMP消息内容来执行适当的操作。最重要的是,ICMP协议不支持数据纠错功能,该协议只是通过数据源回送错误消息来告诉路由错误。表3-2 ICMP报文8位类型(1字节)8位

21、代码(1字节)16位校验和(2字节)不同的类型和代码有不同的内容3.3 ICMP报文的类型表3-3 ICMP报文类型类 型代 码描述查 询差 错0 0回显应答3目的不可达 0网络不可达 1主机不可达 2协议不可达 3端口不可达 4需要进行分片但设置了不分片比特 5源站选路失败 6目的网络不认识 7目的主机不认识 8源主机被隔离 9目的网络被强制禁止 10目的主机被强制禁止 11由于服务类型TOS,网络不可达 12由于服务类型TOS,主机不可达 13由于过滤,通信被强制禁止 14主机选权 15优先权中止生效 40源端口关闭 5重定向 0对网络重定向 1对主机重定向 2对服务类型和网络重定向 3对

22、服务类型和主机重定向 80请求回显 90路由器通告 100路由器请求 11超时0传输期间生存时间为0 1在数据报组装期间生存时间为0 12参数问题0坏的IP首部 1缺少必须的选项 130时间戳请求 140时间戳应答 150信息请求 160信息应答 170地址掩码请求 180地址掩码应答 各种类型的ICMP报文如表3-3所示,不同类型由报文中的类型字段和代码字段来共同决定。表中的最后两列表明ICMP报文是一份查询报文还是一份差错报文。因为ICMP差错报文需要做特殊处理,因此需要对它们进行区分。例如,在对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文(如果没有这个限制,可能会遇到一

23、个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。下面各种情况都不会导致产生ICMP差错报文:1)ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。2)目的地址是广播地址或多播地址的IP数据报。3)作为链路层广播的数据报。4)不是IP分片的第一片。5)

24、源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。这些规则是为了防止过去允许ICMP差错报文广播分组响应所带来的广播风暴。3.4 ICMP的重要性简介ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视。比如,可以利用操作系统规定的ICMP数据包的最大尺寸不超过64KB这一规定,向主机发起“Ping of Deat

25、h”(死亡之Ping)攻击。“Ping of Death”攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP”风暴,使得目标主机耗费大量的CPU资源,疲于奔命。4 网络套接字4.1 套接字概述网络通信是以套接字为基础的,一个套接字就是通信的一端。在通信的每一端,都可以找到与其对应的一个套接字。每当一台主机要与另一台机器对话时,它首先就要创建一对套接字,即使它正在使用着一对套接字与那台计算机通信,因为这次又开始了

26、一次新的对话。通常所说的网络通信,实际上是两台计算机通过一对套接字相互传输数据的过程。一个正在被使用的套接字有着它的类型与其相关的进程。最早使用套接字编程的是Berkeley分校的研究人员们,他们在UNIX平台上开发了Berkeley套接字方案,使得通过这种接口能实现多种网络协议之间的连接。套接字可以根据通信任务的性质分类。用户可以觉察出它们的区别。应用程序一般仅在同一类的套接字间通信。目前可以使用三种套接字,即流套接字、数据报套接字和原始套接字。下面简单介绍三种套接字的特点。1)流套接字,提供了双向的、有序的、无重复并且无记录边界的数据流服务,它适用于处理大量数据。网络传输层可以将数据分散或

27、集中到合适尺寸的数据报中。流套接字是面向连接的,通信双方进行数据交换之前,必须建立一条路径,这样既确定了它们之间存在的路由,又保证了双方都是活动的、可彼此响应的,但在通信双方之间建立一个通信信道需要很多开支。除此以外,大部分面向连接的协议为保证发送无误,可能会需要执行额外的计算来验证正确性,因此会进一步增加开销。2)数据报套接字,支持双向的数据流,但并不保证数据是可靠、有序和无重复的。也就是说,一个从数据报套接字中接收信息的进程有可能发现信息重复或者和发出时的顺序不同。此外,数据报套接字的一个重要特点是它保留了记录边界。对于这一特点,数据报套接口采用了与现在许多包交换网络(例如以太网)非常类似

28、的模型。数据报套接字是无连接的,它不保证接收端是否正在侦听,类似与邮政服务:发信人把信装入邮箱即可,至于收信人是否能收到这封信或邮局是否能按时将信件投递到收信人处等,发信人都不得而知。因此,数据报并不可靠,需由程序员负责管理数据报的排序和可靠性。应用程序一般仅在同一类的套接口间通信,不过只要底层的通信协议允许,不同类型的套接口间也照样可以通信。3)原始套接字,从用户的角度看,SOCK_STREAM、SOCK_DGRAM这两类套接字似乎的确涵盖了TCP/IP应用的全部,因为基于TCP/IP的应用,从协议栈的层次上讲,在传输层的确只可能建立于TCP或UDP协议之上,而SOCK_STREAM、SOC

29、K_DGRAM又分别对应于TCP和UDP,所以几乎所有的应用都可以用这两类套接字实现。但是,当我们面对如下问题时,SOCK_STREAM、SOCK_DGRAM将显得这样无助:(1)怎样发送一个自定义的IP包?(2)怎样发送一个ICMP协议包?(3)怎样分析所有经过网络的包,而不管这包是否是发给自己的?Raw Socket与标准套接字(SCCK_STREAM、SOCK_DGRAM)的区别在于前者直接置“根”与操作系统网络核心(Network Core),而SOCK_STREAM、SOCK_DGRAM“悬浮”与TCP和UDP协议的外围。当我们使用Raw Socket的时候,可以完全自定义IP包,一

30、切形式的包都可以“制造”出来。4.2 Winsock中的几个基本概念4.2.1 WinsockWindows下网络编程的规范Windows Sockets是得到广泛应用的、开放的、支持多种协议的网络编程接口。该规范以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Microsoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket 风格的库函数,也包含了一组针对Windows的扩展函数,以使程序员能充分利用Windows消息驱动机制进行编程。4.2.2 阻塞和非阻塞套接字可以处于阻塞或非阻塞模式。在阻塞模式下,在I/O操作

31、完成前,执行操作的Winsock函数会一直等待下去,不会立即返回(将控制权交还给程序),直到操作完成。在非阻塞模式下,Winsock函数无论如何都会立即返回并交出程序的控制权,在默认情况下,套接字为阻塞模式。4.2.3 字节顺序不同的计算机有时使用不同的字节顺序存储数据。任何从Winsock函数对IP地址和端口号的引用和传送给Winsock函数的IP地址和端口号均是按照网络顺序组织的,这也包括了sockaddr_in这一数据结构中的IP地址和端口号(但不包括sin family)。4.2.4 客户机/服务器模型一个在建立分布式应用时最常用的范例便是客户机/服务器模型。在这种方案中客户应用程序向

32、服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通信的非对称性。该模型工作时要求有一套为客户机和服务器所共识的惯例,来保证服务能够被提供。这一套惯例包含了一套协议,它必须在通信的两头都被实现。根据不同的情况,协议可能是对称的或是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的Telnet。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的还是非对称的,当服务被提供时必然存在“客户进程”和“服务进程”。一个服务程序通常在一个众所周知的地址监听对服务的

33、请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务对客户的请求做出适当的反应。4.3 Winsock编程原理4.3.1 Winsock的启动和终止由于Winsock的服务是以动态连接库Winsock DLL形式实现的,因此必须先调用WSAStartup函数对Winsock进行初始化,协商Winsock的版本支持,并分配必要的资源。如果在调用Winsock函数之前,没有加载Winsock库,则会返回SOCKET_ERROR错误,错误信息是WSANOTINITIALISED。 WSAStartup函数原形如下:in

34、t WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);其中wVersionRequested用于指定准备加载的Winsock库的版本,通常的做法是高位字节指定所需要的Winsock库的副版本,而低位字节则是主版本,然后,再用宏MAKEWORD(X,Y)(X是高位字节,Y是低位字节)获得wVersionRequested的正确值。lpWSAData参数是指向LPWSADATA结构的指针,该结构包含了加载的库版本有关的信息,它的格式如下:Typedef struct WSAData WORD wVersion;WORD wHighVers

35、ion;char szDescription WSADESCRIPTION_LEN+1;char szSystemStatus WSASYS_STATUS_LEN+1;unsighed short iMaxSockets;unsighed short iMaxUdpDg;char FAR * lpVendorInfo; WSADATA, *LPWSADATA;其中,wVersion字段为希望使用它们的Winsock版本。字段wHighVersion返回现有Winsock的最高版本。szDescription和szSystemStatus这两个字段由特定的Winsock实施方案设定,事实上没有用

36、。字段iMaxSockets和iMaxUdpDg分别为可同时打开的套接字数和数据报的最大长度,一般不要使用它们,若想知道数据报的最大长度则应该通过WSAEnumProtocols函数来查询协议信息,而可同时打开套接字的最大数目不是固定的,它很大程度上和可用物理内存的多少有关。最后一个字段lpVendorInfo是为Winsock实施方案有关的指定厂商信息预留的,任何一个Win32平台上都没有使用这个字段。此外,在应用程序关闭套接字后,还应调用WSACleanup函数终止对Winsock DLL的使用,并释放资源,以备下一次使用。WSACleanup函数的原形如下:int WSACleanup(

37、void);该函数不带任何参数,若调用成功则返回0,否则返回错误。4.3.2 错误检查和控制错误检查和控制对于Winsock应用程序是至关重要的。事实上,对Winsock API函数来说,返回错误是常见的,但是多数情况下,通信仍可在套接字上进行。 尽管返回错误的值并非一成不变,但不成功的Winsock调用返回的最常见的值是SOCKET_ERROR(值为-1的常量)。如果错误情况发生了,就可用WSAGetLastError函数来获得一段代码,这段代码明确地表明产生错误的原因。该函数原形为:int WSAGetLastError(void);该函数返回的错误都是预先声明的常量,根据Winsock版

38、本的不同,这些值的声明不在Winsock 1.h中,就会在Winsock2.h中。两个头字段的惟一差别是Winsock2.h中包含的错误代码(针对Winsock2.h 中引入的一些新的API函数)更多。为各种错误代码声明的常量一般都以WSAE开头。4.3.3 Winsock编程模型不论是流套接字还是数据报套接字编程,一般都采用客户/服务器方式,它们的运作过程基本类似,下面简单介绍两种基本的套接字编成模型。(1) 数据报套接字编程模型。数据报套接字编程的时序图如图4-1所示。1.1)服务器进程创建套接字服务进程总是先于客户进程启动,服务进程首先调用socket函数创建一个套接字。socket函数

39、原形如下:SOCKET socket (int af, int type, int protocol);其中,参数af用于指定网络地址类型,一般取AF_INET,表示该套接字在Internet域中进行通信。参数type用于指定套接字类型,若取SOCK_DGRAM表示要创建的套接字是数据报套接字,若取SOCK_RAW表示要创建的套接字是原始套接字。参数protocol用于指定网络协议,一般取0,表示默认为TCP/IP协议,本课题指定协议为IPPROTO_ICMP,表示创建一个将ICMP作为一种基层IP协议的套接字。1.2)将本地地址绑定到所创建的套接字上以便在网络上表示该套接字。这个过程就是通过

40、调用bind函数来完成的,该函数原形如下:int bind(SOCKET s, const struct sockaddr *name, int namelen);其中,参数s表示一个未捆绑套接字描述符。参数name是赋予套接字的地址,它由struct sockaddr结构表示,该结构的格式如下:struct sockaddru_short sa_family;char sa_data14;该地址结构随选择的协议的不同而变化,因此一般情况下另一个与该地址结构大小相同的sockaddr_in结构更为常用,sockaddr_in结构用来表示TCP/IP协议下的地址,在TCP/IP协议下,可以方便地

41、通过强制类型转换把sockaddr_in结构转换为sockaddr结构。Sockaddr_in结构的格式如下:Struct sockaddr_in short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin _zero 8;其中,sin_family字段必须为AF_INET,表示该socket处于Internet域;参数in_port和sin_addr用于指定端口和IP地址;字段sin_ zero只充当填充项,以使sockaddr_in结构和sockaddr结构的长度一样。1.3)等待接收数据常用的接

42、收数据的函数是recvfrom,它的原型是:int recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from,int *fromlen);其中,参数s是准备接收数据报的套接字,参数buf是即将收到数据的字符缓冲区,参数len是准备接收的字节数或buf的长度。参数flags可以是0、MSG_PEEK、MSG_OOB,0表示无特殊行为,参数from是一个sockaddr结构指针,参数fromlen是带有指向地址结构的长度的指针。 1.4)客户进程调用socket函数创建客户端套接字。1.5)客户进程调用bind函

43、数将本地地址绑定到所创建的套接字上。1.6)客户进程发送数据对于发送端的数据报套接字来说,也可以在创建套接字后,直接调用sendto函数,这是最简单的发送数据的方式,该函数原型为:int sendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen );除了buf是发送数据的缓冲,len指明发送的字节外,其余参数和recvfrom的参数一样,to是一个指向sockaddr结构指针,带有接收数据的套接字目标地址信息。1.7)调用closesocket函数来释放套接字资源。因为数

44、据报套接字没有连接,在接收端或发送端结束收发数据时,只需在套接字描述符上调用closesocket函数来释放套接字的资源即可。图4-1 非面向连接的套接字编成时序图(2)流套接字编程模型流套接字编程的时序图如图4-2所示。2.1)服务器进程创建套接字服务进程总是先于客户进程启动,服务进程首先调用socket函数创建一个套接字。socket函数原形如下:SOCKET socket(int af ,int type, int protocol);其中,参数af用于指定网络地址类型,一般取AF_INET,表示该套接字在Internet域中进行通信。参数type用于指定套接字类型,若取SOCK_DGR

45、AM表示要创建的套接字是数据报套接字,若取SOCK_RAW表示要创建的套接字是原始套接字。参数protocol用于指定网络协议,一般取0,表示默认为TCP/IP协议, 2.2)将本地地址绑定到所创建的套接字上以便在网络上表示该套接字。这个过程就是通过调用bind函数来完成的,该函数原形如下:int bind(SOCKET s, const struct sockaddr*name, int namelen);其中,参数s表示一个未捆绑套接字描述符。参数name是赋予套接字的地址,它由struct sockaddr结构表示,该结构的格式如下:struct sockaddr u_short sa_family; char sa_data14;该地址结构随选择的协议的不同而变化,因此一般情况下另一个与该地址结构大小相同的sockaddr_in结构更为常用,sockaddr_in结构用来表示TCP/IP协议下的地址,在TCP/IP协议下,可以方便地通过强制类型转换把sockaddr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号