Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1367741
  • 博文数量: 946
  • 博客积分: 52360
  • 博客等级: 大将
  • 技术积分: 13080
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-07 17:31
文章分类

全部博文(946)

文章存档

2011年(1)

2008年(945)

我的朋友

分类: C/C++

2008-08-07 17:38:50

下载本文示例代码

一、FTP:文件传输协议

  1、 FTP协议:采用2个TCP连接来传输一个文件。
  (1) 控制连接:
  控制连接通常以客户服务器方式建立。控制连接始终等待客户与服务器的通信,该连接将命令从客户端传给服务器,并传回服务器的应答。
  (2) 数据连接:
  该连接用于数据传输。
  2、 数据表示:
  (1) 文件类型:
  ◆ ASCII文件:默认以NVT ASCII形式传输。这要求发送方将本地文本文件转换为NVT ASCII码,而接收方将NVT ASCII码再还原为本地文本文件。用NVT ASVCII码传输的每一行都以一个回车和一个换行结束。
  ◆ EBCDIC文件:要求两端都是EBCDIC系统。
  ◆ 二进制文件类型:数据发送一个连续的比特流,通常用于传输二进制文件。
  ◆ 本地文件类型:再具有不同字节大小的主机之间传输二进制文件。
  (2) 格式控制,只对ASCII和EBCDIC文件类型有效。
  ◆ 非打印(默认):文件中不含垂直格式信息。
  ◆ 远程登录格式控制:文件含有向打印机解释的远程登录垂直格式控制。
  ◆ Fortran回车控制:每行首字符是Fortran格式控制符。
  (3) 结构:
  ◆ 文件结构(默认):文件被认为是一个连续的字节流,不存在内部的文件结构。
  ◆ 记录结构:该结构只用于文本文件。
  ◆ 页结构:每页都带有页号发送,以便收方能随机存储各页。
  (4) 传输方式
  ◆ 流方式(默认):文件以字节流传输,对于文件结构,发送方在文件尾提示关闭数据连接。对于记录结构,有专用的两字节序列码标记记录结束和文件结束。
  ◆ 块方式:文件以一系列块来传输,每块前面都带有一个或多个首部字节。
  ◆ 压缩方式:
  3、 FTP命令:
  命令和应答在客户和服务器的控制连接上以NVT ASCII形式传送,这要求在每行结尾都要返回CR/LF。
  FTP命令大家都很熟悉,这就不介绍了。
  4、 FTP应答:
  应答都是ASCII码形式的3位数字,并跟有报文选项。一些典型的应答:
  ◆ 125:数据连接已打开,传输开始
  ◆ 200:就绪
  ◆ 214:帮助报文
  ◆ 331:用户名就绪,要求输入口令
  ◆ 425:不能打开数据连接
  ◆ 452:错写文件
  ◆ 500:未知语法错误
  ◆ 501:无效参数
  ◆ 502:未实现的MODE类型
  5、 连接管理:
  数据连接有3大用途:
  (1) 从客户向服务器发送一个文件
  (2) 从服务器向客户发送一个文件
  (3) 从服务器向客户发送文件或目录列表。
  每一个数据连接对传输一个文件或目录序列都要建立一个新的连接。
  (1) 客户发出命令要求建立数据连接
  (2) 客户在客户主机上未数据连接选择一个临时端口号
  (3) 客户使用PORT命令从控制连接上把端口号发给服务器。
  (4) 服务器在控制连接上接收端口号,并向客户端主机上的端口发出主动打开,服务器的数据连接使用端口20。

二、SMTP:简单邮件传送协议

  1、SMTP协议:

  用TCP进行的邮件交换是由报文传送代理MTA(Message Transfer Agent)完成的。两个MTA之间用NVT ASCII进行通信,客户向服务器发出命令,服务器用数字应答码和可选的字符串进行响应。
  常见的SMTP命令,其中只有5个SMTP命令用于发送邮件:HELLO、MAIL、RCTP、DATA和QUIT。
  HELO:标识自己

  MAIL:启动用户代理

  RCPT:标识接收方

  DATA:邮件报文内容

  QUIT:退出

  RSET:异常中止当前的邮件事务并使两端复位

  VRFY:使客户能够询问发送方以验证接收方地址,而无需向接收方发送邮件。

  NOOP:强迫服务器响应一个OK应答码,不做任何事。

  2、信封、首部和正文

  (1) 信封:由MTA用来交付。
  MAIL From:xiaoj@njb.swirebev.com
  RCPT To:xiaoj@hotmail.com
  (2) 首部:由用户代理使用。共有9个字段:Received、Message_Id、From、Data、Reply-To、X-Phone、X-Mailer、To、Subject。每个首部字段都包含一个名、紧跟一个冒号,接着是字段值。
  (3)正文:是发送给接收用户报文的内容。当用DATA命令发送时,先发送首部,紧跟一个空行,然后是正文。用DATA发送的各行都必须小于1000字节。

  用户接收正文部分,加上一些首部字段,并把结果传给MTA。MTA加上一些首部字段,加上信封,并把结果发给另以MTA。所有这一些都以NVT ASCII格式发送。

  3、扩充的SMTP:

  要使用ESMTP,首先通过EHLO命令而不是HELO命令启动与服务器的会话。它会显示扩充命令:EXPN、SIZE、HELP、8BITMIME、XADR等。SIZE命令是让客户在MAIL FROM命令中以字节的多少指定报文的大小,这样服务器可以在客户开始发送报文之前验证它是否接收该长度的报文。8BITMIME允许客户把关键字BODY加到MAIL FROM命令中,指定正文中是否包含NVT ASCII(默认)或8位数据。除非客户收到服务器响应EHLO命令发来的8BITMIME关键字,否则禁止客户发送任何非NVT ASCII字符。

  (1) 首部变化:非ASCII字符

  用途主要是为了允许发送方名、接收方名以及主题中使用其他的字符。
  首部字段中可以包含编码字(coded word),其格式如下:

  =?charset?encoding?encoded-text?=

  charset表示字符集,有效值时us-ascii和iso-8859-x。
  encoding是一个单个字符用来指定编码方法,支持2个值:
  ◆ Q:意思是引号中可打印的,目的是用于拉丁字符集。大多数字符作为NVT ASCII发送的。任何要发送的字符若第8位是1则被作为3个字符发送,第一个字符是"=",跟着两个16进制数,如0xe9,则发送3个字符"=E9",空格通常作为下划线或三个字符"=20"发送。
  ◆ B:意思是以64为基数的编码。文本中的3个连续字节(24位)被编码为4个6位值,用于表示所有可能的6位值的64个NVT ASCII字符。当要编码的个数不是3的倍数时,等号被用作填充符。

  (2) 正文变化:通用Internet邮件扩充可以把结构置入正文,这就是MIME,即通用Internet扩充。MIME不要求任何扩充,
但加入了一些告知收件者正文结构的新标题,正文仍然可以用NVT ASCII发送,而不考虑邮件内容。MIME定义5个新标题:
  Mime-version:当前版本是1.0
  Content-Tyoe:内容类型是无格式ASCII文本,即Internet邮件的默认选择。可以为: text,multipart,message,application,image,audio,video。
  Content-Transfer-Encoding:内容传送编码有5中:7bit(即NVT ASCII ),quoted-printable,base64,8bit,binary。
  Content-ID:
  Content-Description:

三、NFS:网络文件系统

  1、远程过程调用RPC(Remote Procedue Access),主要过程如下:

  (1) 当客户程序调用远程的过程时,它实际上只调用了一个位于本机上的由RPC程序生成的函数,这个函数称为客户残桩(stub),客户残桩将过程的参数封装为一个网络报文并将该报文发送给服务器程序。
  (2) 服务器主机上的一个服务器残桩负责接收这个网络报文,它从网络报文中提取参数,然后调用服务器进程。
  (3) 当服务器函数返回时,它返回到服务器残桩。服务器残桩提取返回值,把返回值封装成一个网络报文,然后将报文发送给客户残桩。
  (4) 客户残桩从接收的网络报文中取出返回值,将其返回给客户程序。

  2、XDR:外部数据表示

  XDR用来对RPC调用报文和应答报文中的值进行编码,这些值包括RPC首部字段(XID、程序号、接收状态等)、过程参数和过程结果。XDR定义了很多数据类型以及它们如何在一个RPC报文中传输的具体形式。发送者必须采用XDR格式构造一个RPC报文,然后接收者将XDR格式的报文转换为本机形式。

  3、端口映射器

  包含远程过程的RPC服务器程序使用的是临时窗口,这就要求跟踪RPC程序使用了哪一个临时端口。端口映射器本身必须由一个知名端口111,同时由一个程序号(100000),一个版本号(2)。服务器程序使用RPC调用端口映射器注册本身,客户程序使用使用RPC调用端口映射器查询。
  端口映射器提供4个服务进程:
  (1) PMAPPROC_SET:RPC服务器启动时调用这个过程,注册程序号、版本号和带有一个端口的协议。
  (2) PMAPPROC_UNSRET:RPC服务器删除一个已经注册的映射。
  (3) PMAPPROC_GETPORT:RPC客户启动时调用,根据给定的程序号、版本号和协议来获得注册的端口号。
  (4) PMAPPROC_DUMP:返回端口映射器数据库中所有记录。

  4、NFS协议

  (1) 访问的是一个本地文件还是NFS文件对于客户是透明的,当文件被打开时,由内核决定。
  (2) NFS客户通过它的TCP/IP模块向NFS服务器发送RPC请求。
  (3) NFS服务器一般在端口2049接收作为UDP数据报的客户请求。
  (4) NFS服务器收到客户请求时,它将这个请求传递给本地文件访问例程,后者访问服务器主机上的一个本地文件。
  (5) 大多数NFS服务器是多线程的,可以处理多个请求。
  (6) 客户也可以运行多个NFS客户。

  5、文件句柄

  文件句柄是一个不透明的对象,用来引用服务器上的一个文件或目录。服务器创建文件句柄,把它传递给客户,然后客户访问文件时使用这个句柄。

  6、安装协议

  客户必须在访问服务器上一个文件系统中的文件之前,使用安装协议安装哪个文件系统。一般时客户主机引导时完成。

  7、NFS过程:前缀为NFSPROC_

  (1) GETATTR:返回文件属性
  (2) SETATTR:设置文件属性
  (3) STATUS:返回一个文件系统的状态
  (4) LOOKUP:查找一个文件
  (5) READ:读数据
  (6) WRITE:写数据
  (7) CREATE:创建文件
  (8) REMOVE:删除文件
  (9) RENAME:重命名文件
  (10) LINK:为一个文件构造一个硬链接
  (11) SYMLINK:为一个文件构造一个符号链接
  (12) READLINK:读符号链接
  (13) MKDIR:建立目录
  (14) RMDIR:删除目录
  (15) READDIR:读目录。

---------END--------


作者:肖进
单位:南京中萃食品有限公司 资讯部
邮件:xiaoj@njb.swirebev.com
电话:025-58642091 下载本文示例代码

阅读(202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~