Skip to content
On this page

OSI 七层模型

OSI (Open System Interconnect)模型全称为开放式通信系统互连参考模型,是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框架

OSI 将计算机网络体系结构划分为七层,每一层实现各自的功能和协议,并完成与相邻层的接口通信

从上到下依次是:应用层表示层会话层传输层网络层数据链路层物理层

  • 应用层:通过应用程序间的交互来完成特定的网络应用,定义了应用进程之间的交互规则(主要协议有:HTTPDNSSMTP等);数据单元为 报文
  • 表示层:使通信的应用程序能够解释交换数据的含义,提供的服务主要包括数据压缩,数据加密以及数据描述
  • 会话层:负责建立、管理和终止表示层实体之间的通信会话,提供了数据交换的定界和同步功能
  • 传输层:主要任务是为两台主机进程之间的通信提供服务(主要协议有:TCPUDP
  • 网络层:选择合适的网间路由和交换节点,确保数据按时成功传送
  • 数据链路层:将网络层交下来的 IP数据报组装成帧,在两个相邻节点间的链路上传送帧
  • 物理层:主要任务是确定与传输媒体的接口的一些特性

HTTP & HTTPS

HTTP

HTTP (HyperText Transfer Protocol),即超文本运输协议,是实现网络通信的一种规范

它是一个传输协议,即将数据由 A 发送给 B 或由 B 发送给 A,并且 A 与 B 之间能够存放很多第三方。传输的数据并不是计算机底层中的二进制包,而是完整的、有意义的数据(如 HTML 文件图片文件 等)

在实际应用中,HTTP 常被用于在浏览器和服务器之间传递信息,以 明文 方式发送内容,不提供任何方式的数据加密

特点如下:

  • 支持客户端/服务端(C/S)模式
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
  • 无状态:HTTP协议无法根据之前的状态进行本次的请求处理

HTTPS

在上面说到 HTTP 是以明文的形式进行数据传输,这并不安全,而 HTTPS 协议就是为了解决这个问题而出现的。为了保证这些隐私数据能加密传输,让HTTP运行在安全的SSL/TLS协议(Secure Sockets Layer 安全套接字协议 / Transport Layer Security 继任者传输层安全)上,即HTTPS = HTTP + SSL/TLS,通过 CA 证书来验证服务器的身份

客户端-服务端
Client发起 ➡️ https 请求Server
Client返回 ⬅️ CA 证书(包含公钥)Server
Client产生随机对称密钥(客户端)-
Client验证证书通过后,使用得到的公钥对对称密钥加密-
Client发送 ➡️ 加密后的对称密钥Server
-使用初次产生的私钥解密得到对称密钥(服务器端)Server
Client通信 ⬅️ ➡️ 对称密钥加密的密文Server

二者的区别

HTTPvsHTTPS
明文通信-使用 SSL/TLS协议 进行了加密处理,相对更安全
默认端口是 80-默认端口是 443
不涉及混合加密操作-涉及加密(混合加密)和多次连接,性能相对 HTTP 要差
无证书-CA 证书需要付费

HTTP 报文

客户端 发送一个 HTTP 请求到服务器的请求消息包括以下格式:请求行(request line)请求头部(header)空行请求数据 四个部分组成

js
POST /hello HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

/* 请求数据 */

服务器 响应消息也由四个部分组成,分别是:状态行消息报头空行响应正文

js
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

/* 响应正文 */

HTTP1.0 定义了三种请求方法:GET, POSTHEAD 方法
HTTP1.1 新增了六种请求方法:OPTIONSPUTPATCHDELETETRACECONNECT 方法

MethodsDescription
GET请求指定的页面信息,并返回实体主体
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取 报头
PUT从客户端向服务器传送的数据取代指定的文档的内容
DELETE删除请求
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS预检请求
TRACE回显服务器收到的请求,主要用于测试或诊断
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新

简单请求与非简单请求

cors-跨站脚本攻击防范? 🔗

GET 和 POST 的区别

待续...

UDP & TCP

UDP

UDP(User Datagram Protocol),用户数据包协议,是一个简单的 面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层

UDP报头包括4个字段,每个字段占用2个字节(即16个二进制位),标题短,开销小

特点:

  • 提供 面向无连接 的通信服务
  • 传输途中出现丢包的情况,不负责重发
  • 数据包的到达顺序可能会出现乱序的情况,且UDP没有纠正的功能
  • 无法进行流量控制等避免网络拥塞行为(它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制)

TCP

TCP(Transmission Control Protocol),传输控制协议,是一种可靠、面向字节流的通信协议,把上面应用层交下来的数据看成无结构的 字节流 来发送

TCP报文首部有20个字节,额外开销大

特点:

  • 作为一种 面向有连接 的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费
  • 充分地实现了数据传输时各种控制功能,可以进行丢包时的 重发控制,还可以对次序乱掉的分包进行 顺序控制
  • 在 IP 这种无连接的网络上也能够实现 高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)

二者的区别

二者均为 传输层 协议

-TCPUDP
可靠性可靠不可靠
连接性面向连接(三次握手、四次挥手)无连接(尽可能传递数据)
报文面向字节流面向报文
效率传输效率低传输效率高
双共性点对点全双工通信一对一、一对多、多对一、多对多
流量控制滑动窗口
拥塞控制慢开始、拥塞避免、快重传、快恢复
-->

MIT