TCP、IP协议技术与应用编程报告
- 格式:doc
- 大小:438.00 KB
- 文档页数:16
一、基础知识•计算机网络的概念•网络体系结构与OSI参考模型•TCP/IP的体系结构•客户机/服务器模型•IP地址的概述1、计算机网络的概念•计算机网络是通过通信链路连接到一起的一组计算机或设备的集合,是现代通信技术与计算机技术相结合的产物。
•通过网络,不同计算机用户之间可以一起共享资源,如磁盘上的文件及打印机等,也可以彼此之间互相交换数据信息。
2、网络体系结构与OSI参考模型•网络的体系结构指的是通信系统的整体框架。
它的目的是为网络硬件、软件、协议、存取控制和拓扑结构提供标准。
•网络体系结构的关键要素是协议和拓扑。
•协议定义了通信的方式和进行通信的时间,主要包括语法、语义和同步3个关键要素。
•语法:定义了所交换数据的格式和结构,以及数据出现的顺序。
•语义:定义了发送者或接受者所要完成的操作,包括对协议控制报文组成成分含义的约定。
•同步:定义了事件实现顺序以及速度匹配。
体现在当两个实体进行通信时,数据发送的事件以及发送的速率。
•协议是指在计算机网络中,为进行网络中的数据交换而建立的规则、标准或约定的集合,如交换数据的格式、编码方式、同步方式等。
分层的体系结构•每个实体通常定义两种不同的接口:一个是为同一计算机上使用它的通信服务的其他上层实体定义的服务接口,简称服务;另一个是为另一台计算机上对等实体定义的对等接口,即协议。
•计算机网络的各层及其协议的集合就构成了网络的体系结构,即计算机网络及其构成所完成的精确定义。
OSI参考模型•OSI参考模型传输数据的基本过程两主机间使用OSI参考模型交换数据的基本过程经过中间节点数据传递的过程3、TCP/IP 的体系结构4、客户机/服务器模型• 客户机/服务器模型的工作模型第3层 传输层第1层 网络接口层第2层 网际层第4层 应用层TCP/IP 协议的层次结构各层常用的协议5、IP地址概述•由于不同物理网络的硬件地址编码方法不同、编址空间也不同,当不同物理网络组织在一起时,整个互联网络中的物理设备就无法用统一的编址方法和编址空间对其进行唯一标识。
为此,在TCP/IP协议族中引入了IP地址来统一因特网中所有物理设备的编址,进而确保每个物理设备在因特网中都有一个唯一的标识。
•在IPv4中,IP地址是由32位二进制数组成,其地址空间是0~232−1。
•一般将组成IP地址的32位二进制分成4段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样IP地址就可表示成:210.73.140.2•这种表示方法通常称为点分十进制表示法。
二、网络编程1、网络中两个通信程序如何相互识别对方2、Windows Sockets介绍3、使用MFC类库设计网络程序4、WinInet程序设计知识1、网络中两个通信程序如何相互识别对方•在网络中为了标识通信的进程,首先要标识网络中进程所在的主机,其次要标识主机上不同的进程。
关于网络环境下不同主机的识别问题,在讲传输层协议时,我们知道为了完成端到端进程之间的通信,在互联网中使用IP地址来标识不同的主机。
关于主机上不同的进程问题,在前面讲端口号时已经说明过,在网络协议中使用端口号来标识主机上的不同进程。
还有一个问题,就是前面我们讨论的都是在TCP/IP协议下,端到端进程的标识问题,其实网络应用程序由于不同的主机可能使用不同的网络协议,其工作方式不同,地址的表示格式也不同,因此,网络中进程的通信还要解决多种协议的识别问题。
这样为了惟一的标识网络中通信的一个进程(即通信的某一方)就要使用一个如下的三元组:•(本地协议,本地IP地址,本地端口号)•这样一个三元组由于它只指定了通信时一条连接的半个部分,即通信的一方,所以叫一个半相关(half-association)。
如果要完整的表示网络中进行通信的两个进程,那么就要使用一个如下结构的六元组:•(本地协议,本地地址,本地端口号,远地协议,远地地址,远地端口号)2 、Windows Sockets介绍Windows Sockets的概念•Windows Sockets顾名思义,它就是在Windows环境下使用的一套网络编程机制(或规范),常常简称为Winsock。
该规范是在上个世纪90年代初制定的。
这套规范是在Windows操作系统下得到广泛应用的、开放的、支持多种协议的网络编程接口。
该规范从1991年的1.0版到1997年的2.2.1版,经过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的大力支持下,现在已经成为Windows环境下网络编程事实上的标准。
•套接口的概念•Windows Sockets API依靠套接口(Socket)进行通讯,那么什么是套接口(Socket)呢?对于初学网络程序设计的人们来说,套接口是一个既抽象且又很重要的概念。
因此要注意对于套接口这个概念的理解与体会。
•套接口可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点,这个端点是一个逻辑上的概念。
通信时其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡(Network Interface Cards, NIC)相连的传输介质将这段信息发送到另外一台主机的Socket中,使这段信息能传送到其他程序中,如图所示。
•为了满足不同的通信程序对通信质量和性能的要求,一般的网络系统提供了三种不同类型的套接口,以供用户在设计网络应用程序时根据不同的要求来选择。
这三种套接口分别是:•流式套接口(SOCK_STREAM):它提供了一种可靠的、面向连接的双向数据传输服务。
实现了数据的无差错、无重复地发送。
内设流量控制,被传输的数据看作是无记录边界的字节流。
在TCP/IP协议族中,使用TCP协议来实现字节流的传输,当用户想要发送大批量的数据,或者对数据的传输有较高的要求时使用流式套接口。
•数据报套接口(SOCK_DGRAM):它提供了一种无连接、不可靠的双向数据传输服务。
数据包以独立的包形式被发送,并且保留了记录边界,不提供可靠性保证。
数据在传输过程中可能会丢失或重复,并且不能保证在接收端数据按发送顺序接收。
在TCP/IP协议族,使用UDP协议(Winsock 2也支持其它的协议)来实现数据报套接口。
在同一台计算机上或负载较轻的LAN上,因为出现差错的可能性较小,可以使用数据报套接口进行数据传输,这样通信的质量可以得到保证,并且通信的效率较高。
另外,在前面的章节中我们已经说过,UDP还可以实现广播通信。
•原始套接口(SOCK_RAW):该套接口允许对较低层协议(如IP或ICMP)进行直接访问。
常用于检验新的网络协议实现,也可用于测试新配置或安装的网络设备。
要说明的是Windows Sockets规范并没有规定Windows Sockets DLL必须支持原始套接口。
3、使用MFC类库设计网络程序MFC类库简介•MFC(Microsoft Foundation Classes)是微软公司提供的用于C++程序设计的基础类库,它由两大部分组成:一部分是通常所说的C++类库,是MFC类库的主体部分,这些类构成了MFC应用程序框架;另一部分是MFC预定义宏、全局变量和全局函数,是MFC类库的辅助部分。
这两部分都是用MFC进行Windows应用程序开发不可缺少的组成部分。
•在MFC类库中,与网络程序设计有关的类有以下几种:•(1)文件服务类(File Services)•在有关文件服务类的定义中有一个CSocketFile类,其实它并不是用来在双方套接口上发送文件的,而是将需要序列化的数据,比如一些结构体数据传给对方。
要注意的是CSocketFile类虽然派生自CFile类,但它屏蔽掉了CFile::Open()等函数,也就是说不能调用CSocketFile的Open函数来打开一个实实在在的文件,否则会导致例外。
•(2)Internet服务器API类(Internet Server API)•在Internet服务器API类中,主要定义了一些与HTTP协议有关的类,这些类是CHtmlStream、CHttpFilter、CHttpFilterContext、CHttpServer和CHttpServerContext•(3)Internet服务类(Internet Serveices)•Internet服务类中有与Internet会话有关的CInternetSession类,与Internet连接有关的CInternetConnection类,CInternetConnection有3个派生类,它们是CFtpConnection、CGopherConnection和CHttpConnection。
与查找文件有关的CFileFind类,该类有两个派生类,它们是CFtpFileFind和CGopherFileFind类。
•(4)Windows套接口类(Windows Sockets)•MFC中定义了一个Windows套接口程序设计类CAsyncSocket,MFC还定义了一个派生于CAsyncSocket的CSocket类,这两个类简单易用,用户可以使用它们来实现自己的网络程序。
•以上四种类型的类中,Windows套接口类是最基本的,也是最常用的网络程序设计类。
4、WinInet程序设计知识•WinInet编程的简介•WinInet的最大优点是提供了对普通Internet协议的访问功能,这些协议包括HTTP、FTP和Gopher。
这样程序员使用WinInet可以编写出高水平的Internet客户端程序,而不必去了解Winsock、TCP/IP和特定Internet协议的细节。
这为那些对Internet协议了解不多,但又想设计Internet应用程序的人员提供了极大的方便。
WinInet还为这三种协议提供了统一的函数集,既Win32 API接口。
如果底层协议改变(如从FTP到HTTP),利用统一的函数集,只用修改少量的代码就可以完成这种改变。
•在VC++中,提供了两种使用WinInet的方法:• 调用Win32 Internet函数;• 使用VC++提供的WinInet类库。
MFC将WinInet封装在一个标准的、易于使用的类集合中。
•在编写WinInet客户端程序时,既可以直接调用WinInet函数,也可以使用WinInet类库。
•下面我们首先介绍WinInet函数,然后再讨论如何使用WinInet类库。
在介绍WinInet函数之前,我们先介绍几个与WinInet函数有关的概念。
三、编程实例MFC WinInet类应用程序编程实例在因特网上有很多FTP服务器,他们存有丰富的软件和信息资源,至今仍然是因特网提供的主要服务之一。