zoukankan      html  css  js  c++  java
  • (转)HTTP、TCP和HTTPS

    1、HTTP

    HTTP协议【Hyper Text Transfer Protocal】超文本传输协议。

    HTTP协议的发展是万维网协会(www协会)和Internet工作小组IETF合作的结果,目前已发展到HTTP1.1。

    HTTP协议是基于请求--响应模式的协议,为无状态协议,处于应用层,建立在传输层(TCP)协议之上,现阶段基本采用RESTful架构,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。RESTful采用的就是HTTP协议,RESTful是一种风格,而不是一个标准。

    2、TCP

    2.1 TCP简介

    TCP协议【Transmission Control Protocol】传输控制协议,是一种面向连接、可靠的、基于字节的传输层通信协议,相对于HTTP,在同等环境与条件下使用TCP协议传输数据更快(尤其使用TCP长连接)

    2.2 TCP的三次握手

    第一次握手:客户端发送SYN包(数据包,SYN=1)到服务器,并进入SYN_SEND状态,等待服务器确认(客户端发送等待阶段);

    第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=X+1,ACK为确认字符),同时自己发送一个SYN包(SYN=1),即SYN+ACK包,此时服务器进入SYN_RECV状态(服务器确认接收状态);

    第三次握手:客户端收到服务器的SYN_ACK包,向服务器发送确认包ACK(ACK=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手(客户端接收建立连接状态)。

     
     

    2.3 常用的TCP端口

    操作系统能使用的端口号从0-65545个(2^16),但是0-1023之间的TCP端口已经被标准化定义下来,这些端口为保留端口,就是我们的应用程序不会使用这些端口。

    2.4 DNS

    DNS【Domain Name System】,域名解析服务,就是将域名转换为IP地址,由网络服务运营商提供。全世界有13个根域名服务器(每个根服务器实则有N台服务器)10台在美国,2台在欧洲,1台在日本。服务器查找逐层向上查找。

    DNS缓存:浏览器有DNS缓存,DNS服务本身也有DNS缓存。

    常用的域名记录:A记录、MX记录、CNAME记录、TXT记录、AAAA记录、NS记录。

    3、HTTPS

    HTTPS其实就是HTTP的安全版本,S表示Secure。

    HTTPS协议在HTTP协议和TCP协议之间添加一层安全层,对应用层完全透明。数据在经过网络传输之前,先进行加密,然后再进行传输。

    安全层:SSL协议和TLS协议【虽然是一种协议,但不属于TCP/IP协议族】。SSL表示Secure Sockets Layer即安全嵌套层。TLS表示Transport Layer Security,即传输层安全协议,TLS是SSL的后续升级版本。SSL和TLS的优势就是和应用层无关,就是上层的HTTP,FTP,SSH等就能够透明地建立在SSL/TLS协议之上,完全不需要做任何改动。

    需要使用数字证书

    3.1 建立连接

    1.当访问一个HTTPS的网站时,服务器就会把它的证书和公钥发回来。(此时服务器还没有正式响应数据)

    2.浏览器检查证书是否为可信赖的机构颁发的,确认证书有效和证书属于此网站。如果证书非法,浏览器会给出提示。

    3.生成随机密码,并使用公钥加密,将密码原文和加密后的密文发送至服务器。

    4.服务器使用私钥,对加密后的密码解密,然后和密码原文进行对比,如果一致,将一串握手消息加密,和消息原文发回浏览器。

    5.浏览器使用公钥解密消息密文和原文对比,如果一致,则成功建立连接。

    3.2 传输数据

    1.使用公钥随机生成一个对称密钥,用此对称密钥对请求数据进行加密后,对此对称密钥进行加密,然后一起发送给服务端。

    2.服务器用自己的私钥,用此对称密钥对数据进行加密后,对此对称密钥进行加密,然后一起发送给服务端。

    3.服务器用自己的私钥解密了客户端发送的加密后的对称密钥,然后使用这个对称密钥对客户端的请求数据进行解密。

    4.服务器用客户端发的对称密钥对响应数据进行加密,客户端也有相同的密钥就可以解密发回来的网页了。

    5.然后客户端和服务器之间的所有交互(请求和响应),都通过这一对对称密钥进行加密和解密。



    作者:Adeno
    链接:https://www.jianshu.com/p/a45440899726
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    python_控制台输出带颜色的文字方法
    Django 知识总结(一)
    C# 实现俄罗斯方块
    一起学SpringMVC之Request方式
    一起学SpringMVC之RequestMapping详解
    一起学SpringMVC之Json
    一起学SpringMVC之注解
    一起学SpringMVC之入门篇
    一起学Android之Xml与Json解析
    一起学Android之AsyncTask
  • 原文地址:https://www.cnblogs.com/tudou1223/p/11015194.html
Copyright © 2011-2022 走看看