# 为什么网络要分层?

复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。

  • 各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和我们对开发时系统进行分层是一个道理。
  • 提高了整体灵活性:每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。这个和我们平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。
  • 大问题化小: 分层可以将复杂的网络间题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。 这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。

# 1. OSI 七层模型是什么?

是Open System Interconnection的缩写,全称开放式系统互联,是由国际化标准组织OSI制定的一个网络分层模型,其大体结构及每一层功能自顶向下以此为

  • 应用层:为计算机用户提供服务
  • 表示层:数据处理,包含数据编码与解码、数据加解密、数据压缩与解压等
  • 会话层:管理应用程序之间的会话,包含会话建立、会话维护、会话重连等
  • 传输层:为两台主机之间的通信提供通用的数据传输服务
  • 网络层:路由和寻址,通过ARP协议将报文从一个网络传递到另一个网络
  • 数据链路层:帧编码和误差纠正,通过MAC地址将帧信息从一个点传输到另一个点
  • 物理层:透明的传送比特流传输

每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能

# 2. OSI 为什么会失败?

主要有下面几方面原因:

  • OSI 的专家缺乏实际经验,他们在完成 OSI 标准时缺乏商业驱动力
  • OSI 的协议实现起来过分复杂,而且运行效率很低
  • OSI 制定标准的周期太长,因而使得按 OSI 标准生产的设备无法及时进入市场(20 世纪 90 年代初期,虽然整套的 OSI 国际标准都已经制定出来,但基于 TCP/IP 的互联网已经抢先在全球相当大的范围成功运行了)
  • OSI 的层次划分不太合理,有些功能在多个层次中重复出现。

总的来说 OSI 的七层体系结构概念清楚,理论也很完整,但是它比较复杂而且不实用,而且有些功能在多个层中重复出现。

# 3. OSI 每一层的作用是什么?

  • 应用层:为计算机用户提供服务
  • 表示层:数据处理,包含数据编码与解码、数据加解密、数据压缩与解压等
  • 会话层:管理应用程序之间的会话,包含会话建立、会话维护、会话重连等
  • 传输层:为两台主机之间的通信提供通用的数据传输服务
  • 网络层:路由和寻址
  • 数据链路层:帧编码和误差纠正
  • 物理层:透明的传送比特流传输

# 4. 什么是TCP/IP 四层模型?

是目前被广泛采用的一种模型,可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本,由以下 4 层组成:

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层

# 5. TCP/IP 四层模型的每一层有什么协议

  • 应用层

    • http协议:超文本传输
    • DNS:域名系统
    • DHCP:动态主机配置
    • FTP:文件传输协议
    • 电子邮件协议:POP3、SMTP
    • Telnet协议:远程登陆协议
  • 传输层

    • TCP协议:报文段结构、可靠数据传输、流量控制、拥塞控制
    • UDP协议:报文段结构、RDT(可靠数据传输协议)
  • 网络层

    • IP 协议(TCP/IP 协议的基础,分为 IPv4 和 IPv6)
    • ARP 协议(地址解析协议,用于解析 IP 地址和 MAC 地址之间的映射)
    • ICMP 协议(控制报文协议,用于发送控制消息)
    • NAT 协议(网络地址转换协议)
    • RIP 协议
    • OSPF 协议
    • BGP 协议(路由选择协议)
  • 网络接口层

    • 差错检测技术
    • 多路访问协议(信道复用技术)
    • CSMA/CD 协议
    • MAC 协议
    • 以太网技术

# 6. 应用层常见协议有哪些,作用是什么?

  • HTTP: 主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的

    • HTTP 协是基于 TCP协议,发送 HTTP 请求之前首先要建立 TCP 连接也就是要经历 3 次握手
    • 目前使用的 HTTP 协议大部分都是 1.1。在 1.1 的协议里面,默认是开启了 Keep-Alive 的,这样的话建立的连接就可以在多次请求中被复用了
    • HTTP 协议是”无状态”的协议,它无法记录客户端用户的状态,一般我们都是通过 Session 来记录客户端用户的状态
  • SMTP(Simple Mail Transfer Protocol): 简单邮件传输(发送)协议

    • SMTP 基于 TCP 协议,用来发送电子邮件
    • 接受邮件的协议不是 SMTP 而是 POP3 协议
  • #POP3/IMAP: 邮件接收的协议

    • IMAP 协议相比于POP3更新一点,为用户提供的可选功能也更多一点,几乎所有现代电子邮件客户端和服务器都支持IMAP
    • 与 SMTP 协议不同的是,SMTP只负责邮件的发送,真正负责接收的协议是POP3/IMAP
  • FTP:文件传输协议

    • 基于客户—服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接
    • 主要提供文件传输服务,基于 TCP 实现可靠的传输
    • 好处是可以屏蔽操作系统和文件存储方式
  • Telnet: 远程登陆协议

    • 建立在可靠的传输协议 TCP 之上
    • 最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险
  • SSH: 安全的网络传输协议

    • SSH 建立在可靠的传输协议 TCP 之上
    • 专为远程登录会话和其他网络服务提供安全性的协议
    • 以有效防止远程管理过程中的信息泄露问题,因此取代Telnet

# 7. 电子邮件的发送过程?

比如我的邮箱是“a@163.com”,我要向“b@qq.com”发送邮件

  • 通过 SMTP 协议,将写好的邮件交给163邮箱服务器(邮局)
  • 163邮箱服务器发现发送的邮箱是 qq 邮箱,然后使用 SMTP 协议将邮件转发到 qq 邮箱服务器
  • qq 邮箱服务器接收邮件之后就通知邮箱为“b@qq.com”的用户来收邮件,然后用户通过 POP3/IMAP 协议将邮件取出

# 8.如何判断邮箱是真正存在的?

利用 SMTP 协议来检测

  • 查找邮箱域名对应的 SMTP 服务器地址
  • 尝试与服务器建立连接
  • 连接成功后尝试向需要验证的邮箱发送邮件
  • 根据返回结果判定邮箱地址的真实性

# 9.FTP 的原理是什么?

FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接(其它客户服务器应用程序一般只有一条 TCP 连接)

  • 控制连接:用于传送控制信息(命令和响应)
  • 数据连接:用于数据传送

这种将命令和数据分开传送的思想大大提高了 FTP 的效率