OSI 七层模型
OSI (Open System Interconnect
)模型全称为开放式通信系统互连参考模型,是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框架
OSI
将计算机网络体系结构划分为七层,每一层实现各自的功能和协议,并完成与相邻层的接口通信
从上到下依次是:应用层
、表示层
、会话层
、传输层
、网络层
、数据链路层
、物理层
- 应用层:通过应用程序间的交互来完成特定的网络应用,定义了应用进程之间的交互规则(主要协议有:
HTTP
、DNS
、SMTP
等);数据单元为报文
- 表示层:使通信的应用程序能够解释交换数据的含义,提供的服务主要包括数据压缩,数据加密以及数据描述
- 会话层:负责建立、管理和终止表示层实体之间的通信会话,提供了数据交换的定界和同步功能
- 传输层:主要任务是为两台主机进程之间的通信提供服务(主要协议有:
TCP
、UDP
) - 网络层:选择合适的网间路由和交换节点,确保数据按时成功传送
- 数据链路层:将网络层交下来的 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 |
二者的区别
HTTP | vs | HTTPS |
---|---|---|
明文通信 | - | 使用 SSL/TLS协议 进行了加密处理,相对更安全 |
默认端口是 80 | - | 默认端口是 443 |
不涉及混合加密操作 | - | 涉及加密(混合加密)和多次连接,性能相对 HTTP 要差 |
无证书 | - | CA 证书需要付费 |
HTTP
报文
客户端 发送一个 HTTP
请求到服务器的请求消息包括以下格式:请求行(request line)
、请求头部(header)
、空行
和 请求数据
四个部分组成
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
/* 请求数据 */
服务器 响应消息也由四个部分组成,分别是:状态行
、消息报头
、空行
和 响应正文
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
, POST
和 HEAD
方法
HTTP1.1 新增了六种请求方法:OPTIONS
、PUT
、PATCH
、DELETE
、TRACE
和 CONNECT
方法
Methods | Description |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取 报头 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
DELETE | 删除请求 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 预检请求 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
简单请求与非简单请求
GET 和 POST 的区别
待续...
UDP & TCP
UDP
UDP(User Datagram Protocol
),用户数据包协议,是一个简单的 面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层
UDP报头包括4个字段,每个字段占用2个字节(即16个二进制位),标题短,开销小
特点:
- 提供 面向无连接 的通信服务
- 传输途中出现丢包的情况,不负责重发
- 数据包的到达顺序可能会出现乱序的情况,且UDP没有纠正的功能
- 无法进行流量控制等避免网络拥塞行为(它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制)
TCP
TCP(Transmission Control Protocol
),传输控制协议,是一种可靠、面向字节流的通信协议,把上面应用层交下来的数据看成无结构的 字节流 来发送
TCP报文首部有20个字节,额外开销大
特点:
- 作为一种 面向有连接 的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费
- 充分地实现了数据传输时各种控制功能,可以进行丢包时的 重发控制,还可以对次序乱掉的分包进行 顺序控制
- 在 IP 这种无连接的网络上也能够实现 高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)
二者的区别
二者均为 传输层 协议
- | TCP | UDP |
---|---|---|
可靠性 | 可靠 | 不可靠 |
连接性 | 面向连接(三次握手、四次挥手) | 无连接(尽可能传递数据) |
报文 | 面向字节流 | 面向报文 |
效率 | 传输效率低 | 传输效率高 |
双共性 | 点对点全双工通信 | 一对一、一对多、多对一、多对多 |
流量控制 | 滑动窗口 | 无 |
拥塞控制 | 慢开始、拥塞避免、快重传、快恢复 | 无 |
--> |