1. 前言

互联网行业因为广为人知的高薪以及相对于传统工科行业更多的发展机会,最近几年涌入了越来越多的非计算机专业毕业的从业人员,校招 / 社招面试的时候,候选人往往也会被分为两种:科班和非科班,互联网科班一般特指大学就读计算机科学与技术或者软件专业,非科班则包含其他各大传统工科甚至是文科专业。

某些大厂在招聘后端开发工程师时会严格要求科班背景,因为对于非科班的同学,一般都能胜任计算机网络应用层以上的工作(例如编写一个低并发的后台管理系统),但是对于计算机底层的知识往往是一片盲区。当对计算机网络了解甚少的非科班同学遇到线上问题时,或者网络通信相关的运维故障,往往会束手无策。

所以了解计算机底层如何运作是非常有必要的,我们这里谈到的计算机底层知识,包括但不限于:

  • 计算机组成:CPU 运行的原理,内存、硬盘等各种硬件如何协调合作;
  • 操作系统:支撑后端框架的系统,具体做了哪些操作;
  • 编译原理:对于 Java 、C++ 这类高级语言,如何经过编译,转换为汇编语言以及二进制文件;
  • 计算机网络:计算机与计算机之间如何进行通信。

从本小节开始,我们会开始学习计算机网络相关的面试题目,并且在熟悉题目的同时,掌握计算机网络的基本知识框架。

2. 计算机网络如何分层

面试官提问: 你了解计算机网络的分层模型吗?其中每一层有哪些常见的协议?

题目解析: 这个题目需要拆分为两个关键点分析:

(1)计算机网络是如何分层的?阐述 OSI 七层协议和通用五层协议的区别。
(2)分层后的每一层支持哪些协议?主要会涉及到后端开发过程中常用的协议。

2.1 分层模型总览

计算机网络协议

首先,我们都知道最基础的分层协议是计算机网络 OSI(Open System Interconnection)体系。OSI 模型如上图(a)所示,网络结构被拆分为 7 层,自顶向下分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。但是 OSI 模型是一种概念模型,虽然理论比较完整,并不实用。

TCP/IP 体系如上图(c)所示,包含了应用层、传输层、网络层以及网络接口层,不过我们一般关注上面三层的内容,最下层及网络接口层没有实质性的协议。TCP/IP 体系分层就是我们实际应用中的网络协议。

作为 OSI 七层协议和 TCP/IP 四层协议的折中,还有一种是五层协议的体系,往往是面试中考察的重点。

五层协议,如上图中(b)所示,自顶向下分为应用层、传输层、网络层、数据链路层以及物理层,下面我们将详细阐述每层的作用以及代表协议。

2.2 分层定义以及常见协议

在画出了计算机网络的分层模型之后,我们还需要向面试官解释每一层的定义以及介绍常见的协议。

2.2.1 应用层

应用层(Application Layer)是 5 层协议的顶层,顾名思义,应用层的作用是通过操作系统中应用进程(例如电子邮件、浏览器文件传输)提供网络交互。

应用层最常被问到的是 HTTP 协议和 DNS 域名解析协议(在之后的小节我们会详细讲解相关题目),其次还有一些后端开发过程中可能会接触的协议,例如支持文件传输的 FTP 协议(例如需要从 Windows 开发机传输文件到 Linux 服务器时使用),以及支持电子邮件的 SMTP 协议(例如需要开发电子邮件读写的相关爬虫时需要开放邮箱的 SMTP 协议)。

2.2.2 传输层

传输层(Transport Layer)主要是为了实现端口到端口(port to port)的通信,计算机的不同进程都会被分配不同的端口,例如域名默认的 80 端口。从接收和发送信息的角度可以分为两大功能:

  • 复用:把操作系统的多个进程利用一个传输层接口发送信息;
  • 分用:把收到的信息利用传输层接口分发到操作系统的不同进程。

传输层涉及到两个常见的协议,几乎是面试必考协议:

  • 传输控制协议(TCP,Transmission Control Protocol):特点是面向连接,基于报文段传输,能够保证消息可靠交付的协议;
  • 用户数据包协议(UDP,User Datagram Protocol):特点是无连接,基于用户数据报传输,不保证消息可靠交付,只尽 "最大努力交付"。

2.2.3 网络层

计算机之间的通信可以分为位于同一个子网络(也就是局域网,Local Area Network)和位于不同的子网络(广域网,Wide Area Network),网络层协议解决的问题就是如何判断两台计算机是否属于同一个子网络中。

  • 网络层最常涉及的协议是 IP 协议 ,就是 TCP/IP 协议族中的 IP 网络协议,可见其重要性。

  • 此外,还有和 IP 协议相关的 ARP(Address Resolution Protocol,地址解析协议),以太网的数据传输最直接依赖的是 MAC 地址,ARP 协议的作用就是将 IP 地址转换为 MAC 地址。

2.2.4 数据链路层

数据链路层(Data-Link Layer)位于物理层和网络层之间,对于两个不同主机之间的数据传输,可能会经过多个路由器中转,中间的这条链路就是我们关注的重点,我们把两个主机抽象为两个点,链路层协议解决的问题就是 "点对点" 的数据传输。

数据链路层将网络层交付的 IP 数据包封装成帧(Frame),其中每一帧包括了数据以及必要的控制信息(比如同步信息、寻址信息、差错控制信息),这种设计方案非常类似 TCP 协议中的控制位(由此也能看出计算机网络设计的互通性)。如果通过差错控制信息校验出了错误,那么就会在本层丢弃这个帧,纠正错误是通过网络层的 TCP 协议完成。

PPP 协议(Point to Point Protocol):在两个点之间传输数据包的协议,因为本层涉及的协议在面试中考察甚少,基本可以只做简单了解。

2.2.5 物理层

物理层(Physical Layer)是 5 层协议模型中最底层的协议,就是通过物理手段(例如网线,电缆)将计算机连接起来,提供信息传输的物理媒介,数据由 0 和 1 二进制信号构成,传输单元是比特位。因为关于物理层的研究更偏向于通信相关的原理,我们只需要了解本层的定义即可。

3. 小结

本节给大家讲解了掌握计算机底层知识的重要性,以及对计算机网络 OSI 协议模型和五层协议模型进行了拆分讲解,主要关注点在于应用层以及传输层的相关协议。