成立2011年12月1日理解Internet下的C/S通信理解HTTP协议的基本原理理解FTP协议的基本原理拓展:“安全”的通信理解Internet下的C/S通信理解HTTP协议的基本原理理解FTP协议的基本原理拓展:“安全”的通信Internet一。客户端发起连接二。客户端发送请求三。服务器响应请求四。服务器关闭连接理解Internet下的C/S通信理解HTTP协议的基本原理理解FTP协议的基本原理拓展:“安全”的通信HTTP,全称HypertextTransferProtocol,超文本传输协议。起源于1960年美国人TedNelson文本信息处理的思想——超文本(hypertext),他被誉为HTTP之父。在他的领导下,万维网协会(W3C)和Internet工作小组(IETF)发布了一系列RFC文件,其中RFC2616定义了我们今天使用最普遍的一个版本HTTP1.1。HTTP是一种基于请求/响应模式的、无状态的协议。HTTP属于应用层的协议,它建立在TCP协议之上,因此是一种面向连接的协议;HTTP1.0中,服务器只处理完一个请求就关闭TCP连接,开销较大,会引起网络堵塞;HTTP1.1中,引入了持续连接机制(PersistentConnection),支持在一个TCP连接上发送/处理多个HTTP请求,并且客户端的多个请求可以连续发送,大大提高服务器的吞吐量。URL,UnifiedResourceLocator,统一资源定位器,能够表示Internet上资源的抽象位置,它同时适用于HTTP与FTP协议。HTTP协议的URL:◦格式:[:port][absolutepath];◦hostname既可以为服务器的域名,也可以为其IP地址;◦port表示服务器处理http消息的端口,默认为80;◦absolutepath,以/开头,表示请求的资源在服务器上的绝对路径;例:当用户通过浏览器访问一个URL的时候,浏览器即向Web服务器发送了一个HTTP请求。一个完整HTTP请求示例:◦POST/register.phpHTTP/1.1CRLF◦Host:202.120.2.101CRLF◦User-Agent:MSIE9.0CRLF◦Accept:text/html,image/gif,……CRLF◦……◦Content-Length:18CRLF◦Connection:Keep-AliveCRLF◦Cache-Control:no-cacheCRLF◦CRLF◦user=lewis&pwd=123由以下四部分组成:◦请求行;◦请求头;◦空行(CRLF);◦请求正文。为突出重点,下面只列出最常见的请求方法与请求头,完整规范请参考RFC2616标准。请求方法,以下仅列出最常见的三种:◦GET,请求服务器上URL所标识的资源;◦HEAD,请求服务器上URL所标识的资源的头信息;◦POST,请求服务器上URL所标识的资源,并在请求正文中附加用户数据;◦PUT,请求在服务器上放置URL所标识的资源。URL,标识资源在服务器上的路径;协议版本,如HTTP/1.0、HTTP/1.1等;换行CRLF;例:◦GET/index.htmlHTTP/1.1CRLF包含若干个键值对;键值对格式:键:值CRLF;请求头的作用:浏览器借以向服务器提供必要的信息和参数设定;例:◦Host:202.120.2.101CRLF◦User-Agent:MSIE9.0CRLF◦Accept:text/html,image/gif,……CRLF◦Connection:keep-aliveCRLF◦Cache-Control:no-cacheCRLF服务器在收到并处理HTTP请求后对客户端作出响应;一个完整HTTP响应示例(续前HTTP请求示例):◦HTTP/1.1200OKCRLF◦Date:Apr11200615:32:08GMTCRLF◦Server:Apache/2.0.46(win32)CRLF◦Content-Length:59CRLF◦Content-Type:text/htmlCRLF◦CRLF◦htmlbodyYouhaveregisteredsuccessfully!/body/html由以下四部分组成:◦响应行◦响应头◦空行CRLF◦响应正文同样为突出重点,下面只列出最常见的状态码与响应头,完整规范请参考RFC2616标准。协议版本,如HTTP/1.1等;状态码;原因短语;换行CRLF;例:◦HTTP/1.1200OKCRLF状态码原因短语含义1xx信息请求收到,继续处理2xx成功请求已被成功接收、理解与接受200OK请求成功,将返回响应3xx重定向必须采取额外的动作才能完成对该请求的处理304NotModified被请求的资源自上次被请求以来未有改变4xx客户端错误请求包含语法错误或无法被处理400BadRequest请求包含语法错误404NotFound被请求的资源不存在于服务器上5xx服务器错误服务器无法处理一个合法的请求501NotImplemented请求方法未实现503ServiceUnavailable服务器过载与请求头非常类似,同样采用若干键值对的形式。例:◦Server:ApacheTomcat/5.0.12CRLF◦Date:Mon,6Oct200313:13:33GMTCRLF◦Content-Type:text/htmlCRLF◦Last-Modified:Mon,6Oct200313:23:42GMTCRLF◦Content-Length:112CRLF注意Content-Type表示返回资源的类型,也称为MIME类型;常见的MIME类型如◦text/html(网页)◦image/jpeg(jpg图片)◦application/x-javascript(Javascript脚本)等;完整MIME类型列表可以参考观察浏览网站时的HTTP报文交互过程;观察GET与POST提交表单数据时的区别;进阶:利用Telnet浏览网页。理解Internet下的C/S通信理解HTTP协议的基本原理理解FTP协议的基本原理拓展:“安全”的通信FTP,全称FileTransferProtocol,文件传输协议。最初在1971年由AbhayBhushan制定,RFC规范号114(已被废除)。在1980年6月和1985年10月分别修订为RFC765(已被废除)和RFC959(目前施行),之后几乎没有变化。直到1997年6月和1998年9月因为安全原因修订并增加IPv6支持,并加入了“被动模式”的新类型。相同点:◦FTP与HTTP协议均为应用层协议;◦FTP与HTTP协议均基于TCP连接与请求/响应模式;不同点:◦FTP协议通常为特定用户群体服务,而HTTP协议则旨在为不特定对象分发文件;◦FTP协议的命令与数据端口分开,而HTTP协议使用同一端口;◦FTP使用数据端口传输文件,消息仅用于传输命令,而HTTP协议在消息正文中传输文件;格式:ftp://[user:password@]hostname[:port][absolutepath];user与password,连接FTP的用户名与密码;后三个字段含义与HTTP相同,但port默认为21,即FTP控制端口(或命令端口);例:◦@public.sjtu.edu.cn:21/upload/a.jpgFTP请求与操作系统命令行中带参数的命令十分类似,如USERscott、PASStiger、PWD等,以CRLF结尾;FTP响应由响应码+响应字符串+CRLF组成,如:◦331Passwordrequiredforanonymous◦227EnteringPassiveMode(202,120,2,2,158,239).◦注意:响应字符串可能随不同FTP服务器而不同。注意:FTP请求与响应均发生在服务器的21号端口,数据传输则按照连接模式不同发生在服务器20号端口或随机端口;可见,FTP协议中请求与响应的消息格式,相比HTTP协议来说,要简洁许多并具有很强交互性,因此我们将通过一次完整的FTP访问实例进行讲解。通过资源管理器连接站点服务器将返回FTP站的Banner信息:首先尝试匿名连接,客户端发送命令USERanonymous与PASSUser@;◦服务器首先返回331Passwordrequiredforanonymous◦接收密码后返回530Loginincorrect.再尝试发送正确用户名与密码:◦服务器:230-Quotason:0.00MB/500.00MB◦服务器:230Userlewischengloggedin查询服务器操作系统类型:客户端发送SYST命令◦服务器:215UNIXType:L8查询当前目录:客户端发送PWD命令;◦服务器:257“/”isthecurrentdirectoryFTP站点上文件的内容是通过数据连接传输的,因此需要首先建立数据连接;注意:目录也是一种文件,目录的内容(即文件列表)同样需要通过数据连接而非命令连接传输;数据连接的建立有两种模式◦主动模式,由服务器主动向客户端发起数据连接,由客户端发送命令PORTn进入该模式,但现已几乎不采用这种方式;◦被动模式,服务器被动地接受客户端发起的数据连接,由客户端发送命令PASV进入该模式。也叫Port模式,由服务器主动与客户端建立数据连接。客户端服务器随机端口M21SYN21MSYNACK21ACKM…M21PORTM+120M+1SYN20M+1SYNACK20M+1ACK服务器被动接受由客户端发起的数据连接。客户端服务器随机端口M21SYN21MSYNACK21ACKM…M21PASV21MPORTXXM+1SYNXM+1SYNACKXM+1ACK建立数据连接后,文件(或目录)的内容都将通过它传输给客户端,而请求与响应消息仍通过命令连接进行传输;数据传输需要关心的另一个问题:换行符的处理;FTP传输的两种类型:◦文本类型(ASCII),由客户端发送请求TYPEA,服务器应答200TypesettoA完成设置。该类型下,对换行符将在CR(服务器端)与CRLF(客户端)间进行转换;◦二进制类型(Binary),由客户端发送请求TYPEI,服务器应答200TypesettoI完成设置。该类型下,对换行符将不会作任何转换。在了解FTP数据传输机制之后,现在继续我们的实例;回顾:我们现在位于该FTP站点的根目录下:◦服务器:257“/”isthecurrentdirectory在访问站点上的文件或目录之前,我们首先需要知道FTP上到底有哪些文件和目录,再决定下一步操作。一.客户端发送TYPEA命令将传输类型设为文本,以便在客户端正确显示换行符;◦服务器:200TypesettoA二.客户端发送PASV命令,要求进入被动模式;◦服务器:227EnteringPassiveMode(202,120,2,2,201,95).◦注意:前四个字节表示IP地址,后两个字节表示端口(这里201*256+95=51551)三.客户端发送LIST命令,请求列出当前目录的内容;◦服务器:150OpeningASCIImodedataconnectionforfilelist◦服务器