HTTP

来源:互联网 发布:java实现链表反转 编辑:程序博客网 时间:2024/06/06 03:07

HTTP协议

一、是一种应用层的面向对象的协议,适用于分布式超媒体信息系统

特点:

1.支持 客户/服务器模式

2.简单快捷:只需传送请求方法和路径。请求方法常用的有GETHEADPOST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象

4.无连接:限制每次连接只处理一个请求。完成一个请求并收到回答之后立即断开

5.无状态:他是无状态协议即对于事物处理没有记忆能力,也就是后续处理如果需要前面的信息,则他必须重传,这就导致每次连接传送的数据量变大

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

三、HTTP URL(URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:

http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

eg:

1、输入:www.guet.edu.cn

浏览器自动转换成:http://www.guet.edu.cn/

2http:192.168.0.116:8080/index.jsp 

四、请求篇

1.HTTP请求分为三部分:分别是:请求行、消息报头、请求正文

1GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF)

2)POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

egPOST /reg.jsp HTTP/ (CRLF)

2.常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

403 Forbidden  //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

egHTTP/1.1 200 OKCRLF

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

4.JDBC复习

1.sql注入

1.http协议:超文本传输协议

2.版本1.0:短连接(发一次建立一次)

1.1:长连接

3.协议原理:基于tcp(传输控制),封装,

基于请求响应模型

请求数据包:

响应数据包:

404:eg:socket连接失败

405:

 

4.url:统一资源定位符(http。。。。)

uri:统一资源标识符(标识非网络资源)

5.协议://域名资源路径

主协议:子协议/host

1.1、3次握手过程

服务端的TCP进程先创建传输控制块TCB,准备接受客户端进程的连接请求,然后服务端进程处于LISTEN状态,等待客户端的连接请求,如有,则作出响应。
    1、客户端的TCP进程也首先创建传输控制模块TCB,然后向服务端发出连接请求报文段,该报文段首部中的SYN=1,ACK=0,同时选择一个初始序号 seq=i。TCP规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号。这时,TCP客户进程进入SYN—SENT(同步已发送)状态,这是 TCP连接的第一次握手。
    2、服务端收到客户端发来的请求报文后,如果同意建立连接,则向客户端发送确认。确认报文中的SYN=1,ACK=1,确认号ack=i+1,同时为自己 选择一个初始序号seq=j。同样该报文段也是SYN=1的报文段,不能携带数据,但同样要消耗掉一个序号。这时,TCP服务端进入SYN—RCVD(同 步收到)状态,这是TCP连接的第二次握手。
    3、TCP客户端进程收到服务端进程的确认后,还要向服务端给出确认。确认报文段的ACK=1,确认号ack=j+1,而自己的序号为seq=i+1。 TCP的标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,因此,如果不携带数据,则下一个报文段的序号仍为seq=i+1。这 时,TCP连接已经建立,客户端进入ESTABLISHED(已建立连接)状态。这是TCP连接的第三次握手,可以看出第三次握手客户端已经可以发送携带 数据的报文段了。
    当服务端收到确认后,也进入ESTABLISHED(已建立连接)状态。

 

1.2、关于第三次握手的解释

前俩比较容易理解,第三次握手看似多余其实不然,这主要是为了防止已失效的请求报文段突然又传送到了服务端而产生连接的误判

比如:客户端发送了一个连接请求报文段A到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文段B该服务端,而后 正常建立连接,数据传输完毕,并释放了连接。但是请求报文段A延迟了一段时间后,又到了服务端,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。那么问题来了,假如这里没有三次握手,这时服务端只要发送了确认,新的 连接就建立了,但由于客户端没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据,而服务端却认为新的连接已经建立了,并在 一直等待客户端发送数据,这样服务端就会一直等待下去,直到超出保活计数器的设定值,而将客户端判定为出了问题,才会关闭这个连接。这样就浪费了很多服务 器的资源。而如果采用三次握手,客户端就不会向服务端发出确认,服务端由于收不到确认,就知道客户端没有要求建立连接,从而不建立该连接。

2、 缺陷引起的SYN Flood

2.1、SYN Flood 攻击

SYN- Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它就是利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量 的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。这种攻击早在1996年就被发现,但至今仍然显示 出强大的生命力。很多操作系统,甚至防火墙、路由器都无法有效地防御这种攻击,而且由于它可以方便地伪造源地址,追查起来非常困难。它的数据包特征通常 是,源发送了大量的SYN包,并且缺少三次握手的最后一步握手ACK回复。

原理:攻击者首先伪造地址对服务器发起SYN请求,服务器回应(SYN+ACK)包,而真实的IP会认为,我没有发送请求,不作回应。服务 器没有收到回应,这样的话,服务器不知 道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者 如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难。

2.2、SYN Flood 防护措施

主要通过以下3种方式

1. 无效连接监视释放

这种方法不停的监视系统中半开连接和不活动连接,当达到一定阈值时拆除这些连接,释放系统资源。这种绝对公平的方法往往也会将正常的连接的请求也会被释放掉,”伤敌一千,自损八百“

2. 延缓TCB分配方法

SYN Flood关键是利用了,SYN数据报文一到,系统立即分配TCB资源,从而占用了系统资源,因此有俩种技术来解决这一问题

Syn Cache技术

这种技术在收到SYN时不急着去分配TCB,而是先回应一个ACK报文,并在一个专用的HASH表中(Cache)中保存这种半开连接,直到收到正确的ACK报文再去分配TCB

Syn Cookie技术

Syn Cookie技术则完全不使用任何存储资源,它使用一种特殊的算法生成Sequence Number,这种算法考虑到了对方的IP、端口、己方IP、端口的固定信息,以及对方无法知道而己方比较固定的一些信息,如MSS、时间等,在收到对方 的ACK报文后,重新计算一遍,看其是否与对方回应报文中的(Sequence Number-1)相同,从而决定是否分配TCB资源

3. 使用SYN Proxy防火墙

原理:对试图穿越的SYN请求进行验证之后才放行、

 当客户端最后一次发送消息时并没有直接进入close状态而是进入TIME_WAIT状态,这是因为TCP是面向连接的协议每一次发送都需要确认对方是否收到消息。客户端最后一次发送消息时可能会由于网络等其他原因导致服务器收不到消息,服务器就会选择从新给客户端发送一个FIN的包,如果客户端处于关闭状态将永远也收不到服务器发给它的消息了。至于这个时间要等多久才能确认对方收到了消息呢。

  报文在网络中有一个最大生存时间MSL超过这个时间就会被丢弃并通知源主机。TIME_WAIT要等待 2MSL才会进入 CLOSED状态。ACK包到达服务器需要 MSL时间,服务器重传 FIN包也需要 MSL时间,2MSL是数据包往返的最大时间,如果 2MSL后还未收到服务器重传的 FIN包,就说明服务器已经收到了 ACK包。

 

 

原创粉丝点击