红联Linux门户
Linux帮助

linux下网络编程学习----基本协议学习

发布时间:2006-09-06 01:12:15来源:红联作者:coolbg
如果学过网络,我们肯定知道网络的体系结构:OSI参考模型和Tcp/Ip参考模型。

前者是理论模型,后者确是实际运行的模型。

1)我们这里先简单学习一下Tcp/IP模型。
下面是Tcp/Ip协议层次
[code]===============================

应用程序 应用程序 应用层
---------|----------------------|---------------------------------------------------
Tcp协议 udp协议 传输层
----------\----------------------------/------------------------------------------
\ /
\ /
ip协议 --- icmp协议 网络层
----------------|-------------------------------------------------------------------
网络接口 数据链路层

===============================[/code]
ip协议是网络层协议,作为一个网络层协议,ip协议主要完成数据包的发送,将数据包传送到远程机器,而不管这两台机器是否处于同一个网络。ip协议为高层协议提供了一个非面向连接的和不可靠的数据包传送服务。

建立在ip协议之上的传输层协议,tcp协议提供了这样一种可靠的通信道路 。该协议保证通信的可靠性,保持数据字节的顺序,提供流量控制等。

[详细资料可以查看上面参考资料所在的地址。]

2)ftp协议

ftp协议属于应用层的协议。
应用层协议包括一些已经标准化的协议,比如ftp,telnet,ssh等,当然我们也可以自己开发一套协议。

简介:

ftp协议,全称File Transfer Protocol(文件传输协议),这是大家非常熟悉的网络协议之一,也是Internet中使用最多的文件传输协议。主要用于在两台计算机之间实现文件的上传与下载,其中一台计算机作为FTP的客户端,另一台作为FTP的服务器端。通过FTP协议可以上传、下载几乎所有的文件类型,比如TXT、EXE、 DOC、MP3、ZIP、RAR等等。

应用:

在实际应用中,FTP不仅可以作为网络文件下载的主要格式,还可以作为单独的命令来使用。比如我们在下MP3的时候,经常遇到ftp://www.xxx.com/1.mp3,其中,ftp://表示文件传输格式,www.xxx.com 表示远程计算机域名,1.mp3就是要下载的文件。另外,在Windows中还集成了ftp命令,比如在Windows XP的“命令提示符”中键入“ftp www.xxx.com”,就可以打开www.xxx.com远程计算机,具体的命令参数可以键入“ftp/?”查看。

深入介绍:

 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:

一个控制连接(control connection)

这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话时间。


几个数据连接(data connection)

这些连接用于传输文件和其它数据,例如:目录列表等。这种连接在需要数据传输时建立,而一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,数据连接既可能是客户端发起的,也可能是服务器端发起的。


下面,我们通过一个FTP客户程序看一下控制连接。这里,我们需要使用debug模式(ftp -d)才能显示客户发出的FTP协议命令。在客户程序的输出信息中,这些协议命令是以--->开头的,例如:

---> USER nixe0n

在命令发出之后,服务器会发出响应,响应信息以数字开头,例如:

530 Login incorrect.

下面,我们和FTP服务器建立一个连接,使用用户名nixe0n登录,在会话过程中发出两次目录切换名,一次成功一次失败,其中黑体是我们的输入:

ftp -d ftp.linuxaid.com.cn
Connected to ftp.linuxaid.com.cn.
220 ftp.linuxaid.com.cn FTP server ready.
Name (ftp.linuxaid.com.cn:nixe0n): nixe0n
---> USER nixe0n
331 Password required for nixe0n.
Password:
---> PASS XXXX
230 User nixe0n logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd one
---> CWD one
250 CWD command successful.
ftp> cd tmp
---> CWD tmp
550 tmp: No such file or directory.
ftp> bye
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 398 bytes in 0 transfers.
221 Thank you for using the FTP service on ftp.linuxaid.com.cn.

在FTP 协议中,控制连接使用周知端口21,因此使用SSH的标准端口转发就可以这种连接进行很好的安全保护。相反,数据传输连接的目的端口通常实现无法知道,因此处理这样的端口转发非常困难。FTP协议使用一个标准的端口21作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。FTP的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的。FTP协议的这个特征对SSH转发以及防火墙和NAT的配置增加了很多困难。

除此之外,还有另外一种FTP模式,叫做被动模式(passive mod)。在这种模式下,数据连接是由客户程序发起的,和刚才讨论过的模式(我们可以叫做主动模式)相反。是否采取被动模式取决于客户程序,在ftp命令行中使用passive命令就可以关闭/打开被动模式。

展开:

如果要实现FTP搜索引擎,一个最关键的模块是实现“数据采集”,即获得第三方ftp服务器上的文件信息。
而这个数据采集过程如果从底层来出发,那么等于要实现一些ftp协议客户端的功能,比如最简单的,我们需要实现自动登录,登录后发送list命令并接受相关的文件信息[这里涉及到上面提到的端口控制问题,比较麻烦],关闭连接。另外,如果还考虑到某些文件名的命名不规则,需要抽取部分文件内部信息,进行进一步的索引,从而更好的服务用户,那么还需要实现一些其他命令。
当然,“数据采集”还涉及好多文件信息的处理问题,比如不良信息过滤,中文分词,索引等技术。
文章评论

共有 6 条评论

  1. 杰戒 于 2011-05-09 17:10:58发表:

    了解下

  2. hpy121 于 2009-12-16 16:29:26发表:

    {:3_113:}(q):s

  3. linux.leo 于 2009-12-13 14:05:06发表:

    好东西啊

  4. longyun 于 2009-12-11 19:06:30发表:

    楼主,最好能发些相关书籍

  5. 于 2006-11-02 00:20:55发表:

    :0(1 :0D1

  6. flycocoon 于 2006-09-06 11:55:40发表:

    不错