精华内容
下载资源
问答
  • HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的...

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
    HTTP协议的主要特点可概括如下:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

     

    一、HTTP协议详解之URL篇

        http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

    HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:
    http://host[":"port][abs_path]
    http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
    eg:
    1、输入:
    www.guet.edu.cn
    浏览器自动转换成:http://www.guet.edu.cn/
    2、http:192.168.0.116:8080/index.jsp 

     

    二、HTTP协议详解之请求篇

        http请求由三部分组成,分别是:请求行、消息报头、请求正文

    1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF  
    其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

    请求方法(所有方法全为大写)有多种,各个方法的解释如下:
    GET     请求获取Request-URI所标识的资源
    POST    在Request-URI所标识的资源后附加新的数据
    HEAD    请求获取由Request-URI所标识的资源的响应消息报头
    PUT     请求服务器存储一个资源,并用Request-URI作为其标识
    DELETE  请求服务器删除Request-URI所标识的资源
    TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT 保留将来使用
    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
    应用举例:
    GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF)

    POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。
    eg:POST /reg.jsp HTTP/ (CRLF)
    Accept:image/gif,image/x-xbit,... (CRLF)
    ...
    HOST:www.guet.edu.cn (CRLF)
    Content-Length:22 (CRLF)
    Connection:Keep-Alive (CRLF)
    Cache-Control:no-cache (CRLF)
    (CRLF)         //该CRLF表示消息报头已经结束,在此之前为消息报头
    user=jeffrey&pwd=1234  //此行以下为提交的数据

    HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
    2、请求报头后述
    3、请求正文(略) 

     

    三、HTTP协议详解之响应篇

        在接收和解释请求消息后,服务器返回一个HTTP响应消息。

    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
    1、状态行格式如下:
    HTTP-Version Status-Code Reason-Phrase CRLF
    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
    1xx:指示信息--表示请求已接收,继续处理
    2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作
    4xx:客户端错误--请求有语法错误或请求无法实现
    5xx:服务器端错误--服务器未能实现合法的请求
    常见状态代码、状态描述、说明:
    200 OK      //客户端请求成功
    400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
    403 Forbidden  //服务器收到请求,但是拒绝提供服务
    404 Not Found  //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    eg:HTTP/1.1 200 OK (CRLF)

    2、响应报头后述

    3、响应正文就是服务器返回的资源的内容 

     

    四、HTTP协议详解之消息报头篇

        HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

    HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。
    每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

    1、普通报头
    在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。
    eg:
    Cache-Control   用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。
    请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;
    响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.
    eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.sehHeader("Cache-Control","no-cache");
    //response.setHeader("Pragma","no-cache");作用相当于上述代码,通常两者//合用
    这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache


    Date普通报头域表示消息产生的日期和时间

    Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

    2、请求报头
    请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
    常用的请求报头
    Accept
    Accept请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。
    Accept-Charset
    Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
    Accept-Encoding
    Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
    Accept-Language
    Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
    Authorization
    Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
    Host(发送请求时,该报头域是必需的)
    Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,eg:
    我们在浏览器中输入:
    http://www.guet.edu.cn/index.html
    浏览器发送的请求消息中,就会包含Host请求报头域,如下:
    Host:
    www.guet.edu.cn
    此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号
    User-Agent
    我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。
    请求报头举例:
    GET /form.html HTTP/1.1 (CRLF)
    Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
    Accept-Language:zh-cn (CRLF)
    Accept-Encoding:gzip,deflate (CRLF)
    If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
    If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
    User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
    Host:www.guet.edu.cn (CRLF)
    Connection:Keep-Alive (CRLF)
    (CRLF)

    3、响应报头
    响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
    常用的响应报头
    Location
    Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
    Server
    Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是
    Server响应报头域的一个例子:
    Server:Apache-Coyote/1.1
    WWW-Authenticate
    WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
    eg:WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出服务器对请求资源采用的是基本验证机制。


    4、实体报头
    请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。
    常用的实体报头
    Content-Encoding
    Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzip
    Content-Language
    Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读
    者。eg:Content-Language:da
    Content-Length
    Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
    Content-Type
    Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。eg:
    Content-Type:text/html;charset=ISO-8859-1
    Content-Type:text/html;charset=GB2312
    Last-Modified
    Last-Modified实体报头域用于指示资源的最后修改日期和时间。
    Expires
    Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT
    HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");

     

    五、利用telnet观察http协议的通讯过程

        实验目的及原理:
        利用MS的telnet工具,通过手动输入http请求信息的方式,向服务器发出请求,服务器接收、解释和接受请求后,会返回一个响应,该响应会在telnet窗口上显示出来,从而从感性上加深对http协议的通讯过程的认识。

        实验步骤:

    1、打开telnet
    1.1 打开telnet
    运行-->cmd-->telnet

    1.2 打开telnet回显功能
    set localecho

    2、连接服务器并发送请求
    2.1 open 
    www.guet.edu.cn 80  //注意端口号不能省略

        HEAD /index.asp HTTP/1.0
        Host:www.guet.edu.cn
        
       /*我们可以变换请求方法,请求桂林电子主页内容,输入消息如下*/
        open 
    www.guet.edu.cn 80 
       
        GET /index.asp HTTP/1.0  //请求资源的内容
        Host:www.guet.edu.cn  

    2.2 open www.sina.com.cn 80  //在命令提示符号下直接输入telnet www.sina.com.cn 80
        HEAD /index.asp HTTP/1.0
        Host:www.sina.com.cn
     

    3 实验结果:

    3.1 请求信息2.1得到的响应是:

    HTTP/1.1 200 OK                                              //请求成功
    Server: Microsoft-IIS/5.0                                    //web服务器
    Date: Thu,08 Mar 200707:17:51 GMT
    Connection: Keep-Alive                                 
    Content-Length: 23330
    Content-Type: text/html
    Expries: Thu,08 Mar 2007 07:16:51 GMT
    Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
    Cache-control: private

    //资源内容省略

    3.2 请求信息2.2得到的响应是:

    HTTP/1.0 404 Not Found       //请求失败
    Date: Thu, 08 Mar 2007 07:50:50 GMT
    Server: Apache/2.0.54 <Unix>
    Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
    ETag: "6277a-415-e7c76980"
    Accept-Ranges: bytes
    X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
    Vary: Accept-Encoding
    Content-Type: text/html
    X-Cache: MISS from zjm152-78.sina.com.cn
    Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
    X-Cache: MISS from th-143.sina.com.cn
    Connection: close


    失去了跟主机的连接

    按任意键继续...

    4 .注意事项:1、出现输入错误,则请求不会成功。
              2、报头域不分大小写。
              3、更深一步了解HTTP协议,可以查看RFC2616,在
    http://www.letf.org/rfc上找到该文件。
              4、开发后台程序必须掌握http协议

    六、HTTP协议相关技术补充

        1、基础:
        高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等
    中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel),一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过 URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一 个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。
         代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的 服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处 理没有被用户代理完成的请求。
    网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。
    网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
        通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继 的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。

    2、协议分析的优势—HTTP分析器检测网络攻击
    以模块化的方式对高层协议进行分析处理,将是未来入侵检测的方向。
    HTTP及其代理的常用端口80、3128和8080在network部分用port标签进行了规定

    3、HTTP协议Content Lenth限制漏洞导致拒绝服务攻击
    使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,例如ContentLenth:999999999,在传送完成前,内 存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。这种攻击方法基本不会留下痕迹。
    http://www.cnpaf.net/Class/HTTP/0532918532667330.html

    4、利用HTTP协议的特性进行拒绝服务攻击的一些构思
    服务器端忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYNFlood攻击(SYN洪水攻击)。
    而Smurf、TearDrop等是利用ICMP报文来Flood和IP碎片攻击的。本文用“正常连接”的方法来产生拒绝服务攻击。
    19端口在早期已经有人用来做Chargen攻击了,即Chargen_Denial_of_Service,但是!他们用的方法是在两台Chargen 服务器之间产生UDP连接,让服务器处理过多信息而DOWN掉,那么,干掉一台WEB服务器的条件就必须有2个:1.有Chargen服务2.有HTTP 服务
    方法:攻击者伪造源IP给N台Chargen发送连接请求(Connect),Chargen接收到连接后就会返回每秒72字节的字符流(实际上根据网络实际情况,这个速度更快)给服务器。

    5、Http指纹识别技术
       Http指纹识别的原理大致上也是相同的:记录不同服务器对Http协议执行中的微小差别进行识别.Http指纹识别比TCP/IP堆栈指纹识别复杂许 多,理由是定制Http服务器的配置文件、增加插件或组件使得更改Http的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP堆栈的行为 需要对核心层进行修改,所以就容易识别.
          要让服务器返回不同的Banner信息的设置是很简单的,象Apache这样的开放源代码的Http服务器,用户可以在源代码里修改Banner信息,然 后重起Http服务就生效了;对于没有公开源代码的Http服务器比如微软的IIS或者是Netscape,可以在存放Banner信息的Dll文件中修 改,相关的文章有讨论的,这里不再赘述,当然这样的修改的效果还是不错的.另外一种模糊Banner信息的方法是使用插件。
    常用测试请求:
    1:HEAD/Http/1.0发送基本的Http请求
    2:DELETE/Http/1.0发送那些不被允许的请求,比如Delete请求
    3:GET/Http/3.0发送一个非法版本的Http协议请求
    4:GET/JUNK/1.0发送一个不正确规格的Http协议请求
    Http指纹识别工具Httprint,它通过运用统计学原理,组合模糊的逻辑学技术,能很有效的确定Http服务器的类型.它可以被用来收集和分析不同Http服务器产生的签名。

    6、其他:为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。
    HTTP1.1中提供了这种持续连接的方式,而下一代HTTP协议:HTTP-NG更增加了有关会话控制、丰富的内容协商等方式的支持,来提供
    更高效率的连接。

    转载请注明来源:HTTP简介,http是一个属于应用层的面向对象的协议
    http://www.php1.cn/Content/HTTP_JianJie_http_ShiYiGeShuYuYingYongCengDeMianXiangDuiXiangDeXieYi.html
    展开全文
  • 通常企业级应用系统为提高系统可用性,会采用较昂贵的软硬件设备,如IBM的小型机及至中型机大型机及专有操作系统、Oracle数据库、EMC存储设备等。互联网公司更过的采用PC级服务器、开源的数据库和操作系统,这些廉价...

    高可用的网站架构

    通常企业级应用系统为提高系统可用性,会采用较昂贵的软硬件设备,如IBM的小型机及至中型机大型机及专有操作系统、Oracle数据库、EMC存储设备等。互联网公司更过的采用PC级服务器、开源的数据库和操作系统,这些廉价的设备在节约成本的同时也降低了可用性,特别是服务器硬件设备,低价的商业级服务器一年宕机一次是一个大概率事件,而那些高强度频繁读写的普通硬盘,损坏的概率则要更高一些。
    既然硬件故障是常态,网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能被访问。
    实现上述高可用架构的主要手段是数据和服务的冗余备份及失效转移,一旦某些服务器宕机,就将服务切换到其他可用的服务器上,如果磁盘损坏,则从备份的磁盘读取数据。
    一个典型的网站设计通常遵循如下图所示的基本分层架构模型。

    典型的分层模型是三层,即应用层、服务层、数据层;各层之间具有相对独立性,应用层主要负责具体业务逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储与访问。中小型网站在具体部署时,通常将应用层和服务层部署在一起,而数据层则另外部署,如下图所示(事实上,这也是网站架构演化的第一步)。

    在复杂的大型网站架构中,划分的粒度会更小、更详细,结构更加复杂,服务器规模更加庞大,但通常还是能够把这些服务器划分到这三层中。如下图所示。

    不同的业务产品会部署在不同的服务器集群上,如某网站的文库、贴吧、百科等属于不同的产品,部署在各自独立的服务器集群上,互不相干。这些产品又会依赖一些共同的复用业务,如注册登录、Session管理服务、账户管理服务等,这些可复用的业务服务也独自部署在独立的服务器集群上。至于数据层,数据库服务、文件服务、缓存服务、搜索服务等数据存储与访问服务都部署在各自独立的服务器集群上。

    大型网站的分层架构及物理服务器的分布式部署使得位于不同层次的服务器具有不同的可用性特点。关闭服务或者服务器宕机时产生的影响也不相同,高可用的解决方案也差异甚大。

    位于应用层的服务器通常为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群共同对外提供服务,当负载均衡设备通过心跳检测等手段监控到某台应用服务器不可用时,就将其从集群列表中剔除,并将请求分发到集群中其他可用的服务器上,使整个集群保持可用,从而实现应用高可用。
    位于服务层的服务器情况和应用层的服务层类似,也是通过集群方式实现高可用,只是这些服务器被应用层通过分布式服务调用框架访问,分布式服务调用框架会在应用层客户端程序中实现软件负载均衡,并通过服务注册中心对提供服务的服务器进行心跳检测,发现有服务不可用,立即通知客户端程序修改服务访问列表,剔除不可用的服务器。
    位于数据层的服务器情况比较特殊,数据服务器上存储着数据,为了保证服务器宕机时数据不丢失,数据访问服务不中断,需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份。当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。
    网站升级的频率一般都非常高,大型网站一周发布一次,中小型网站一天发布几次。每次网站发布都需要关闭服务,重新部署系统,整个过程相当于服务器宕机。因此网站的可用性架构设计不但要考虑实际的硬件故障引起的宕机,还要考虑网站升级发布引起的宕机,而后者更加频繁,不能因为系统可以接受偶尔的停机故障就降低可用性设计的标准。

    高可用的应用

    应用层主要处理网站应用的业务逻辑,因此有时也称作业务逻辑层,应用的一个显著特点是应用的无状态性。
    所谓无状态的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例(服务器)之间完全对等,请求提交到任意服务器,处理结果都是完全一样的。

    通过负载均衡进行无状态服务的失效转移

    不保存状态的应用给高可用的架构设计带来了巨大便利,既然服务器不保存请求的状态,那么所有的服务器完全对等,当任意一台或多台服务器宕机,请求提交给集群中其他任意一台可用机器处理,这样对终端用户而言,请求总是能够成功的,整个系统依然可用。对于应用服务器集群,实现这种服务器可用状态实时监测、自动转移失效任务的机制是负载均衡。
    负载均衡,顾名思义,主要使用在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上,以提高整体的负载成立能力。目前,不管是开源免费的负载均衡软件还是昂贵的负载均衡硬件,都提供失效转移功能。在网站应用中,当集群中服务是无状态对等时,负载均衡可以起到事实上高可用的作用,如下图所示。

    当Web服务器集群中服务器都可用时,负载均衡服务器会把用户发送的访问请求分发到任意一台服务器上进行处理,而当服务器10.0.0.1宕机时,负载均衡服务器通过心跳监测机制发现该服务器失去响应,就会把他从服务器列表中删除,而将请求发送到其他服务器上,这些服务器是完全一样的,请求在任何一台服务器中处理都不会影响最终的结果。
    由于负载均衡在应用层实际上起到了系统高可用的作用,因此即使某个应用访问量非常少,只用一台服务器提供服务就绰绰有余,但如果需要保证该服务高可用,也必须至少部署两台服务器,使用负载均衡技术构建一个小型的集群。

    应用服务器集群的Session管理

    应用服务器的高可用架构设计主要基于服务无状态这一特性,但是事实上,业务总是有状态的,在交易类的电子商务网站,需要有购物车记录用户的购买信息,用户每次购买请求都是向购物车中增加商品;在社交类的网站中,需要记录用户的当前登录状态、最新发布的消息及好友状态等,用户每次刷新页面都需要更新这些信息。
    Web应用中将这些多次请求修改使用的上下文对象称作会话(Session),单机情况下,Session可由部署在服务器上的Web容器(如JBoss)管理。在使用负载均衡的集群环境中,由于负载均衡服务器可能会将请求分发到集群任何一台应用服务器上,所以保证每次请求依然能够获得正确的Session比单机时要复杂很多。
    集群环境下,Session管理主要有以下几种手段。

    Session复制

    Session复制是早期企业应用系统使用较多的一种服务器集群Session管理机制。应用服务器开启Web容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使得每台服务器上都保存所有用户的Session信息,这样任何一台机器宕机都不会导致Session数据的丢失,而服务器使用的Session时,也只需要在本机获取即可。如下图所示。

    这种方案虽然简单,从本机读取Session信息也很快速,但只能使用在集群规模比较小的情况下。当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源,系统不堪负担。而且由于所有用户的Session信息在每台服务器上都有备份,在大量用户访问的情况下,甚至会出现服务器内存不够Session使用的情况。
    而大型网站的核心应用集群就是数千台服务器,同时在线用户可达千万,因此并不适合这种方案。

    Session绑定

    Session绑定可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一IP的请求分发到同一台服务器上,也可以根据Cookie信息将同一个用户的请求总是分发到同一台服务器上,当然这时负载均衡服务器必须工作在HTTP协议层上。这样在整个会话期间,用户所有的请求都在同一台服务器上处理,即Session绑定在某台特定服务器上,保证Session总能在这台服务器上获取。这种方法又被称作会话黏滞,如下图所示。

    但是Session绑定的方案显然不符合我们对系统高可用的需求,因为一旦某台服务器宕机,那么该机器上的Session也就不复存在了,用户请求切换到其他机器后因为没有Session而无法完成业务处理。因此虽然大部分负载均衡服务器都提供源地址负载均衡算法,但很少有网站利用这个算法进行Session管理。

    利用Cookie记录Session

    早期的企业应用系统使用C/S(客户端/服务端)架构,一种管理Session的方式是将Session记录在客户端,每次请求服务器的时候,将Session放在请求中发送给服务器,服务器处理完请求后再将修改过的Session响应给客户端。
    网站没有客户端,但是可以利用浏览器支持的Cookie记录Session,如下图所示。

    利用Cookie记录Session也有一些缺点,比如受Cookie大小限制,能记录的信息有限;每次请求响应都需要传输Cookie,影响性能;如果用户关闭Cookie,访问就会不正常。但是由于Cookie的简单易用,可用性高,支持应用服务器的线性伸缩,而大部分应用需要记录的Session信息又比较小。因此事实上,许多网站都或多或少的使用Cookie记录Session。

    Session服务器

    那么有没有可用性高、伸缩性好、性能也不错,对信息大小又没有什么限制的服务器集群Session管理方案呢?
    答案就是Session服务器。利用独立部署的Session服务器(集群)统一管理Session,应用服务器每次读写Session时,都访问Session服务器,如下图所示。

    这种解决方案事实上是将应用服务器的状态分离,分为无状态的应用服务器和有状态的Session服务器,然后针对这两种服务器的不同特性分别设计其架构。
    对于有状态的Session服务器,一种比较简单的方法是利用分布式缓存、数据库等,在这些产品的基础上进行包装,使其符合Session的存储和访问要求。如果业务场景对Session管理有比较高的要求,比如利用Session服务集成单点登录(SSO)、用户服务等功能,则需要开发专门的Session服务管理平台。

    高可用的服务

    可复用的服务模块为业务产品提供基础公共服务,大型网站中这些服务通常都独立分布式部署,被具体应用远程调用。可复用的服务和应用一样,也是无状态的服务,因此可以使用类似负载均衡的失效转移策略实现高可用的服务。
    除此之外,具体实践中,还有以下几点高可用的服务策略。

    分级管理

    运维上将服务器进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上也格外迅速。显然,用户及时付款购物比能不能评价商品更重要,所以订单、支付服务比评价服务有更多优先级。
    同时在服务部署上也进行必要的隔离,避免故障的连锁反应。低优先级的服务通过启动不同的线程或者部署在不同的虚拟机上进行隔离,而高优先级的服务则需要部署在不同的物理机上,核心服务和数据甚至需要部署在不同地域的数据中心。

    超时设置

    由于服务端宕机、线程死锁等原因,可能导致应用程序对服务端的调用失去响应,进而导致用户请求长时间得不到响应,同时还占用应用程序的资源,不利于及时将返回请求转移到正常的服务器上。
    在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可选择继续程重试或将请求转移到提供相同服务的其他服务器上。

    异步调用

    应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。如提交一个新用户注册请求,应用需要调用三个服务:将用户信息写入数据库,发送账户注册成功邮件,开通对应权限。如果采用同步服务调用,当邮件队列阻塞不能发送邮件时,会导致其他两个服务也无法执行,最终导致用户注册失败。
    如果采用异步调用的方式,应用程序将用户注册信息发送给消息队列服务器后立即返回用户注册成功响应。而记录用户注册信息到数据库、发送用户注册成功邮件、调用用户服务开通权限这三个服务作为消息的消费者任务,分别从消息队列获取用户注册信息异步执行。及时邮件服务队列阻塞,邮件不能成功发送,也不会影响其他服务的执行,用户注册操作可顺利完成,只是晚一点收到注册成功的邮件而已。
    当然不是所有服务调用都可以异步调用,对于获取用户信息这类调用,采用异步方式会延长响应时间,得不偿失。对于那些必须确认服务调用成功才能继续下一步操作的应用不合适使用异步调用。

    服务降级

    在网站访问高峰期,服务可能因为大量的并发调用而性能下降,严重时可能会导致服务宕机。为了保证核心应用和功能的正常运行,需要对服务进行降级。降级有两种手段:拒绝服务及关闭服务。

    • 拒绝服务:拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用;或者随机拒绝部分请求调用,解决资源,让另一部分请求得以成功,比卖你要死大家一起死的惨剧。貌似Twitter比较喜欢使用随机拒绝请求的策略,经常有用户看到请求失败的故障页面,但是问下身边的人,其他人都正常使用,自己再刷新页面,也好了。
    • 关闭功能:关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以解约系统开销,为重要的服务和功能让出资源。淘宝在每年的“双十一”促销中就使用这种方法,在系统最繁忙的时段关闭“评价”、“确认收货”等非核心服务,以保证核心交易服务的顺利完成。

    幂等性设计

    应用调用服务失败后,会将调用请求重新发送到其他服务器,但是这个失败可能是虚假的失败。比如服务已经处理成功,但因为网络故障应用没有收到响应,这时应用重新提交请求就导致服务重复调用,如果这个服务是一个转账操作,就会产生严重后果。
    服务重复调用是无法避免的,应用层也不需要关心服务是否真的失败,只要没有收到调用成功的响应,就可以认为调用失败,并重试服务调用。因此必须在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。
    有些服务天然具有幂等性,比如将用户性别设置为男性,不管设置多少次,结果都一样。但是对于转账交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性检验,只有有效的操作才能继续执行。

    高可用的数据

    对许多网站而言,数据是其最宝贵的物质资产,硬件可以购买,软件可以重写,但是多年运营积淀下来的各种数据(用户数据、交易数据、商品数据......),代表着历史,已经成为过往,不能再重来,一旦失去,对网站的打击可以说是毁灭性的,因此可以说,保护网站的数据就是保护企业的命脉。
    不同于高可用的应用和服务,由于数据存储服务器上保存的数据不同,当某台服务器宕机的时候,数据访问请求不能任意切换到集群中其他的机器上。
    保证数据存储高可用的手段主要是数据备份和失效转移机制。数据备份是保证数据有多个副本,任意副本的失效都不会导致数据的永久丢失,从而实现数据完全的持久化。而失效转移机制则保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。

    • 关于缓存服务的高可用,在实践中争议很大,一种观点认为缓存已经成为网站数据服务的重要组成部分,事实上承担了业务中绝大多数的数据读取访问服务,缓存服务失效可能会导致数据库负载过高而宕机,进而影响整个网站的可用性,因此缓存服务需要实现和数据存储服务同样的高可用。
    • 另一种观点认为,缓存服务不是数据存储服务,缓存服务器宕机引起缓存数据丢失导致服务器负载压力过高应该通过其他手段解决,而不是提高缓存服务本身的高可用。
    • 这里持后一种观点,对于缓存服务器集群中的单机宕机,如果缓存服务器集群规模较大,那么单机宕机引起的缓存数据丢失比例和数据库负载压力变化都较小,对整个系统影响也较小。扩大缓存服务器集群规模的一个简单手段就是整个网站共享同一个分布式缓存集群,单独的应用和产品不需要部署自己的缓存服务器,只需要向共享缓存集群申请缓存资源即可。并且通过逻辑或物理分区的方式将每个应用的缓存部署在多台服务器上,任何一台服务器宕机引起的缓存失效都只影响应用缓存数据的一小部分,不会对应用性能和数据库负载造成太大影响。

    CAP原理

    在讨论高可用数据服务架构之前,必须先讨论的一个话题是,为了保证数据的高可用,网站通常会牺牲另一个也很重要的指标:数据一致性。
    高可用的数据有如下几个层面的含义。

    数据持久性

    保证数据可持久存储,在各种情况下都不会出现数据丢失的问题。为了实现数据持久性,不但在写入数据时需要写入持久性存储,还需要将数据备份一个或多个副本,存放在不同的物理存储设备上,在某个存储故障或灾害发生时,数据不会丢失。

    数据可访问性

    在多份数据副本分别放在不同存储设备的情况下,如果一个数据存储设备损坏,就需要将数据访问切换到另一个数据存储设备上,如果这个过程不能很快完成(终端用户几乎没有感知),或者在完成过程中需要停止终端用户访问数据,那么这段时间数据是不可访问的。

    数据一致性

    在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就会造成各个副本之间的数据不一致,数据内容冲突。实践中,导致数据不一致的情形有很多种,表现形式也多种多样,比如数据更新返回操作失败,事实上数据在存储服务器已经更新失败。
    CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Patition Tolerance,系统具有跨网络分区的伸缩性)这三个条件,如下图所示。

    在大型网站应用中,数据规模总是快速扩张的,因此可伸缩性即分区耐受性必不可少,规模变大以后,机器数量也会变得庞大,这时网络和服务器故障会频繁出现,要想保证应用可用,就必须保证分布式处理系统的高可用性。所以在大型网站中,通常会选择强化分布式存储系统的可用性(A)和伸缩性(P),而在某种程度上放弃一致性(C)。一般说来,数据不一致通常出现在系统并发写操作或者集群状态不稳(故障恢复、集群扩容...)的情况下,应用系统需要对分布式数据处理系统的数据不一致性有所了解并进行某种意义上的补偿和纠错,以避免出现应用系统数据不正确。

    2012年淘宝“双十一”活动期间,在活动第一分钟就涌入了1000万独立用户访问,这种极端的高并发场景对数据处理系统造成了巨大压力,存储系统较弱的数据一致性导致出现部分商品超卖现象(交易成功的商品数超过了商品库存数)。

    CAP原理对于可伸缩的分布式系统设计具有重要意义,在系统设计开发过程中,不恰当的迎合各种需求,企图打造一个完美的产品,可能会使设计进入两难境地,难以为继。

    具体说来,数据一致性又可分为如下几点。

    • 数据强一致:各个副本的数据在物理存储中总是一致的;数据更新操作结果和操作响应总是一致的,即操作响应通知更新失败,那么数据一定没有被更细,而不是处于不确定状态。
    • 数据用户一致:即数据在物理存储中的各个副本的数据可能是不一致的,但是终端用户访问时,通过纠错和校验机制,可以确定一个一致的且正确的数据返回给用户。
    • 数据最终一致:这是数据一致性中较弱的一种,即物理存储的数据可能是不一致的,终端用户访问到的数据可能也是不一致的(同一用户连续访问,结果不同;或者不同用户同时访问,结果不同),但系统经过一段时间(通常是一个比较短的时间段)的自我恢复和修正,数据最终会达到一致。

    因为难以满足数据强一致性,网站通常会综合成本、技术、业务场景等条件,结合应用服务和其他的数据监控与纠错功能,使存储系统达到用户一致,保证最终用户访问数据的正确性。

    数据备份

    数据备份是一种古老而有效的数据保存手段,早期的数据备份手段主要是数据冷备,即定期将数据复制到某种存储介质(磁盘、光盘...)上并物理存档保管,如果系统存储损坏,那么就从冷备的存储设备中恢复数据。

    冷备的优点是简单和廉价,成本和技术难度都较低。缺点是不能保证数据最终一致,由于数据时定期复制,因此备份设备中的数据比系统中的数据陈旧,如果系统数据丢失,那么从上个备份点开始后更新的数据就会永久丢失,不能从备份中恢复。同时也不能保证数据可用性,从冷备存储中恢复数据需要较长的时间,而这段时间无法访问数据,系统也不可用。

    因此,数据冷备作为一种传统的数据保护手段,依然在网站日常运维中使用,同时在网站实时在线业务中,还需要进行数据热备,以提供更好的数据可用性。

    数据热备可分为两种:异步热备方式和同步热备方式。

    异步方式是指多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写操作成功响应时,只写成本了一份,存储系统将会异步的写其他副本(这个过程有可能会失败)。如下图所示。

    在异步写入方式下,存储服务器分为主存储服务器(Master)和从存储服务器(Slave),应用程序正常情况下只连接主存储服务器,数据写入时,由主存储服务器的写操作代理模块将数据写入本机存储系统后立即返回写操作成功响应,然后通过异步线程将写操作数据同步到从存储服务器。

    同步方式是指多份数据副本的写入操作同时完成,即应用程序收到数据服务系统的写成功响应时,多份数据都已经写操作成功。但是当应用程序收到数据写操作失败的响应时,可能有部分副本或者全部副本都已经写成功了(因为网络或者系统故障,无法返回操作成功地响应),如下图所示。

    同步热备具体实现的时候,为了提高性能,在应用程序客户端并发向多个存储服务器同时写入数据,然后等待所有存储服务器都返回操作成功地响应后,再通过应用程序写操作成功。

    这种情况下,存储服务器没有主从之分,完全对等,更便于管理和维护。存储服务客户端在写多份数据的时候,并发操作,这意味着多份数据的总写操作延迟是响应最慢的那台存储服务器的响应延迟,而不是多台存储服务器响应延迟之和。其性能和异步热备方式差不多。

    传统的企业级关系数据库系统几乎都提供了数据实时同步备份的机制。而一开始就为大型网站而设计的各种NoSQL数据库(如HBase)更是将数据备份机制作为产品主要的功能点之一。

    关系数据库热备机制就是通常所说的Master-Slave同步机制。Master-Slave机制不但解决了数据备份问题,还改善了数据库系统的性能,实践中,通常使用读写分离的方法访问Slave和Master数据库,写操作只访问Master数据库,读操作只访问Slave数据库。

    失效转移

    若数据服务器集群中任何一台服务器宕机,那么应用程序针对这台服务器的所有读写操作都需要重新路由到其他服务器,保证数据访问不会失败,这个过程叫做失效转移。

    失效转移操作操作由三部分组成:失效确认、访问转移、数据恢复。

    生效确认

    判断服务器宕机是系统进行失效转移的第一步,系统确认一台服务器是否宕机的手段有两种:心跳检测和应用程序访问失败报告,如下图所示。

    对于应用程序的访问失败报告,控制中心还需要再一次发送心跳检测进行确认,以免错误判断服务器宕机,因为一旦进行数据访问失效转移,就意味着数据存储多份副本不一致,需要进行后续一系列复杂的操作。

    访问转移

    确认某台数据存储服务器宕机后,就需要将数据读写访问重新路由到其他服务器上。对于完全对等存储的服务器(几台存储服务器存储的数据完全一样,我们称几台服务器为对等服务器,比如主从结构的存储服务器,其存储的数据完全一样),当其中一台宕机后,应用程序根据配置直接切换到对等服务器上。如果存储是不对等的,那么就需要重新计算路由,选择存储服务器。

    数据恢复

    因为某台服务器宕机,所以数据存储的副本数目会减少,必须将副本的数目恢复到系统设定的值,否则,再有服务器宕机时,就可能出现无法访问转移(所有副本的服务器都宕机了),数据永久丢失的情况。因此系统需要从健康的服务器赋值数据,将数据副本数目恢复到设定值。不影响用户使用。

    展开全文
  • 1、OSI的相应层介绍:应用层:为用户应用程序提供服务并支持网络访问。 表示层:将数据转化为与平台无关的格式,...应用层以下的各层与通信机制有关,而与日常用户的关系明显,应用层的大量网络服务却是为了用户提供

    1、OSI的相应层介绍:应用层:为用户应用程序提供服务并支持网络访问。

    表示层:将数据转化为与平台无关的格式,并进行加密和压缩处理

    会话层:负责管理联网计算机上的应用程序之间的通信,提供一些传输层不具备、与连接相关的功能,例如名称识别和安全。

    应用层以下的各层与通信机制有关,而与日常用户的关系不明显,应用层的大量网络服务却是为了用户提供

    展开全文
  • 应用层概述

    千次阅读 2018-03-29 22:04:44
     浏览器向DNS服务器发出请求,获取Web服务器域名所对应的IP地址。...80端口是Web服务器提供Web服务的端口。 在得到Web服务器确认并且TCP连接建立成功后,浏览器再向Web服务器发出一条请求传输网页的HTTP命令。...

    超文本传输协议——HTTP

    万维网的工作过程 
    用户确定要访问网页的URL,并将其输入到浏览器的地址栏中。 
    浏览器向DNS服务器发出请求,获取Web服务器域名所对应的IP地址。 
    浏览器向指定IP地址的Web服务器发出与端口80建立一条TCP连接的请求。80端口是Web服务器提供Web服务的端口。 
    在得到Web服务器确认并且TCP连接建立成功后,浏览器再向Web服务器发出一条请求传输网页的HTTP命令。 
    当Web服务器收到请求后,向浏览器发送其所需的网页文件。 
    网页文件发送完成后,由Web服务器主动关闭TCP连接。至此,HTTP的工作过程结束。 
    浏览器显示所收到的网页文件。如果网页文件中包含图片等信息,还要再次与Web服务器建立TCP连接下载相应图片信息等。

    HTTP工作原理 
    首先客户机程序创建一个套接字,通过ip和端口号来定位,同时向服务器发出TCP连接请求,并通过服务器的确认建立TCP连接。 
    客户机程序根据需要利用TCP连接向服务器发送相应的请求命令。HTTP服务器也可以由其他类型的网关充当代理服务器,这样,HTTP便可以允许用户访问其他因特网协议,如SMTP、FTP、Gopher等。 
    服务器接收到客户机程序的请求命令后进行相应的处理,然后将处理结果以响应消息的形式通过TCP连接返回给客户机程序。 
    完成本次请求/应答后,客户机程序和服务器程序都可以通过关闭套接字来结束本次的TCP连接

    请求报文格式 
    信息首部 
    User-Agent:产生请求的浏览器类型; 
    Accept:客户端可识别的响应内容类型列表;星号 “* ” 用于按范围将类型分组,用 “ / ” 指示可接受全部类型,用“type/*”指示可接受type类型的所有子类型; 
    Accept-Language:客户端可接受的自然语言; 
    Accept-Encoding:客户端可接受的编码压缩格式;pAccept-Charset:可接受的应答的字符集; 
    Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机; 
    Connection:连接方式(close或keepalive); 
    Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie

    响应报文格式 
    状态码:响应类型,3位10进制数组成 
    1xx:表示服务器已接收了客户端请求,客户端可继续发送请求; 
    2xx:表示服务器已成功接收到请求并进行处理; 
    3xx:表示服务器要求客户端重定向; 
    4xx:表示客户端的请求有非法内容; 
    5xx:表示服务器未能正常处理客户端的请求而出现意外错误

    cookie:使用cookie来标识状态,存在于客户端。
    web缓存:代理服务器,ISP通过设置服务器来缓解初试服务器的压力,提高网速。

    文件传输协议(FileTransfer Protocol,FTP)

    FTP属于TCP/IP协议族的应用层协议,其传输层使用的是TCP,基于客户机/服务器模式工作,为数据传输提供了可靠保证。
    FTP工作原理 
    FTP的工作过程其实就是客户机程序根据用户需要发送命令,服务器程序响应命令的过程。 
    需要建立两种类型的连接:控制连接和数据连接。控制连接传送客户机程序发出的命令和服务器返回的响应信息,而数据连接则负责传输文件的内容。

    启动FTP服务器:由于FTP采用了客户机/服务器工作模式,因此在创建FTP会话之前,首先必须启动FTP服务器,并使其处于等待客户机程序的FTP请求状态。 
    打开FTP并建立控制连接:启动FTP客户机程序,并向FTP服务器的21端口(控制连接端口)发出主动连接的请求,以期获得FTP服务器的相应权限。服务器响应请求后便在用户协议解释器和服务器协议解释器之间建立了一条TCP连接。 
    建立数据连接并进行文件传输:用户通过客户机程序输入FTP命令,服务器接收命令。如果命令正确且需要进行文件传输,服务器使用TCP20端口在双方之间建立另一条TCP连接,即数据连接,并通过该连接进行文件传输。当本次命令的文件传输完毕,关闭该数据连接。 
    关闭FTP:用户执行完其所需的FTP命令后,发出退出FTP命令,控制连接关闭,本次FTP服务结束。

    常见的命令如下:
    • USER username :用于向服务器传送用户标识
    • PASS password:用于向服务器发送用户口令
    • LIST:用于传回当前目录的所有文件的列表
    • RETR filename:用于从远程主机的当前目录检索文件(即get)
    • STOR filename:用于在远程的主机上的当前目录存放一个文件(即put)
    常见的报文如下:

    331 Username OK,Password required (用户名OK,输入密码)
    125  Data connection already open; transfer starting(数据连接打开,空时传输文件)
    425 Can’t open data connection(无法打开数据连接)
    452 Error writing file (写文件差错)

    邮件传输协议

    需要发送者邮件代理、发送者邮件服务器、接收者邮件服务器,接收者代理4个程序的参与。
     
    在邮件传输过程中,起关键作用的是两个邮件传输协议:SMTP和POP3。
    SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议的缩写,是建立在传输层协议TCP上的可靠高效的邮件传输协议,采用请求/应答方式来实现。整个工作过程包括连接建立、邮件传送和连接释放3个阶段。 
    连接建立:SMTP是基于客户机/服务器模式工作的,邮件服务器在TCP的25端口守候客户机的请求。当需要发送邮件时,发送主机的SMTP客户机向连接主机的SMTP服务器的TCP端口25发出建立连接请求,得到服务器确认后连接建立。此后,SMTP客户机再次向SMTP服务器发送HELO命令,并附上发送方主机名以确认SMTP服务器是否已经准备好接收邮件。如果SMTP服务器应答“250 XXXX”表示已准备好接收邮件。
    邮件传送 
    SMTP客户机得到SMTP服务器的肯定回答后,随即可利用MAIL命令告诉SMTP服务器新的邮件发送操作已经开始。如果SMTP服务器已经准备好接收邮件,则以250应答代码应答。 
    其后SMTP客户机可以用RCPT命令发送邮件接收者的目的地址,以便SMTP服务器把邮件内容最终传送到收件人的邮箱中。如果命令被接收,则返回250应答码。 
    然后SMTP客户机可利用DATA命令告诉SMTP服务器下面将要发送邮件内容。如果命令被接收,则SMTP服务器以354应答码应答,并认定以下的各行都是邮件内容。发送完毕后,再发送

    DNS


    域名系统(Domain Name System, DNS)是一种工作在TCP/IP的应用层的分布式网络目录服务系统,它通过一个遍布全球的分布式数据库,提供主机名称和IP地址之间的映射。
    域名解析 
    递归解析 
    当一个DNS服务器接收到请求后,如果它本身就是授权服务器,则查询其所存储的域名空间信息并给出响应; 
    如果它不是授权服务器,则将请求转发给另一个DNS服务器; 
    直到请求最终被响应后,再逐级将响应信息返回给请求客户机。 
    反复解析 

    当一个DNS服务器接收到请求后,如果能给出解析结果则向客户机返回最终结果,否则应向客户提供其认为能够给出解析结果的DNS服务器的IP地址。 
    客户机收到该IP地址后再向该IP地址对应的DNS服务器发出请求,直到获得最终结果。
    DNS报文 
    包括请求报文和响应报文 
    12字节报文首部和4个长度可变的字段组成 
    一般采用UDP传输,超过512字节采用TCP传输 
    UDP和TCP中端口号均为53

    Socket
    当一个DNS服务器接收到请求后,如果能给出解析结果则向客户机返回最终结果,否则应向客户提供其认为能够给出解析结果的DNS服务器的IP地址。 
    TCP下的socket,处于应用层和运输层之间,给出了一个接口,可以使用TCP协议进行通信。


    TCP 下socket流程:






    展开全文
  • 计算机网络:应用层

    千次阅读 2016-11-21 16:11:47
    标准与非标准由于应用层是唯一向因特网用户提供服务的层次,所以新的应用协议能够轻松地加入因特网。应用层协议既可以标准化,也可以非标准化。 每个标准协议是一对程序,他们与用户和传输层进行交互。 一个私人...
  • 来自应用层的攻击

    千次阅读 2011-01-10 10:40:56
    本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝、转载,转载时请...应用层的攻击表现形式很多,但基于的原理就那几种,有的是针对应用层协议的,有的是针对应用程序的,都统并在一起吧。 [code="j...
  • 基于网络层和应用层的DDoS攻击

    千次阅读 2017-11-13 11:54:46
     DDoS攻击是由DoS攻击发展而来的,根据攻击原理和方式的区别,可以把DDoS攻击分为两个阶段,即从传统的基于网络层的DDoS攻击和现阶段较为常见的基于应用层的DDoS攻击,这两类攻击方式各有特点,都对网络的安全造成...
  • 初识华为防火墙应用层过滤技术

    千次阅读 2019-09-03 08:35:55
    一、应用层过滤有哪些? 1、文件类型过滤 2、内容过滤 3、URL过滤 一、应用层过滤有哪些? 文件类型过滤:主要针对不同类型(扩展名不同)的文件过滤,USG防火墙可以识别数据包携带的应用层文件类型。其检查...
  • 应用层】DNS协议

    千次阅读 2019-05-26 20:48:20
    DNS提供的服务 互联网的域名结构 DNS服务器的分布 DNS的工作原理 二、DNS提供的服务 域名系统 DNS(Domain Name System) 提供的服务很简单,就是将便于人们使用的机器名字转换为IP地址。 我们都知道用户与互联网上...
  • 计算机网络(第7版) - 第六章 应用层 - 习题

    万次阅读 多人点赞 2019-08-12 15:51:13
    第六章、应用层 本章的习题 互联网的域名结构是怎么样的?它与目前的电话网的号码结构有何异同之处? (1)域名的结构由标号序列组成,各标号之间用点隔开: … . 三级域名 . 二级域名 . 顶级域名各标号分别代表...
  • 计算机网络应用层题库

    千次阅读 2018-07-31 17:53:55
    网络课课后题 1P2P模式的最主要特点是:要安装...3网络应用-FTP文件共享:要求高带宽 4服务质量中的抖动是指发送端相邻两个报文发送的时间差。 解析:接收端相邻两个报文的时延差,即前后两个时间的到达时间...
  • 应用层常见协议——知识点

    万次阅读 多人点赞 2018-04-18 15:10:09
    这里总结了三种常见的应用层协议:HTTP、FTP、SMTP。供自己复习使用,也供大家参考!一、HTTP协议1、HTTP简介—超文本传输协议(Hypertext transfer protocol)...—HTTP协议作为TCP/IP模型中应用层的协议也例外。HT...
  • ALG:应用层网关(防火墙)

    千次阅读 2016-11-23 13:56:53
    ALG:应用层网关(防火墙) 简称“ALG”(也叫应用层防火墙或应用层代理防火墙),在windows中其进程名是alg.exe,应用层网关通常被描述为第三代防火墙。当受信任网络上的用户打算连接到受信任网络(如Internet)...
  • 2.5 应用层的安全威胁

    千次阅读 2006-11-22 21:02:00
    应用层安全的解决目前往往依赖于网络层、操作系统等……由于应用系统多样复杂,没有特定的安全技术能够...#####应用层介绍应用层是最难保护的一层,因为TCP/IP程序几乎可以无限制地执行,实际上没有办法保护所有的应
  • 开发者会了解到,通常如何将微服务应用设计为四结构——平台服务层、边界和客户端。开发者还会学习到这四的具体内容,以及它们是如何组合起来交付面向客户的应用程序的。我们会重点介绍事件中枢(event ...
  • 计算机网络应用层课后习题练习(一) 计算机网络应用层课后习题练习(二)应用层知识点概览课后习题练习(二) 应用层知识点概览 课后习题练习(二) 6-17在浏览 器中应当有几个可选解释程序。试给出一些可选解释...
  • 计算机网络题库——第6章 应用层

    千次阅读 2020-06-26 14:14:57
    第 6 章 应用层 一、选择题 1.以下关于P2P 概念的描述中,错误的是( )。 A.P2P 是网络结点之间采取对等的方式直接交换信息的工作模式 B.P2P 通信模式是指P2P 网络中对等结点之间的直接通信能力 C.P2P 网络是指...
  • 第六章、应用层【补充】 本章的习题 简述应用层协议定义的内容。 (1)应用进程交换的报文类型,如请求报文和响应报文 (2)各种报文类型的语法,如报文中的各个字段及其详细描述 (3)字段的语义,即包含在字段中...
  • 计算机网络——从物理层到应用层

    千次阅读 2018-10-16 21:25:32
    每一都有自己的功能,就像建筑物一样,每一都靠下一支持。 用户接触到的,只是最上面的一,根本没有感觉到下面的。要理解互联网,必须从最下层开始,自下而上理解每一的功能。 如何分层有不同的模型,...
  • HTTP协议(应用层协议)

    千次阅读 2018-08-09 15:48:10
     应用层协议,一方面包含客户端和服务器端需要进行交互的信息,一方面包含如何组织(序列化)以及如何解析信息(反序列化)。 2 自定制协议  我们可以通过一个简单的网络计算器的例子来自定制一个协议,体会其中...
  • 应用层协议与硬件)   OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。 完成中继功能的节点通常...
  • 一、上章回顾 上篇我们主要讲解了系统架构中的四种架构模式,并且分析了四种架构模式的实现及应用场景,那么先来回顾下...本文将已架构的方式去分析分层结构中的服务层的设计,如何设计出来满足我们说的业务需求及设
  • 本文将介绍网络连接建立的过程、收发包流程,以及其中应用层、tcp层、ip层、设备层和驱动层各层发挥的作用。
  • 物理的作用正是要尽可能地屏蔽掉这些传输媒体和通信手段地差异,使得物理上面的数据链路感觉到这些差异。 运用于物理的协议也常被称为物理的规程。 可以将物理的主要任务描述为确定与传输媒体的接口的...
  • 关于Win7 x64下过TP保护(应用层)

    千次阅读 2017-10-28 21:55:04
    关于Win7 x64下过TP保护(应用层)(转) 调试对象:DXF 调试工具:CE、OD、PCHunter、Windbg 调试先言:TP的应用层保护做得比较多,包括对调试器的检测,比如CE工具会被DXF报非法。有的保护还是内核与应用层交替...
  • 摘要:在因特网日益发展壮大的今天,万维网在其上的通信量已经超过90%,万维网信息的安全问题已经越来越被人们所重视,而作为万维网应用层核心协议的http协议是基础。当网络发生异常时,对网络上传输的数据进行监视...
  • 应用层主要包含的协议有:文件传送协议FTP、超文本传送协议HTTP FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机...
  • IPsec并是一个单一协议,而是能够在IP提供互联网通信安全的协议族。IPsec并没有限定用户必须使用何种特定的加密和鉴别算法。实际上,IPsec是个框架,它允许通信双方选择合适的算法和参数(例如:密钥长度)。...
  • OSI 七模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。 完成中继功能的节点通常称为中继系统。在OSI七模型中,处于不同...
  • 你要问我应用层?我就和你扯扯扯

    千次阅读 2020-02-05 09:58:36
    网络应用是计算机网络存在的理由,一批早起的网络应用主要有电子邮件、远程访问、文件传输等,但是随着计算机网络的发展和人类无穷无尽的需求,越来越多的网络应用被开发出来,例如即时通讯和对等(P2P)文件共享,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,197
精华内容 100,478
关键字:

以下不属于应用层服务的是