1. 五层因特网协议栈
应用层
应用层决定了向用户提供应用服务时通信的活动, 应用进程间的通信和交互的规则. 如 HTTP 协议, 域名系统 DNS, 文件传输协议 FTP, 电子邮件协议 SMTP.
域名系统 DNS: 负责解析域名, 提供域名到 IP 地址之间的解析服务.
HTTP 协议: 超文本传输协议, 是互联网应用最广泛的网络协议, 所有的万维网 (wwww) 文件都必须遵守这个标准.
传输层
提供处于网络连接中的两台计算机之间的数据传输, 会传输应用层的相关报文. 其中有两个不同性质的协议 TCP 和 UDP
TCP: 提供面向连接的, 提供可靠的字节流服务(为了方便传输, 把大块数据分割成以报文为单位的数据包, 进行管理). 提供全双工通信, 首部有 20 个字节
三次握手: 为了准确无误的将数据包送到目的处, 会采用三次握手策略. 发送端首先会发送一个带有 SYN 标志的数据包给对方, 对方接收后, 会回传一个带有 SYN/ACK 标志的数据包, 表达确认信息. 发送端在回传一个带有 ACK 标志的数据包, 表示结束. 如果某一个阶段莫名其妙的中断, TCP 会按照相同的顺序继续发送相同的数据包.
UDP: 无连接的, 面向报文的, 尽最大可能的交付, 不保证可靠支付, 没有拥塞控制, 支持一对一, 一对多, 多对一, 多对多的交互通信, 首部开销小只有 8 个字节
网络层(网络互连层)
处理网络上流动的数据包, 规定通过怎么样的路劲 (传输路线) 达到接收方主机, 并把数据包传给对方
数据链路层
来处理连接网络的硬件部分. 包括控制操作系统, 硬件的设备驱动等, 硬件上的范畴都在链路层的范围内.
物理层
物理层上传输的单位是比特, 实现相邻计算机节点之间比特流的透明传输, 尽肯能屏蔽具体传输介质和物理设备的差异.
OSI 七层协议模型
应用层 => 表示层 => 会话层 => 传输层 => 网络层 => 数据链路层 =>物理层
TCP/IP 四层模型
应用层 => 传输层 => 网络层 => 数据链路层
各层对应图例
HTTP 和 HTTPS 的区别
协议:
HTTP: 运行在 TCP 上, 明文传输, 客户端和服务端都无法验证对方的身份.
HTTPS: 运行在 SSL(安全套接层)上, SSL 运行在 TCP 上, 添加了加密和认证机制.
端口:
- HTTP:80
- HTTPS:443
资源消耗:
HTTP: 较少
HTTPS: 由于有加密操作会更多的消耗 CUP 和内存资源.
开销:
HTTP: 无需证书.
HTTPS: 需要证书, 证书一般要向认证机构购买.
加密机制:
HTTP: 无
HTTPS: 共享密钥加密和公开密钥加密并且用的是混合加密机制
安全性:
HTTP: 弱
HTTPS: 强
对称加密和非对称加密
对称加密: 加密和解密都使用同一个密钥, 存在的问题是密钥如何发送给对方.
非对称加密: 加密用公钥和私钥, 公钥可以随便发布, 私钥只有自己有. 发送的密文用公钥加密, 接受方用私钥解密, 相对于安全, 但是速度慢.
HTTP2
HTTP1: 浏览器中限制了同一个域名下的请求数量(Chrome 一般 6 个), 请求很多资源的时候, 要等前 6 个请求后才会发送请求.
HTTP2: 引用了多路复用技术, 通过一个 TCP 连接可以传输所有的请求数量. 可以不受同一个域名下请求数量的问题.
跨域
原因: 因为浏览器的同源策略(协议, 域名, 端口)
- function JSONP(url, jsonpCallback, success) {
- let script = document.createElement('script')
- script.src = url
- script.async = true
- script.type = 'text/javascript'
- Windows[jsonpCallback] = function(data) {
- success && success(data)
- }
- document.body.appendChild(script)
- }
- JSONP('http://xxx', 'callback', function(value) {
- console.log(value)
- })
- 2.CORS (跨域资源共享)
- server {
- listen 8080; # 监听的端口
- server_name 192.168.1.1; # 配置访问域名
- root /data/toor; # 站点根目录
- error_page 502 404 /page/404.html; # 错误页面
- location ^~ /API/ { # 使用 /API/ 代理 proxy_pass 的值
- proxy_pass http://192.168.20.1:8080; # 被代理的应用服务器 HTTP 地址
- }
- }
- proxyTable: {
- '/weixin': {
- target: 'http://192.168.48.11:8100/', // 接口的域名
- secure: false, // 如果是 https 接口, 需要配置这个参数
- changeOrigin: true, // 如果接口跨域, 需要进行这个参数配置
- pathRewrite: {
- '^/weixin': ''
- }
- },
- },
- this.$http.JSONP('http://www.domain2.com:8080/login', {
- params: {},
- JSONP: 'onBack'
- }).then((res) => {
- console.log(res);
- })
来源: https://www.cnblogs.com/xiaxuening/p/10485879.html