http和https的深入认知


摘要:

  本文将介绍http、https概念、区别,连接建立方式,连接断开方式,3次握手,4次挥手,连接双方同时挥手,SSL和TSL的联系和区别,SSL工作在TCP/IP协议的层。

http和https的概念:

  http的全名是超文本传输协议(Hyper Text Transfer Protocol,HTTP),是一种简单请求、响应协议,它通常运行在TCP协议之上。它指定了客户端发给服务器什么样的消息,并获得什么样的应答消息。它是基于客户/服务器模式,面向连接的,并且是一次性无状态的连接,在http 1.1中引入了连接保活机制。

  https是以安全为目的的安全通道(全名Hyper Text Transfer Protocol over  SecureSocket Layer),是在http协议的基础上增加了传输加密和身份认证,从而保证了数据传输过程的安全。https的安全基础就是SSL,协议是SSL+http,可以简单理解为:https是披了SSL外壳的http,是 HTTP 通信接口部分用 SSL(SecureSocket Layer)和 TLS(Transport Layer Security)协议代替而已。

  通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的HTTP。

  

连接建立:

  http的连接建立过程(三次握手机制):

  为何3次握手,2次不行吗?

    以上图为例,如果2次,第二条应答client不一定收到。

  那3次就安全吗?

    不一定,有可能第三条信息server也没收到,但是相对2次握手安全。实际上无论握手多少次都不能满足传输的绝对可靠,为了效率跟相对可靠而看,3次刚刚好,所以就3次了(正好AB相互确认了一次)。

  https的连接建立过程:

    HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。具体是如何进行加密,解密,验证的,且看下图,下面的称为一次握手。

    在该过程中,第1、3步是做CA的公钥交互;第5步是用公钥传以后使用的对称密钥(client端生成的一个随机数);第7步使用了对称密钥加密的数据;

  http的4次挥手:

        

  也可能同时发起主动关闭:

  整体的握手+挥手过程如下:

        

  为何连接握手3次、断开握手4次?

    这是因为连接建立是,服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。 

   

 http和https的不同:

  1、http是明文传输的,不安全;https是可进行加密传输、身份认证的网络协议

  2、http使用的80端口,https是443;

  3、https是在传输层进行加密的。https报文在被包装成tcp报文的时候完成加密的过程,无论是https的header域也好,body域也罢都是会被加密的。当使用tcpdump或者wireshark之类的tcp层工具抓包,获取是加密的内容

TCP/IP协议

  TCP/IP协议在一定程度上参考了OSI的体系结构 ,在TCP/IP协议中,OSI的7层模型被简化为了四个层次。

TCP/IP协议的模型和OSI模型的各层对应关系:

      

  四层模式中,各层的作用:

    应该层:应用程序之间的交互层,如:简单电子邮件传输(SMTP)、文件传输协议(FTP);

    传输层:负责上层应用,或者节点间的数据传输,主要功能是:数据格式化、数据确认、数据丢失重传等,如:传输控制协议(TCP)、用户数据报协议(UDP)等;

    网络层:负责数据的基本的封包和传输功能,让每个数据包能够达到目的主机,但是不保证每个数据是否真的到达目的主机。主机之间是通过IP地址来相互识别的,如网际协议(IP);

    网络接口层:负责实际的物理网络管理,定义如何使用物理网络进行传输。功能是:接收IP数据报文,然后通过物理网络进行传输,或者从物理网络获取物理帧,然后提取IP数据报文向上传输。

  七层模式,各层的作用:

    应用层:网络服务与最终用户的接口;

    表示层:负责数据的表示、安全、压缩;

    会话层:负责网络连接会话的建立、管理、终止;

    传输层:负责定义数据的传输协议端口号,以及流控和差错校验;

    网络层:负责逻辑地址寻址,实现不同网络之间的路径选择;

    数据链路层:负责逻辑连接、进行硬件地址寻址(MAC地址)、差错检验(错误发现但不能纠正)等;

    物理层:负责物理连接的建立、维护、断开。

工作在网络各层的设备概述:

  中继器:工作在网络物理层的连接设备;

  网桥:也叫桥接器。工作在数据链路层的存储转发设备;

  路由器:工作在网络层的互联设备;

  交换机:交换机,分二、三、四层交换机。第二层交换机工作于数据链路层,第三层交换机工作于网络层。第四层传输层。

  网关:是在传输层及以上的互联设备

常见的攻击:

  1、SYN Flood攻击
    SYN Flood攻击是当前网络上最为常见的DDoS攻击,它利用了TCP协议实现上的一个缺陷。通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。

  2、UDP Flood攻击
    UDP Flood是日渐猖厥的流量型DDoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。由于UDP协议是一种无连接的服务,在UDP Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。
  3、ICMP Flood攻击
    ICMP Flood攻击属于流量型的攻击方式,是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文。因此ICMP Flood出现的频度较低。
  4、Connection Flood攻击
    Connection Flood是典型的利用小流量冲击大带宽网络服务的攻击方式,这种攻击的原理是利用真实的IP地址向服务器发起大量的连接。并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的链接。
  5、HTTP Get攻击
    这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用。这种攻击的特点是可以绕过普通的防火墙防护,可通过Proxy代理实施攻击,缺点是攻击静态页面的网站效果不佳,会暴露攻击者的lP地址。
  6、UDP DNS Query Flood攻击
    UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。