图解http

Posted 买糖买板栗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解http相关的知识,希望对你有一定的参考价值。

说明:基于http/1.1版本

TCP协议定义:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议

HTTP协议:即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用

七层模型 :亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型

TCP/IP通信传输流:

TCP是可靠传输:

  • 建立一个TCP连接时,需要客户端和服务器总共发送3个包:

    SYN攻击:在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect)。此时服务器处于Syn_RECV状态,当收到ACK后,服务器转入ESTABLISHED状态。Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在Linux下可以如下命令检测是否被Syn攻击 netstat -n -p TCP | grep SYN_RECV  一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现,主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等,但是不能完全防范syn攻击。
     
  • 连接断开进行四次握手:

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

DNS:DNS服务和HTTP协议一样位于应用层的协议,他提供域名到IP地址之间的解析服务。

各个协议如何配合:

返回结果的HTTP状态码:

 

HTTP的缺点:

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

 

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

加密算法、数字证书可参考我的另外三篇文章:
MD5~单向散列加密
DES ~ 对称加密算法
RSA ~ 非对称加密算法

 

HTTPS 原理详解:

在 HTTPS 中,原有的 HTTP 协议会得到 TLS(安全传输层协议)或其前辈 SSL(安全套接层)的加密。因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL。可见 HTTPS 并非独立的通信协议,而是对 HTTP 的扩展,保证了通信安全,二者关系如下:

具体流程按图中的序号讲解:

①客户端请求 HTTPS 网址,然后连接到 server 的 443 端口(HTTPS 默认端口,类似于 HTTP 的 80 端口)。

②采用 HTTPS 协议的服务器必须要有一套数字 CA(Certification Authority)证书,证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书(当然了是要钱的,安全级别越高价格越贵)。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。

③服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。

④客户端解析证书并对其进行验证。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥 A。然后客户端还会生成一个随机码 KEY,并使用公钥 A 将其加密。

⑤客户端把加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥。

⑥服务器在收到随机码 KEY 之后会使用私钥 B 将其解密。经过以上这些步骤,客户端和服务器终于建立了安全连接,完美解决了对称加密的密钥泄露问题,接下来就可以用对称加密愉快地进行通信了。

⑦服务器使用密钥(随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥(随机码 KEY)解密数据。

⑧双方使用对称加密愉快地传输所有数据。

好了,以上就是 HTTPS 的原理详解了,如此精美的图搭配这么详细的过程解析,你再搞不懂就说不过去了吧哈哈。

总结

再来总结一下 HTTPS 和 HTTP 的区别以及 HTTPS 的缺点吧。

HTTPS 和 HTTP 的区别:

  • 最最重要的区别就是安全性,HTTP 明文传输,不对数据进行加密安全性较差。HTTPS (HTTP+SSL/TLS)的数据传输过程是加密的,安全性较好。

  • 使用 HTTPS 协议需要申请 CA 证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等。

  • HTTP 页面响应速度比 HTTPS 快,这个很好理解,由于加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度。

  • 由于 HTTPS 是建构在 SSL / TLS 之上的 HTTP 协议,所以,要比 HTTP 更耗费服务器资源。

  • HTTPS 和 HTTP 使用的是完全不同的连接方式,用的端口也不一样,前者是 443,后者是 80。

 

HTTPS 的缺点:

  • 在相同网络环境中,HTTPS 相比 HTTP 无论是响应时间还是耗电量都有大幅度上升。

  • HTTPS 的安全是有范围的,在黑客攻击、服务器劫持等情况下几乎起不到作用。

  • 在现有的证书机制下,中间人攻击依然有可能发生。

  • HTTPS 需要更多的服务器资源,也会导致成本的升高。

 

 

针对Web的攻击技术:

 

 

参考文献:

https://www.cnblogs.com/zmlctt/p/3690998.html
https://mp.weixin.qq.com/s/7vhK5he9lVNKcTbG6HzFxQ

 

以上是关于图解http的主要内容,如果未能解决你的问题,请参考以下文章

《图解HTTP》_上野宣(0274)

图解HTTP--读书笔记

《图解HTTP》-读数笔记

读《图解HTTP》总结--第十章

图解HTTP 笔记

图解HTTP----------------------1