套接字和协议的关系

一、
我的提问:
知道套接字是应用程序跟TCP/IP打交道的渠道,
但HTTP,FTP等应用层的协议的实现却一直困扰着我? 具体的归结为下面另个问题:
1.这些协议的实现跟套接字的关系(即是否用套接字实现的(当然我不怎么认为)) 
2.这些协议的实现是否也跟套接字编程原理一样,服务器端和客户端都要要建侦听进程,然后对接收的信息进行相应
 
答:
套接字相当于人的耳朵和声带,协议相当于人的语言,约定好发出个1,对面就只回复个2,发出个3,只回复个4,不回复别的,这就是协议的意思,不论什么协议,都是侦听发送
答:
根都是socket,google “http ftp 原理”
 
二、
 
浅析FTP的工作原理
 
摘要
通过阅读本文,您可以了解到FTP的基本的工作原理。作 者以建立FTP连接到断开FTP连接的方式详细介绍了FTP会话全过程。如果您对PORT模式或者PASV模式的FTP工作原理有些疑惑,相信本文能使您 了解更多的细节,使您更加从容的面对企业的网络流量以及安全的管理,特别是如果您的企业正准备在企业内部署ISA Server 2000,或许会给您发布内部服务器带来帮助!
目录
  • FTP协议概述
  • PORT模式
  • PASV模式
  • 比较分析
  • 图示
FTP协议概述
起 初, FTP并不是应用于IP网络上的协议,而是ARPANEt网络中计算机间的文件传输协议, ARPANET是美国国防部组建的老网络,于1960-1980年使用。在那时, FTP的主要功能是在主机间高速可靠地传输文件。目前FTP仍然保持其可靠性,即使在今天,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将 文件存贮在别的系统。例如,如果某用户运行Web服务器,需要从远程主机上取得HTML文件和CGI程序在本机上工作,他需要从远程存储站点获取文件(远 程站点也需安装Web服务器)。当用户完成工作后,可使用FTP将文件传回到Web服务器。采用这种方法,用户无需使用Telnet登录到远程主机进行工 作,这样就使Web服务器的更新工作变得如此的轻松。
FTP是TCP/IP的一种具体应用,它工作在 OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的"三次 握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。
下面,让我们来看看,一个FTP客户在和服务器连接是怎么样的一个过程(以标准的FTP端口号为例)。
首 先,FTP并不像HTTP协议那样,只需要一个端口作为连接(HTTP的默认端口是80,FTP的默认端口是21),FTP需要2个端口,一个端口是作为 控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数 据传输通道的,主要有3个作用
  • 从客户向服务器发送一个文件。
  • 从服务器向客户发送一个文件。
  • 从服务器向客户发送文件或目录列表。
其次,FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的。为了让大家清楚的认识这两种模式,朗月繁星分别举例说明。
PORT模式
当 FTP客户以PORT模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上的,因为 1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过TCP的三次握手后,连接 (控制信道)被建立(如图1和图2)。现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能 传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一 指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表(如图3)。当完成这一操作时,FTP客户也许要下载一个文件, 那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个"新"端口,你可以先用netstat -na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态(如图4)。当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用 连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。
PASV模式
然 而,当FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP 客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接 服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据 用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发 送PASV命令,这也就是所谓的连接建立的协商过程。为了验证这个过程我们不得不借助CUTEFTP Pro这个大家经常使用的FTP客户端软件,因为微软自带的FTP命令客户端,不支持PASV模式。虽然你可以使用QUOTE PASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。现在我们使用 CUTEFTP Pro以PASV模式连接服务器(如图5),请注意连接LOG里有这样几句话:
COMMAND:> PASV   227 Entering Passive Mode (127,0,0,1,26,108) COMMAND:> LIST STATUS:>   Connecting ftp data socket 127.0.0.1: 6764...   125 Data connection already open; Transfer starting.   226 Transfer complete.
其中,
227 Entering Passive Mode (127,0,0,1,26,80). 代表客户机使用PASV模式连接服务器的26x256+108=6764端口。(当然服务器要支持这种模式)
125 Data connection already open; Transfer starting.说明服务器的这个端口可用,返回ACK信息。
再让我们看看用CUTEFTP Pro以PORT模式连接服务器的情况。其中在LOG里有这样的记录:
COMMAND:> PORT 127,0,0,1,28,37   200 PORT command successful. COMMAND:> LIST   150 Opening ASCII mode data connection for /bin/ls. STATUS:>   Accepting connection: 127.0.0.1:20.   226 Transfer complete. STATUS:>   Transfer complete.
其中,
PORT 127,0,0,1,28,37告诉服务器当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个端口。
Accepting connection: 127.0.0.1:20表示服务器接到指令后用20端口连接7205端口,而且被FTP客户接受。
比较分析
在 这两个例子中,请注意: PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是 由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从C/S模型这个角度来说,PORT对于服务器来说是 OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,比如使用微软的ISA Server 2000发布一个FTP服务器,这一点非常关键,如果设置错了,那么客户将无法连接。
最后,请注意在FTP客户连接服务器的整个过程中,控制信道是一直保持连接的,而数据传输通道是临时建立的
在 本文中,朗月繁星把重点放到了FTP的连接模式,没有涉及FTP的其他内容,比如FTP的文件类型(Type),格式控制(Format control)以及传输方式(Transmission mode)等。不过这些规范大家可能不需要花费过多的时间去了解,因为现在流行的FTP客户端都可以自动的选择正确的模式来处理,对于FTP服务器端通常 也都做了一些限制,如下
  • 类型:A S C I I或图像。
  • 格式控制:只允许非打印。
  • 结构:只允许文件结构。
  • 传输方式:只允许流方式
至于这些内容,限于篇幅朗月繁星在这里就不想再介绍了。希望这篇文章能对大家有些帮助,特别是正在学习ISA Server2000的朋友和一些对FTP不很了解的朋友。
OK,就此驻笔了,希望大家与我交流。
图示
套接字和协议的关系_第1张图片
图1:FTP客户使用FTP命令建立于服务器的连接
套接字和协议的关系_第2张图片
图2:用netstat命令查看,控制信道被建立在客户机的6015和服务器的20端口

图3:ls命令是一个交互命令,它会首先与服务器建立一个数据传输通道。经验证本次试验客户机使用6044端口

图4:使用netstat命令验证上一次使用ls命令建立的数据传输通道已经关闭

图5:使用CUTEFTP Pro以PASV模式连接服务器点此可看详图

 
三、
(一)HTTP协议通信过程 

当我们在浏览器的地址栏输入“www.baidu.com”然后按回车,这之后发生了什么事,我们直接看到的是打开了对应的网页,那么内部客户端和服务端是如何通信的呢? 

1、      1、URL自动解析 

HTTP URL包含了用于查找某个资源的足够信息,基本格式如下:HTTP://host[“:”port][abs_path],其中HTTP表示桶盖HTTP协议来定位网络资源;host表示合法的主机域名或IP地址,port指定一个端口号,缺省80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。 

例如:输入www.163.com;浏览器会自动转换成:HTTP://www.163.com/ 

2、获取IP,建立TCP连接 

浏览器地址栏中输入"HTTP://www.xxx.com/"并提交之后,首先它会在DNS本地缓存表中查找,如果有则直接告诉IP地址。如果没有则要求网关DNS进行查找,如此下去,找到对应的IP后,则返回会给浏览器。 

当获取IP之后,就开始与所请求的Tcp建立三次握手连接,连接建立后,就向服务器发出HTTP请求。 

3、客户端浏览器向服务器发出HTTP请求 

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令,接着以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 

4、Web服务器应答,并向浏览器发送数据 

客户机向服务器发出请求后,服务器会客户机回送应答, 

HTTP/1.1 200 OK 

应答的第一部分是协议的版本号和应答状态码,正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据 

5、Web服务器关闭TCP连接 

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码 

Connection:keep-alive 

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
 
 
 
 
 
 
 
(二)HTTP协议工作过程

在爬虫搜集到的信息中,除了网页内容外,通常还包括服务器的应答头部信息。而这些信息标明了服务器或者网络的状况,对爬虫的长期运作有着很重要的意义。在服务器向浏览器发送网页数据前,还需要经过两个步骤:

l    客户端发送请求头信息,例如:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.51 [en] (X11; I; Linux 2.2.11 i586)
Host: www.tjnu.edu.cn
Accept: image/gif, image/jpeg, image/jpeg, image/png, */*
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

这是给服务器的一些信息,通常包括:标识提出请求的浏览器标识符、浏览器接受的内容类型、语言种类和请求网页的URL

l    服务器发送应答头部信息,例如:

 

HTTP/1.0 200 OK
Date: Mon, 1 Nov 2005 11:22:33 GMT
Server: Apache/1.2.6
Last-Modified: Sat, 30 Oct 2005 22:33:44 GMT
Content-Length: 1234
Content-Type: text/html

它通常包括协议规范、应答状态码、网页的体积、编码方式以及修改的时间。协议规范表明使用HTTP/1.0还是HTTP/1.1。从HTTP/1.1开始,状态码从200-299之间表示成功的应答;从300-399之间表示客户请求没有完成,一般需要重定向;从400-499之间表示客户请求出错;从500-599之间表示服务器存在错误。爬虫自动的解析应答头信息,根据网页的体积分配内存空间,根据网页的修改日期,判断数据库中的网页是否需要更新,根据网页不同的编码类型采取不同的抓取策略。

你可能感兴趣的:(工作,浏览器,服务器,FTP服务器,command,web服务)