7

图片描述

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

前言

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

网络七层模型

  • 应用层

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

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

    建立端连接并提供访问验证 如SSL/TLS认证
  • 传输层

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

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

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

    传输二进制 01010101001
    

HTTP

  • 请求/相应报文

      **请求报文包括:**
          请求方法
          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
  • 流量控制

      滑动窗口协议
  • 拥塞控制

      慢开始、拥塞避免
          指数规律增长(报文个数:1、2、4、8、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

Jieyi
102 声望10 粉丝

民德新民 止于至善