课件案例07通信2稿_第1页
课件案例07通信2稿_第2页
课件案例07通信2稿_第3页
课件案例07通信2稿_第4页
课件案例07通信2稿_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录目录I摘要II第一章绪论 .11.1 网络扫描器基本概念 .11.2 网络扫描器分类 .11.2.1端口扫描 .11.2.2TCPSYN 扫描 .21.2.3TCPFIN 扫描 .21.2.4TCPconnect()扫描 .21.2.5ICMP 扫描 .21.2.6UDP 扫描 .4第二章 Winsock 网络程序设计 .52.1Winsock 网络程序设计基本概念 .52.2.1 服务器端操作 socket(套接字) .62.2.2 数据的传送 .92.3el 处理器与 Windows Sockets 函数的关系 .102.4 网络通信/连接中需要设置的参数 .112.5 套接口类所提供

2、的一些功能 .112.6 客户机服务器模型 .12第三章TCP/IP 协议介绍 .143.1 概念 .143.2 产生背景.153.3 开发过程.173.4 主要协议.183.4.1 网间协议 IP .193.4.2 传输控制协议 TCP .203.4.3IP 地址及其分类 .213.5IP 地址 .213.6 协议层级 .223.6.1 接口层 .223.6.2 网络层 .233.6.3 传输层 .233.6.4 应用层 .243.7ICMP 协议 .253.7.1ICMP 协定内容 .263.7.2ICMP 的重要性 .273.7.3 ICMP 校验和算法.283.8 防御基于 ICMP

3、的网络的方法 .293.8.1 选择合适的.293.8.2 配置以预防.293.9 过滤规则 .30第四章 ICMP 扫描器设计 .324.1 ICMP 扫描器的设计 .32第五章 总结 .40参考文献 .41致谢 .42附录 .43ICMP 扫描器设计摘要网络的开放性以及的是造成网络不安全的主要原因。科学家在设计ernet 之初就缺乏对安全性的总体构想和设计,所用的 TCP/IP 协议是建立在可信的环境之下,首先考虑的是网络互连,它是缺乏对安全方面的考虑的。而且 TCP/IP协议是完全公开的,使许多者无须到现场就能够得手,连接的主机基于互相信任的原则等等这一些性质使网络更加不安全。先进的技术

4、是实现网络的有力。高级 ICMP 扫描技术,就是利用 ICMP 协议实现的,高级的 ICMP 扫描技术主要是利用 ICMP 协议最基本的用途:报错。根据网络协议,如果按照协议出现了错误,那么接收端将产生一个 ICMP 的错误报文。这些错误报文并不是主动发送的,而是由于错误,根据协议自动产生。 当 IP 数据报出现 checksum 和版本的错误的时候,目标主机将抛弃这个数据报,如果是 checksum 出现错误,那么路由器就直接丢弃这个数据报了。有些主机比如 AIX、HP-UX 等,是不会发送 ICMP 的 Unreachable 数据报的。网络扫描器是系统管理员保障系统安全的有效工具,也是网

5、络者收集信息的重要。:网络扫描器;TCP/IP 协议;ICMP 扫描The Design of ICMP ScannerAbstractNetwork openness and caused by hackers is the main reason for the network is not safe.Scientists at the beginning of theernet design of the overall lack of security ideas anddesign,We used the TCP/IP protocol is based on credible en

6、vironment under,concern isthe networking, it is lack of security considerations. And the TCP/IP protocol is compleyopen, remote acs make many attackers need not to site can sucsful, based on mutualtrust and connected hosts some properties of principle and so on this network more unsafe。The advanced

7、technology is to realize the network information safety oferful weapon.SeniorICMP scanning techniques, theis to useICMP protocol walk,SeniorICMPscanning technique is mainly useICMP protocol most basic pure: error occurs. Accordingto the network protocol, in accordance with the agreement appeared mis

8、take if, then the receiver will produce anICMP error message. These error messages and not actively send, butbecause, according to the agreement automatically generated errors. When IP data submittednewer and verof the errors occur when thehost will abandon this data report, if isnewer appear mistak

9、e, so the router cast this data submitted directly. Some host like AIX, HP- UX, wont sendICMP Unreachable data report. Network scanner system administratorguarantee system is an effective tool for safety of information collectionimportant means.erlopers also anKey words:Network scanner;TCP/IP protoc

10、ol ;ICMP scanning第一章绪论1.1 网络扫描器基本概念网络扫描器是系统管理员保障系统安全的有效工具,也是网络者收集信息的重要。迅速发展的ernet 给人们的生活、工作带来了巨大的方便,但同时,也带来了一些不容忽视,网络信息的安全问题就是其中之一。网络的开放性以及的是造成网络不安全的主要原因。科学家在设计ernet 之初就缺乏对安全性的总体构想和设计,所用的 TCP/IP 协议是建立在可信的环境之下,首先考虑的是网络互连,它是缺乏对安全方面的考虑的。而且 TCP/IP协议是完全公开的,使许多者无须到现场就能够得手,连接的主机基于互相信任的原则等等这一些性质使网络更加不安全标注1。

11、先进的技术是实现网络的有力,这些技术包括:技术、验证技术、控制技术、安全内核技术、网络反技术、信息泄漏防治技术、技术、扫描技术、检测技术等。而在系统发生安全事故之前对其进行预防性检查,及时发现问题并予以解决不失为一种很好的办法,于是扫描技术应运而生。1.2 网络扫描器分类1.2.1 端口扫描端口扫描:真正的扫描器是 TCP 端口扫描器,这种程序可以选通 TCP/IP 端口和服务(比如,net 或 FTP),并目标的回答。通过这种方法,可以搜集到关于目标主机的有用信息(比如,一个匿旬用户是否可以登录等等)。而其他所谓的扫描器仅仅是 UNIX 网络应用程序,这些程序一般用于观察某一服务是否正在一台

12、机器上正常工作,它们不是真正的扫描器,但也可以用于收集目标主机的信息(UNIXrusers 和 host 命令就是这类程序的很好的例子)标注2。上通用的1.2.2 TCP SYN 扫描TCP SYN 扫描:扫描程序发送的 SYN 数据包,好像准备打开一个新的连接并等待反映一样。一个 SYN|ACK 的返回信息表示端口处于侦听状态。一个 RST 返回表示端口没有处于侦听状态。如果收到一个 SYN|ACK,扫描程序必须再发送一个 RST 信号,来关闭这个连接过程。优点:不会在目标计算机上留下。缺点:扫描程序必须要有 root 权限才能建立自己的 SYN 数据包1.2.3 TCP FIN 扫描TCP

13、 FIN 扫描: 关闭的端口会用适当的 RST 来回复 FIN 数据包,而打开的端口会忽略对 FIN 数据包的回复。优点:FIN 数据包可以不惹任何麻烦的通过。缺点:这种方法和系统的实现有一定的关系,有些系统不论是打开的或关闭的端口对 FIN 数据包都要给以回复,这种情况下该方法就不实用了。1.2.4 TCP connect()扫描TCP connect()扫描:操作系统提供 connect()系统调用,用来与每一个感的目标计算机的端口进行连接。如果端口处于侦听状态,那么 connect()就能成功。否则,这个端口是不能用的,即没有提供服务。优点:系统中的任何用户都利使用这个调用;如果对每个目

14、标端口以线性的方式扫描,将会花费相当长的时间,但如果同时打开多个套接字,就能加速扫描。缺点:很容易被发现,目标计算机的 logs 文件会显示一连串连接和连接出错的消息,并且能很快的将它关闭标注3。1.2.5 ICMP 扫描ICMP 扫描:就是利用 ICMP 协议走的,高级的 ICMP 扫描技术主要是利用 ICMP协议最基本的用途:报错。根据网络协议,如果按照协议出现了错误,那么接收端将产生一个 ICMP 的错误报文。这些错误报文并不是主动发送的,而是由于错误,根据协议自动产生 。当 IP 数据报出现 checksum 和版本的错误的时候,目标主机将抛弃这个数据报,如果是 checksum 出现

15、错误,那么路由器就直接丢弃这个数据报了。有些主机比如 AIX、HP-UX 等,是不会发送 ICMP 的 Unreachable 数据报的。利用下面这些特性:(1)向目标主机发送一个只有 IP 头的 IP 数据包,目标将返回 DestinationUnreachable 的 ICMP 错误报文。(2)向目标主机发送一个坏 IP 数据报,比如,不正确的 IP 头长度,目标主机将返回 Parametroblem 的 ICMP 错误报文。(3)当数据包分片但是,却没有给接收端足够的分片,接收端分片组装超时会发送分片组装超时的 ICMP 数据报。向目标主机发送一个 IP 数据报,但是协议项是错误的,比如

16、协议项不可用,那么目标将返回 Destination Unreachable 的 ICMP 报文,但是如果是在目标主机前有一个或者一个其他的过滤装置,可能过滤掉要求,从而接收不到任何回应。可以使用一个非常大的协议数字来作为 IP 头部的协议内容,而且这个协议数字至少在今天还没有被使用,应该主机一定会返回 Unreachable,如果没有 Unreachable 的 ICMP数据报返回错误提示,那么就说明被或者其他设备过滤了,也可以用这个办或者其他过滤设备存在标注4。探测主机正在使用哪些协议,法来探测是否有利用 IP 的协议可以把 IP 头的协议项改变,因为是 8 位的,有 256 种可能。通过

17、目标返回的 ICMP 错误报文,来作判断哪些协议在使用。如果返回 Destination Unreachable,那么主机是没有使用这个协议的,相反,如果什么都没有返回的话,主机可能使用这个协议,但是也可能是等过滤掉了。NMAP 的 IP Protocol scan 也就是利用这个原理。利用 IP 分片造成组装超时 ICMP 错误消息,同样可以来达到的探测目的。当主机接收到丢失分片的数据报,并且在一定时间内没有接收到丢失的数据报,就会丢弃整个包,并且发送 ICMP 分片组装超时错误给送端。可以利用这个特性制造分片的数据包,然后等待 ICMP 组装超时错误消息。可以对 UDP 分片,也可以对 T

18、CP 甚至 ICMP数据包进行分片,只要不让目标主机获得完整的数据包就行了,当然,对于 UDP 这种非连接的不可靠协议来说,如果没有接收到超时错误的 ICMP 返回报,也有可能时由于线路或者其他问题在传输过程中丢失了标注5。1.2.6 UDP 扫描UDP 扫描:在 UDP 实现的扫描中,多是了利用和 ICMP 进行的组合进行,这在 ICMP中以及提及了。还有一些特殊的就是 UDP 回馈,比如 SQL SERVER,对其 1434 端口发送x02或者x03就能够探测得到其连接端口。第二章 Winsock 网络程序设计2.1Winsock 网络程序设计基本概念联合了其他几家公司共同制定了一套 WI

19、NDOWS 下的网络编程接口,即Windows Sockets 规范;为了方便网络编程,90 年代初,由联合了其他几家公司共同制定了一套 WINDOWS 下的网络编程接口,即 Windows Sockets 规范,它不是一种网络协议,而是一套开放的、支持多种协议的 Windows 下的网络编程接口。现在的Winsock 已经基本上实现了与协议无关,你可以使用 Winsock 来调用多种协议的功能,但较常使用的是 TCP/IP 协议。Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有 Socket 接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个 Sock

20、et 接口来实现。微软为VC 定义了Winsock 类如CAsyncSocket 类和派生于CAsyncSocket 的CSocket类,它们简单易用,当然可以使用这些类来实现自己的网络程序,但是为了更好的了解Winsock API 编程技术,这里主要探讨怎样使用底层的API 函数实现简单的 Winsock网络应用程式设计,分别说明如何在Server 端和Cnt 端操作Socket,实现基于TCP/IP的数据传送,最后给出相关的源代码。在 VC 中进行 WINSOCK 的 API 编程开发的时候,需要在项目中使用下面三个文件,否则会出现编译错误。(1)WINSOCK.H: 这是 WINSOCK

21、 API 的头文件,需要包含在项目中。(2)WSOCK32.LIB: WINSOCK API 连接库文件。在使用中,一定要把它作为项目的非缺省的连接库包含到项目文件中去。(3)WINSOCK.DLL: WINSOCK 的动态连接库,位于 WINDOWS 的安装目录下。2.2Windows Sockets 规范以 U.C. Berkeley 大学 BSD UNIX 中流行的 Socket 接口为范例定义了一套Windows 下网络编程接口。它不仅包含了人们所熟悉的 Berkeley Socket 风格的库函数;也包含了一组针对 Windows 的扩展库函数,以使程序员能充分地利用 Windows

22、 消息驱动机制进行编程。Windows Sockets 规范本意在于提供给应用程序开发者一套简单的 API,并让各家网络供应商共同遵守。此外,在一个特定版本 Windows 的基础上,WindowsSockets 也定义了一个二进制接口(ABI),以此来保证应用 Windows Sockets API 的应用程序能够在任何网络供应商的符合 Windows Sockets 协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络供应商能够实现的一套库函数调用和相关语义。遵守这套 Windows Sockets 规范的网络,称之为 WindowsSockets 兼容的,而 Window

23、s Sockets 兼容实现的提供者,称之为 Windows Sockets提供者。一个网络供应商必须百分之百地实现 WindowsSockets 规范才能做到现Windows Sockets 兼容。任何能够与 Windows Sockets 兼容实现协同工作的应用程序就被认为是具有 Windows Sockets 接口。称这种应用程序为 Windows Sockets 应用程序。Windows Sockets 规范定义并了如何使用 API 与ernet 协议族(IPS,通常指的是 TCP/IP)连接,尤其要的是所有的 Windows Sockets 实现都支持流套接口和数据报套接口.应用程序

24、调用Windows Sockets 的API 实现相互之间的通讯。WindowsSockets 又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。2.2.1 服务器端操作 socket(套接字)(1)在初始化阶段调用 WSAStartup()此函数在应用程序中初始化 Windows Sockets DLL ,只有此函数调用成功后,应用程序才可以再调用其他 Windows Sockets DLL 中的 API 函数。在程式中调用该函数的形式如下:WSAStartup(MAKEWORD(2, 2),(LPWSADATA)&WSAData),其中 MAKEWORD(2, 2)表示用的是

25、WinSocket2.2 版本,WSAata 用来系统传回的关于 WinSocket 的资料。(2)建立 Socket初始化 WinSock 的动态连接库后,需要在服务器端建立一个的 Socket,为此可以调用 Socket()函数用来建立这个的 Socket,并定义此 Socket 所使用的通信协议。此函数调用成功返回 Socket 对象,失败则返回 INVALID_SOCKET(调用 WSAGetLastError()知原因,所有 WinSocket 的函数都可以使用这个函数来获取失败的原因)。SOCKET PASCAL FAR socket(af,type,protocol )参数: a

26、f:目前只提供 PF_INET(AF_INET);type:Socket 的类型 (SOCK_STREAM、SOCK_DGRAM);protocol:通讯协定(如果使用者不指定则设为 0);如果要建立的是遵从 TCP/IP 协议的 socket,第二个参数 type 应为 SOCK_STREAM,如为UDP(数据报)的 socket,应为 SOCK_DGRAM。(3)绑定端口接下来要为服务器端定义的这个的 Socket 指定一个地址及端口(Port),这样客户端才知道待会要连接哪一个地址的哪个端口,为此要调用 bind()函数,该函数调用成功返回 0,否则返回 SOCKET_ERROR。PAS

27、CAL FAR bind( SOCKET s, const struct sockaddr FAR *name,namelen );参 数: s:Socket 对象名;name:Socket 的地址值,这个地址必须是执行这个程式所在机器的 IP 地址;namelen:name 的长度;如果使用者不在意地址或端口的值,那么可以设定地址为 INADDR_ANY,及 Port 为 0,Windows Sockets 会自动将其设定适当之地址及 Port (1024 到 5000 之间的值)。此后可以调用 getsockname()函数来获知其被设定的值。(4)当服务器端的Socket 对象绑定完成之

28、后,服务器端必须建立一个的队列来接收客户端的连接请求。listen()函数使服务器端的 Socket 进入状态,并设定可以建立的最大连接数(目前最大值限制为 5, 最小值为 1)。该函数调用成功返回 0,否则返回 SOCKET_ERROR。backlog:最大连接个数;服务器端的 Socket 调用完 listen()后,如果此时客户端调用 connect()函数提出连接申请的话,Server 端必须再调用 accept() 函数,这样服务器端和客户端才算正式完成通信程序的连接动作。为了知道什么时候客户端提出连接要求,从而服务器端的Socket 在恰当的时候调用 accept() 函数完成连接

29、的建立,就要使用WSAAsyncSelect()函数,让系统主动来通知有客户端提出连接请求了。该函数调用成功返回 0,否则返回 SOCKET_ERROR。参 数: s:需要建立的 Socket;PASCAL FAR listen( SOCKET s,backlog );lEvent );参数: s:Socket 对象;hWnd :接收消息的窗口句柄;wMsg:传给窗口的消息;lEvent:被的网络事件,也即是应用程序向窗口发送消息的网路事件,该值为下列值 FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、FD_CLOSE 的组合,各个值的具体含意为 FD

30、_READ:希望在套接字 S 收到数据时收到消息;FD_WRITE:希望在套接字 S 上可以发送数据时收到消息;FD_ACCEPT:希望在套接字 S 上收到连接请求时收到消息;FD_CONNECT:希望在套接字 S 上连接成功时收到消息;FD_CLOSE:希望在套接字S 上连接关闭时收到消息;FD_OOB:希望在套接字S 上收到带外数据时收到消息。具体应用时,wMsg 应是在应用程序中定义的消称,而消息结构中的 lParam 则为以上各种网络事件名称。所以,可以在窗口处理自定义消息函数中使用以下结构来响应Socket 的不同事件:switch(lParam) case FD_READ:brea

31、k;case FD_WRITE、break; (5)服务器端接受客户端的连接请求当 Cnt 提出连接请求时,Server端 hwnd 视窗会收到 Winsock Stack 送来自定义的一个消息,这时,可以分析 lParam,然后调用相关的函数来处理此事件。为了使服务器端接受客户端的连接请求,就要使用accept() 函数,该函数新建一Socket与客户端的 Socket 相通,原先之 Socket 继续进入状态人的连接要求。该函数调用成功返回一个新产生的 Socket 对象,否则返回 INVALID_SOCKET。PASCAL FAR WSAAsyncSelect( SOCKET s, HW

32、ND hWnd,unsignedwMsg, longSOCKET PASCAL FAR accept( SCOKET s, struct sockaddr FAR *addr, FAR *addrlen );参数:s:Socket 的识别码;addr:存放来连接的客户端的地址;addrlen:addr 的长度(6)结束 socket 连接结束服务器和客户端的通信连接是很简单的,这一过程可以由服务器或客户机的任一端启动,只要调用 closesocket()就可以了,而要关闭 Server 端状态的 socket,同样也是利用此函数。另外,与程序启动时调用 WSAStartup()憨数相对应,程式

33、结束前,需要调用 WSACleanup() 来通知 Winsock StackSocket 所占用的资源。这两个函数都是调用成功返回 0,否则返回 SOCKET_ERROR。 PASCAL FAR closesocket( SOCKET s );参 数:s:Socket 的识别码; PASCAL FAR WSACleanup( void );参 数: 无2.2.2 数据的传送虽然基于 TCP/IP 连接协议(流套接字)的服务是设计客户机/服务器应用程序时的主流标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。先介绍一下TCP socket 与UDP socket 在传送数据时的特性

34、:Stream (TCP) Socket 提供双向、可靠、有次序、不重复的资料传送。Datagram (UDP) Socket 虽然提供双向的通信,但没有可靠、有次序、不重复的保证,所以 UDP 传送数据可能会收到无次序、重复的资料,甚至资料在传输过程中出现遗漏。由于 UDP Socket 在传送资料时,并不保证资料能完整地送达对方,所以绝大多数应用程序都是采用 TCP 处理 Socket,以保证资料的正确性。一般情况下 TCP Socket 的数据发送和接收是调用 send() 及recv() 这两个函数来达成,而 UDP Socket 则是用 sendto() 及 recvfrom() 这

35、两个函数,这两个函数调用成功发挥发送或接收的资料的长度,否则返回 SOCKET_ERROR。 PASCAL FAR send( SOCKET s, const char FAR *buf, len, flags );参数:s:Socket 的识别码buf:存放要传送的资料的暂存区len buf:的长度flags:此函数被调用的方式对于 Datagram Socket 而言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。对 Stream Socket 言,Blocking 模式下,若是传送系统内的空间不够存放这些要传送的资料,send()将会被 block 住,直

36、到资料送完为止;如果该 Socket 被设定为-Blocking 模式,那么将视目前的 output buffer 空间有多少,就送出多少资料,并不会被 block 住。flags 的值可设为 0 或 MSG_DONTROUTE及 MSG_OOB 的组合。 PASCAL FAR recv( SOCKET s, char FAR *buf, len, flags );参数:s:Socket 的识别码buf:存放接收到的资料的暂存区len buf:的长度flags:此函数被调用的方式对 Stream Socket 言,可以接收到当前input buffer 内有效的数据,但其数量不超过 len 的

37、大小。2.3el 处理器与 Windows Sockets 函数的关系el 处理器的字节顺序是和 DEC VAX 处理器的字节顺序一致的。因此它与68000 型处理器以及ernet 的顺序是不同的,所以用户在使用时要特别以保证正确的顺序。任何从 Windows Sockets 函数对 IP 地址和端的和传送给Windows Sockets 函数的 IP 地址和端均是按照网络顺序组织的,这也包括了sockaddr_in 结构这一数据类型中的 IP 地址域和端口域(但不包括 sin_family 域)。考虑到一个应用程序通常用与时间服务对应的端口来和服务器连接,而服务器提供某种机制来通知用户使用另

38、一端口。因此 getservbyname()函数返回的端已经是网络顺序了,可以直接用来组成一个地址,而不需要进行转换。然而如果用户输入一个数,而且指定使用这一端,应用程序则必须在使用它建立地址以前,把它从主机顺序转换成网络顺序(使用 htons()函数)。相应地,如果应用程序希望显示包含于某一地址中的端(例如从 getpeername()函数中返回的),这一就必须在被显示前从网络顺序转换到主机顺序(使用 ntohs()函数)。由于端el 处理器和ernet 的字节顺序是不同的,上述的转换是无法避免的,应用程序的编写者应该使用作为 Windows Sockets API 一部分的标准的转换函数,

39、而不要使用自己的转换函数代码。因为将来的 Windows Sockets 实现有可能在主机字节顺序与网络字节顺序相同的机器上运行。因此只有使用标准的转换函数的应用程序是可移植的。2.4 网络通信/连接中需要设置的参数在一次网络通信/连接中有以下几个参数需要被设置:本地 IP 地址 - 本地端- 对方端- 对方 IP 地址。左边两部分称为一个半关联,当与右边两部分建立连接后就称为一个全关联。在这个全关联的套接口上可以双向的交换数据。如果是使用无连接的通信则只需要建立一个半关联,在发送和接收时指明另一半的参数就可以了,所以可以说无连接的通信是将数据发送到另一台主机的指定端口。此外不论是有连接还是无

40、连接的通信都不需要双方的端相同。2.5 套接口类所提供的一些功能下面看看套接口类所提供的一些功能,通过这些功能可以方便的建立网络连接和发送数据。BOOL CAsyncSocket:Create( U nSocketPort = 0, nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL ); 用于创建一个本地套接口,其中 nSocketPort 为使用的端 ,为零则表示由系

41、统自动选择,通常在客户端都使用这个选择。nSocketType 为使用的协议族,SOCK_STREAM 表明使 用有 连接的 服务 , SOCK_DGRAM 表明 使用 无连接 的数 据报服 务。 lpszSocketAddress 为本地的 IP 地址,可以使用点分法表示如 。BOOL CAsyncSocket:Bind( U nSocketPort, LPCTSTR lpszSocketAddress = NULL )作为等待连接方时产生一个网络半关联,或者是使用 UDP 协议时产生一个网络半关联。BOOL CAsyncSocket:Listen( nConnectionBacklog =

42、 5 )作为等待连接由于 CSocket 由 CAsyncSocket 派生所以拥有 CAsyncSocket 的所有功能,此外你可以通过 BOOL CSocket:Create( UnSocketPort = 0,nSocketType =SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL )来创建套接口,这样创建的套接口没有办法异步处理事件,所有的调用都必需完成后才会返回。2.6 客户机服务器模型一个在建立分布式应用时最常用的范例便是客户机/服务器模型。在这种方案中客户应用程序向服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通讯时的非对称性

43、。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。这一套惯例包含了一套协议。它必须在通讯的两头都方时指明同时可以接受的连接数,请注意不是总共可以接受的连接数。BOOL CAsyncSocket:Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, * lpSockAddrLen = NULL ) 作为等待连接 等待连接建立,当连接建立后一个新的套接口将被创建,该套接口将会被用于通信。BOOL CAsyncSocket:Connect( LPCTSTR lpszHo

44、stAddress, UnHostPort );作为连接方发起与等待连接方的连接,需要指明对方的 IP 地址和端。void CAsyncSocket:Close( );关闭套接口。CAsyncSocket:Send( const void* lpBuf,nBufLen,nFlags =0 )CAsyncSocket:Receive( void* lpBuf,nBufLen,nFlags = 0 );在建立连接后发送和接收数据,nFlags 为标记位,双方需要指明相同的标记。CAsyncSocket:SendTo( const void* lpBuf,nBufLen, U nHostPort,

45、LPCTSTR lpszHostAddress = NULL,nFlags = 0 )CAsyncSocket:ReceiveFrom( void* lpBuf, nBufLen, CString& rSocketAddress, U & rSocketPort, nFlags = 0 ); 对于无连接通信发送和接收数据,需要指明对方的 IP 地址和端 ,nFlags 为标记位,双方需要指明相同的标记。可以看到大多数的函数都返回一个布尔值表明是否成功。如果发生错误可以通过CAsyncSocket:GetLastError()得到错误值。被实现。根据不同的实际情况,协议可能是对称的或是非对称的。

46、在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一是从机。一个对称协议的例子是ernet 中用于终端仿真的NET。而非对称协议的例子是ernet 中的 FTP。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。一个服务程序通常在一个众所周知的地址对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被惊醒并且为客户提供服务对客户的请求作出适当的反应。这一请求/相应的过程可以简单的用图表示。虽然基于连接的服务是设计客户机/服务器应用程序时的标准,但有些服务也是可以通

47、过数据报套接口提供的。第三章 TCP/IP 协议介绍3.1 概念图 3.1 TCP/IP 结构对应 OSI 结构TCP/IP 是一个四层的分层体系结构。最 :应用层为协议的最 ,在该层应用程序与协议相配合,发送或接收数据。TCP/IP 协议集在应用层上有 登录协议( net)、文件传输协议( FTP)、电子邮箱协议( SMTP)、 系统( DNS)等,它们 了 TCP/IP 的基本应用程序。:即传输层,其主要协议有 UDP(user data protocol)和传输控制协议实现各种异构网络或异种机之间的互 信。TCP/IP 已成为 计算机网络最成熟、应用最广的互联协议。 ernet 采用的就

48、是 TCP/IP 协议,网络上各种各样的计算机上只要安装了 TCP/IP 协议,它们之间就能相互通信。运行 TCP/IP 协议的网络是一种采用包(分组)交换网络。TCP/IP协议是由 100 多个协议组成的协议集, TCP 和 IP 是其中两个最重要的协议。TCP和 IP 两个协议分别属于传输层和网络层,在 ernet 中起着不同的作用标注6 。TCP/IPOSI应用层应用层表示层会话层传输层(TCP)传输层网络层(IP)网络层网络接口层数据链路层TCP/IP(传输控制协议/网际协议)是异构网络互连的通信协议,通过它可以低层:是网际协议(IP,ernet Protocol),它处理每个包的地址

49、部分,使这些包正确的到达目的地。网络上的网关计算机根据信息的地址来进行路由选择。即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。 TCP/IP 使用客户端/服务器模式进行通信。TCP/IP 通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。TCP/IP 与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。正是它们之间的“无国籍的”了网络路径,才使每个人都可以连续不断的使用网络。 许多用户熟悉使用 TCP/IP 协议的应用协议。包括网(www,world wide web)的超文本传输协议( HTTP),文件传输协议(FTP),网络

50、协议(net)和简单邮件传输协议(SMTP)。这些协议通常和 TCP/IP 协议打包在一起。 使用模拟调制解调器连接网络的个人电脑通常是使用串行线路接口协议( SLIP)和点对点协议(P2P)。这些协议压缩 IP 包后通过拨号线发送到对方的调制解调器中。与 TCP/IP 协议相关的协议还包括用户数据报协议( UDP),它代替 TCP/IP 协议来达到特殊的目的。其他协议是网络主机用来交换路由信息的,包括ernet 控制信息协议(ICMP),网关协议( IGP),外部网关协议( EGP),边界网关协议( BGP)。3.2 产生背景地球村“人与人”之间的“牵手协议”。1997 年,为了褒奖对因特网

51、发展作出突出贡献的科学家,并对 TCP/IP 协议作出充分肯定, 授予为因特网发明和定义 TCP/IP 协议的 和 “国家技术金奖”。这无疑使人们认识到 TCP/IP 协议的重要性。在阿帕网(ARPR)产生 之初,通过接口信号处理机实现互联的电脑并不多,众所周知,如今电脑上因特网都要作 TCP/IP 协议设置,显然该协议成了(TCP,Transmis Control Protocol)。TCP 协议是在 IP 协议提供的服务基础上,支持面向连接的、可靠地传输服务,是负责 信息或把文件拆分成更小的包。这些包通过网络传送到接收端的 TCP 层,接收端的 TCP 层把包还原为原始文件;UDP 协议时

52、直接利用 IP 协议进行 UDP 数据报的传输,因此 UDP 协议提供的是无连接、不保证数据完整到达目的地的传输服务。由于 UDP 不使用很繁琐的流控制或错误恢复机制,只充当数据报的发送者和接收者,因此,UDP 比 TCP 简单得多。大部分电脑相互之间不兼容,在一台电脑上完成的工作,很难拿到另一台电脑上去用,想让硬件和都不一样的电脑联网,也有很多。当时的状况是,用的电脑是 DEC 系列产品,用的电脑是 Honeywell 中标机器,用的是 IBM 公司中标的电脑,每一个军种的电脑在各自的系里都运行良好,但却有一个大弊病:不能共享资源。当时科学家们提出这样一个理念:“所有电脑生来都是的。”为了让

53、这些“生来”的电脑能够实现“资源共享”就得在这些系统的标准之上,建立一种大家共同都必须遵守的标准,这样才能让不同的电脑按照一定的规则进行“谈判”,并且在谈判之后能“握手”。在确定今天因特网各个电脑之间“谈判规则”过程中,最重要的人物当数( Von G.Cerf)。正是他的努力, 才使今天各种不同的电脑能按照协议上网互联。也因此获得了与克莱因(“因特网之父”)一样的美称“互联网之父”。从小喜欢标新立异,坚强而又热情。中学读书时,就被允许使用加州大学洛杉矶分校的电脑,他认为“为电脑编程序是个非常激动人心的事,只要把程序编好,就可以让电脑做任何事情。”1965 年,从斯坦福大学毕业到 IBM 的一家

54、公司当系统工程师,工作没多久,就觉得知识不够用,于是到加州大学洛杉矶分校攻读博士,那时,正逢阿帕网的建立,“接口信号处理机”(IMP)的研试及网络中心的建立,也成了著名科学家克莱因手下的一位学生。与另外三位年轻人(、登)参与了阿帕网的第一个节点的联接。此后,BBN 公司对工作中各种情况发展有很强判断能力、被公认阿帕网建成作出巨大贡献的(BobKahn)也来到了加州大学洛杉矶分校。在那段日子里,往往是提出需要什么,而则通宵达旦地把符合要求的给编出来,然后他们一起测试这些,直至能正常运行。当时的主要格局是这样的,提出网络设计网络布局,设计阿帕网总体结构,克莱因负责网络系统,还有众多的科学家、参与研

55、究、试验。69 年 9 月阿帕网诞生、运行后,才发现各个 IMP 连接的时候,需要考虑用各种电脑都认可的信号来打开通信管道,数据通过后还要关闭通道。否则这些 IMP 不会知道什么时候应该接收信号,什么时候该结束,这就是现在所说3.3 开发过程后两年,1972 年,(Robert E. Kahn)被 DARPA 的处理办公室雇佣,在那里他研究数据包网络和地面无线数据包网络,并且能够在它们之间沟通的价值。在 1973 年春天,已有的 ARPANET 网络控制程序(NCP)协议的开发者(Von Cerf)加入到为 ARPANET 设计下一代协议而开发开放互连模型的工作中。到了 1973 年夏天,和很

56、快就开发出了一个基本的改进形式,其中网在构建了阿帕网先驱之后,DARPA 开始了其他数据传输技术的研究。NCP 诞生的通信“协议”的概念。70 年 12 月制定出来了最初的通信协议由 开发、参与的“网络控制协议”(NCP),但要真正建立一个共同的标准很不容易, 72 年10 月国际电脑通信大会结束后,科学家们都在为此而努力。“包切换”理论为网络之间的联接方式提供了理论基础 在自己研究的基础上,认识到只有深入理解 系统的细节才能建立一种对 系统普适的协议,73 年 请 一起考虑这个协议的各个细节,他们这次合作的结果产生了目前在开放系统下的所有网民和 都在使用的“ 传输控制协议”( TCP, Tr

57、ansmis -Control Protocol)和“ 因特网协议” ( IP, ernet Protocol)即 TCP/IP 协议。通俗而言:TCP 负责发现传输 ,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而 IP 是给因特网的每一台电脑规定一个地址。1974 年 12 月, 、 的第一份 TCP 协议详细说明正式 。当时国防部与三个科学家小组签定了完成 TCP/IP 的协议,结果由领衔的小组捷足先登,首先制定出了通过详细定义的 TCP/IP 协议标准。当时作了一个试验,将信息包通过点对点的网络,再通过陆地电缆,再通过网络,再由地面传输,贯串欧洲和,经过各种电

58、脑系统,全程 9.4竟然没有丢失一个数据位,远距离的可靠数据传输证明了 TCP/IP 协议的成功。标注71983 年 1 月 1 日,运行较长时期曾们了的 NCP 被停止使用,TCP/IP协议作为因特网上所有主机间的共同协议,从此以后被作为一种必须遵守的规则被肯定和应用。正是由于 TCP/IP 协议,才有今天“地球村”因特网的巨大发展。3.4 主要协议之所以说 TCP/IP 是一个协议族,是因为 TCP/IP 协议包括 TCP、IP、UDP、ICMP、RIP、NET、FTP、SMTP、ARP、TFTP 等许多协议,这些协议一起称为 TCP/IP 协议。以下是协议族中一些常用协议英文名称和用途:

59、TCP(Transport Control Protocol)传输控制协议络协议之间的不同通过使用一个公用互联网络协议而隐 ,并且可靠性由主机保证而不是像 ARPANET 那样由网络保证。( 称赞 Hubert Zimmerman 和 Louis Pouzin(CYCLADES 网络的设计者)在这个设计上发挥了重要影响。)由于网络的作用减少到最小的程度,就有可能将任何网络连接到一起,而不用管它们不同的特点,这样就解决了 最初 。(一个流行的说法提到和 工作的最终产品 TCP/IP 将在运行“两个罐子和一根弦”上,实际上它已经用在信鸽上。一个称为网关(后来改为路由器以免与网关 )的计算机为每个网

60、络提供一个接口并且在它们之间来回传输数据包。这个设计 更细的形式由 在斯坦福的网络研究组的 1973 年1974 年期间开发出来。(处于同一时期的诞生了 PARC 通用包协议组的 PARC 早期网络研究工作也有重要的技术影响;人们在两者之间摇摆不定。)DARPA 于是与 BBN、斯坦福和伦敦大学签署了协议开发不同硬件 上协议的运行版本。有四个版本被开发出来TCP v1、TCP v2、在 1978 年春天分成 TCP v3和 IP v3 的版本,后来就是稳定的 TCP/IP v4目前因特网仍然使用的标准协议。1975 年,两个网络之间的 TCP/IP 通信在斯坦福和伦敦大学(UCL)之间进行了测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论