图解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的主要内容,如果未能解决你的问题,请参考以下文章