网络之HTTP/HTTPS

图片描述

夜阑卧听风吹雨
铁马冰河入梦来算法

前言

大学老师曾经说过,计算机界有三本天书,分别是:数据结构、计算机组成原理、计算机网络。因此网络也是咱们从事计算机开发必须了解且掌握的一门技术,本文我将觉得所理解的网络知识来用通俗的语言描述网络缓存

网络七层模型

  • 应用层安全

    访问网络服务的端口,如HTTP传输 ‘hello,world’
  • 表示层服务器

    提供数据格式转换
  • 会话层cookie

    创建端链接并提供访问验证 如SSL/TLS认证
  • 传输层网络

    UDP/TCP + ‘hello,world’
  • 网络层session

    IP + UDP/TCP + ‘hello,world’
  • 数据链路层数据结构

    MAC地址 + IP + UDP/TCP + ‘hello,world’ + 帧尾
  • 物理层dom

    传输二进制 01010101001

HTTP

  • 请求/相应报文tcp

    **请求报文包括:**
          请求方法
          URL
          协议版本HTTP1.0
          首部字段名
          请求体 (POST请求)
      **响应报文包括:**
          版本
          状态码
          短语
          首部字段名
          响应实体
  • 请求方法
    GET:

    表明获取资源
       特色:
           安全:不该该引发Server端的任何状态变化
           幂等:请求屡次的结果同样
           可缓存:代理服务器能够缓存

    POST:

    表明处理资源
       特色:
           不安全
           不幂等
           不可缓存

    HEAD
    OPTION
    PUT

  • 状态码
    200:

    请求成功

    300:

    请求重定向

    400:

    因为客户端请求地址和参数引用的失败

    500:

    服务端缘由
  • 链接接创建流程
    TCP:

    三次握手、四次挥手
  • HTTP特色
    无链接:

    每次请求都须要创建TCP链接

    无状态

    不会保存记录用户的信息和状态
  • 解决HTTP无链接问题
    在同一条TCP上面产生屡次HTTP请求
    头部字段(Header):

    Connection:keep-live
       Time: 20 在必定时间内不须要再次创建TCP链接
       Max: 在创建链接时间内最多请求次数

    判断一个请求的结束?

    Content-length
       空chunked
  • 解决HTTP无状态问题
    解决方案:Cookie / Session

HTTPS与HTTP的区别

HTTPS=HTTP+SSL/TLS:

在应用层和传输层之间增长了 SSL/TLS认证
查阅多方资料:SSL/TLS认证在会话层

HTTPS连接创建流程

  • Client->Server:发送支持的TLS版本号,支持的加密算法,random number C
  • Server->Client:商定的加密算法,random number S,server 证书(包括公钥)
  • Client验证证书
  • Client组装会话密钥
  • Client经过server的公钥对预主密钥进行加密传输
  • Server经过密钥解密得要预主密钥
  • Server组装会话密钥
  • Client发送加密的握手消息 (验证)
  • Server发送加密的握手消息 (验证)

HTTPS的加密手段

  • 创建链接的过程使用非对称加密(耗时)
  • 后续通讯过程使用对称加密

非对称加密

  • 私钥加密公钥解密
  • 公钥加密私钥解密
  • 公钥:在网络中传输,密钥保存在服务端,因此非对称加密相对安全

对称加密

  • 一把秘钥在网络中传递,不安全

TCP 控制传输协议

特色:

  • 面向链接

    数据开始传输以前创建链接(三次握手)
      数据传输以后释放链接(四次挥手)
  • 可靠传输

    无差错、不丢失、不重复、按序到达、超时重传
  • 面向字节流

    会自动根本TCP自身状况传输字节大小,不受发送方控制,
      最大传输单元 = 1500 =20个IP头+20个tcp头+data
  • 流量控制

    滑动窗口协议
  • 拥塞控制

    慢开始、拥塞避免
          指数规律增加(报文个数:一、二、四、八、16) 
          达到门限初始值:开始加法增大
          网络拥塞的时候:乘法减少到新的门限值
      快恢复、快重传

滑动窗口协议

发送窗口以很快的速率去发送消息时,因为服务端接收窗口比较小,
此时接收窗口经过向TCP的报文首部字段去更改窗口值去更正或者调整发送端的发送速率

UDP 用户数据协议

特色

无链接:不须要创建链接流程
最大能力传输: 不保证按序到达
面向报文:不合并 不拆分

功能

复用、分用

DNS解析

域名到IP地址的映射,解析请求采用UDP数据报且明文的形式
使用DNS协议向DNS服务器的53端口进行请求

DNS解析过程

- Client经过DNS协议向DNS服务器请求相应域名的解析 
- DNS服务器返回给客户端相应的IP
- 客户端拿到IP再向服务端发送网络请求

DNS解析查询方式

  • 递归查询

    依次询问返回:Client->本地DNS->根域DNS->顶级DNS->权限DNS
  • 迭代查询

    Client:  本地DNS、根域DNS、顶级DNS、权限DNS互相询问

DNS劫持

**缘由在公网中存在第三方钓鱼DNS服务器拦截咱们的DNS解析请求,返回给咱们错误的IP**

怎样解决DNS劫持

httpDNS

DNS解析:使用DNS协议向DNS服务器的53端口进行请求
   HTTPDNS解析:使用HTTP协议向DNS服务器的80端口进行解析,不会产生DNS解析就不会有DNS劫持
   http://119.29.29.29/d?dn=www.xiaozhu.com&ip=172.18.134.109

长链接

Client <-(长连通道)>长连server(代理服务器) <-> API server
Client的HTTP请求是经过代理服务器经过内网专线进行内网的DNS解析这样就规避了公网DNS解析劫持的问题

DNS劫持和HTTP的关系?

没有关系

由于DNS解析发生在HTTP创建链接以前
由于DNS解析请求使用的UDP数据报,端口号53

DNS解析转发

Client->中国移动DNS->中国电信DNS->中国联通DNS ,因为协议限制,致使各个DNS解析商互相推脱,形成DNS解析缓慢,从而致使网络请求慢

Session/Cookie

对HTTP无状态的补偿,例如client发送请求以后,再次请求 没法记住用户

Cookie

用来记录用户状态,区分用户,状态保存在客户端
怎样保证cookie安全?

对cookie进行加密处理
只在HTTPS上携带cookie(推荐)
设置cookie为HTTPonly ,防止跨站脚本攻击

怎样修改cookie

新cookie覆盖旧cookie
覆盖规则:name、path、domian须要与原cookie一致

怎样删除cookie

新cookie覆盖旧cookie
覆盖规则:name、path、domian须要与原cookie一致
设置cookie的expire=过去的某个时间点或者设置maxAge=0

session
用来记录用户状态,区分用户,状态保存在服务端端

工做流程
    Client向server发送消息,server记录用户状态生成sessionID
    经过存在cookie中传给client
相关文章
相关标签/搜索