[TOC]
## **OSI 七层模型**
**OSI 七层模型(Open System Interconnection Model)** 是国际标准组织提出的一个网络分层模型。
每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去。
**OSI 的七层体系结构概念清楚,理论也很完整,但是它比较复杂而且不实用,而且有些功能在多个层中重复出现。**
:-: ![](https://img.kancloud.cn/9a/3e/9a3ec75f17a8f2be7d18f85c87a6124e_1120x1588.png)
:-: ![](https://img.kancloud.cn/c2/a2/c2a2561f39d720b01b8c7abf86894300_1852x1384.png)
### 1. **物理层**
> 利用传输介质(网线,光纤,同轴电缆)为数据链路层提供物理连接,实现比特流的透明传输。尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。 (**比特**)
> **协议:IEEE802.3 以太网协议和物理层规范**
物理层并不是物理媒体本身,物理层的媒体(传输介质、物理设备)包括电缆、光纤等。正因为物理媒体会有很多差异,所以物理层的作用正是尽可能地屏蔽这些差异,使上面的数据链路曾感觉不到这些差异。其主要任务就是确定与传输媒体的接口有关的一些特性,如机械特性、电气特性等。在这一层,**数据的单位为比特**
### 2. **数据链路层**
> 封装成帧,透明传输,差错检测(**帧**)
> **协议:地址解析协议ARP、逆向地址解析协议RARP、点对点协议PPP**
**封装成帧**:就是数据前后分别添加首部和尾部,这样就构成了 **帧**。(在网线上,数据是以电信号的形式传输,在光纤上,数据以光信号形式传输。因此数据链路层对数据进行了格式化以进行传输)。
**透明传输**:用字节填充法(在非帧边界的控制字符插入转义字符)解决透明传输问题。
![](https://img.kancloud.cn/fb/29/fb29c3090a254cb769552f94913232b6_990x387.png)
**差错检测**:传输过程中可能出现差错(比特差错),为保证可靠性,在数据链路层广泛使用了循环冗余检验CRC的检错技术。
**数据链路层使用的信道主要有两种类型:**
* **点对点信道**:也就是字面意思,点对点得通信方式。
* **广播信道**:这种信道是一对多的方式,所以整个过程也比较复杂。必须使用一些信道协议来协调网络中的主机数据发送。
**具体工作**:接收来自物理层的比特流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为比特流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
### 3. **网络层**
> 通过路由选择算法,为数据包选择最适当的路径。(**数据包**)
> **协议:网络协议IP、地址解析协议ARP、互联网控制信息协议ICMP、互联网组管理协议IGMP**
如果我有多台计算机,怎么找到我要发的那台?或者,A要给F发信息,中间要经过B,C,D,E,但是中间还有好多节点如K.J.Z.Y。我怎么选择最佳路径?这就是路由要做的事。
注意:数据链路层是解决同一网络内节点**之间的通信,而**网络层主要解决不同子网间的通信。
### 4. **传输层**
> 提供端到端的连接(**报文段**)
> **协议:传输控制协议TCP、用户数据报协议UDP**
### 5. **会话层**
> 建立和管理应用程序之间会话
> **协议:安全套接字协议SSL、传输层安全协议TLP**
例如:A和B通过QQ进行聊天时,A手机上的QQ和B手机上的QQ建立了会话。(同一应用程序之间)
### 6. **表示层**
> 把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示
> **协议:外部数据表示协议XDP**
例如:两个通信主机之间采用不同的编码方式,需要通过表示层来完成这种转换,实现编码的同一。
### 7. **应用层**
> 直接想用户提供服务,完成用户希望在网络上完成的各种工作。
> **协议:支持万维网应用的 HTTP 协议、支持电子邮件的 SMTP 协议、支持文字传送的 FTP协议、DNS(域名解析)、邮局协议POP3、安全套接字协议Socks、简单网络管理协议SNMP、TCP/IP终端仿真协议Telnet**
### 数据在各层之间的传递过程
![](https://img.kancloud.cn/fe/73/fe733e7196db3e6987144cb536aeccbe_1196x680.png)
## **TCP/IP 四层模型**
**TCP/IP 四层模型**是目前被广泛采用的一种模型,我们可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本。包含:
**应用层、传输层、网络层、网络接口层**。
:-: ![](https://img.kancloud.cn/18/b8/18b8f590ba4fe9ac659726e0bd4613e1_787x453.png)
## **OSI七层模型和TCP/IP四层模型的区别**
1. OSI 七层协议分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;TCP/IP 四层协议分别为:网络接口层,网络层、传输层、应用层。
2. OSI 是一种理论模型,而 **TCP/IP 已经广泛使用,成为网络互联实际的标志**
3. OSI 模型是一个大而全的理论模型,TCP/IP 模型侧重一些核心的协议的分层,是由实际发展总结出来的。
4. OSI 先有模型,后有协议,先有标准,后进行实践
5. OSI协议实现起来1. OSI协议实现起来**过分复杂,**而且**运行效率低**,**层次划分不合理**,很多功能在多个层次**重复出现**,而且1. OSI协议实现起来**过分复杂,**而且**运行效率低**,**层次划分不合理**,很多功能在多个层次**重复出现**,**层次划分不合理**,很多功能在多个层次重复出现
## **为什么网络要分层?**
1. **各层之间相互独立**:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和我们对开发时系统进行分层是一个道理。
2. **提高了整体灵活性** :每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。**这个和我们平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。**
3. **大问题化小** :分层可以将复杂的网络间题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。**这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。**
>
> **计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,计算机整个体系从上到下都是按照严格的层次结构设计的。**
- PHP
- PHP 核心架构
- PHP 生命周期
- PHP-FPM 详解
- PHP-FPM 配置优化
- PHP 命名空间和自动加载
- PHP 运行模式
- PHP 的 Buffer(缓冲区)
- php.ini 配置文件参数优化
- 常见面试题
- 常用函数
- 几种排序算法
- PHP - 框架
- Laravel
- Laravel 生命周期
- ThinkPHP
- MySQL
- 常见问题
- MySQL 索引
- 事务
- 锁机制
- Explain 使用分析
- MySQL 高性能优化规范
- UNION 与 UNION ALL
- MySQL报错:sql_mode=only_full_group_by
- MySQL 默认的 sql_mode 详解
- 正则表达式
- Redis
- Redis 知识
- 持久化
- 主从复制、哨兵、集群
- Redis 缓存击穿、穿透、雪崩
- Redis 分布式锁
- RedisBloom
- 网络
- 计算机网络模型
- TCP
- UDP
- HTTP
- HTTPS
- WebSocket
- 常见几种网络攻击方式
- Nginx
- 状态码
- 配置文件
- Nginx 代理+负载均衡
- Nginx 缓存
- Nginx 优化
- Nginx 配置 SSL 证书
- Linux
- 常用命令
- Vim 常用操作命令
- Supervisor 进程管理
- CentOS与Ubuntu系统区别
- Java
- 消息队列
- 运维
- RAID 磁盘阵列
- 逻辑分区管理 LVM
- 业务
- 标准通信接口设计
- 业务逻辑开发套路的三板斧
- 微信小程序登录流程
- 7种Web实时消息推送方案
- 用户签到
- 用户注册-短信验证码
- SQLServer 删除同一天用户重复签到
- 软件研发完整流程
- 前端
- Redux
- 其他
- 百度云盘大文件下载
- 日常报错记录
- GIT
- SSL certificate problem: unable to get local issuer certificate
- NPM
- reason: connect ECONNREFUSED 127.0.0.1:31181
- SVN
- SVN客户端无法连接SVN服务器,主机积极拒绝
- Python
- 基础
- pyecharts图表
- 对象
- 数据库
- PySpark
- 多线程
- 正则
- Hadoop
- 概述
- HDFS