引言

欢迎来到网络世界,《小白也能看懂的网络基础》系列文章会从零开始帮助你构建网络的基础知识。如果你完全没有接触过网络相关的内容,那我们是一样的,在学习过程中我们肯定遇到了相同的问题!写下这些文章一方面要记录自己的学习历程,另一方面也希望帮到同样想要学习网络基础的小伙伴。

文章的部分内容与素材是我从 YouTube 频道 Network Direction 发布的系列视频学习和搜集过来的,翻译不易,部分内容可能无法做到尽善尽美,甚至可能会有部分瑕疵,我会尽力让文章内容通俗易懂,覆盖全面。若各位小伙伴发现任何问题,希望能够留言或私信告诉我,在下不胜感激!当然,我也会在第一时间进行更正。

在往后的每一篇文章中,我都会把看到文章的小伙伴当成是完全没有网络经验的小白,我的目标是和零基础小白一起建立坚实的网络基础,网络大神请略过此系列文章。

让我们开始网络之旅吧!

一、回顾OSI模型

在之前的章节,我们已经将结果「OSI模型」的工作原理,相信大家还有印象,如果你忘记了具体的细节,可以回去翻看文章《小白也能看懂的网络基础 03 | OSI 模型是如何工作的》。

但,OSI模型并不是唯一的参考模型,现如今「TCP/IP模型」的流行程度要远高于OSI模型,在本章节,我们会学习「TCP/IP模型」,并了解它再网络中的具体使用细节。

OSI 与 TCP/IP

1.OSI 模型

OSI模型由七层架构构成,每一层都为其下一层提供帮助,最终得以实现不同设备间的通信,这七层分别是「应用层」「表示层」「会话层」「传输层」「网络层」「数据链路层」「物理层」。

OSI 模型

「OSI模型」,其实就是一种层次关系,它描述了网络硬件和软件之间如何协同工作,它的目的,是能够给各个软硬件生产厂商一个标准,让其按照一套规则进行软硬件的生产与维护工作,例如:线缆应该符合什么标准?接口应该符合什么要求?软件应该怎样设计?最终如何实现与其他层的对接……等等诸如此类。

然而事实就是,OSI模型已经过时,但它对于网络各个层次构建的关系解释的非常清晰,因此,我们现在通常拿OSI模型作为学习网络架构的重要一环。既然它已过时,那现在我们用的最多的是什么模型呢?那就是我们接下来要讲的「TCP/IP模型」

二、TCP/IP模型

1.模型诞生

TCP/IP模型最初由美国国防部研发,后来一些大学和其他的机构也竞相加入其中,使其得到快速成长,因其自身特点而导致应用更加广泛,渐渐地,它取代了OSI模型的地位。成为现在最主流的通信模型,我们常用的「TCP」「UDP」「IP」等都与该框架保持一致。

TCP/IP模型能够如此成功,与他的其中一个特点脱不了关系,那就是它能友好的支持现在的一些协议,例如「以太网协议」,如果想要详细的查看协议内容,可以参考「RFC文档」,该文档我们在《小白也能看懂的网络基础 05 | IP地址深度学习》这一章有所提及。

RFC1122

它是一个专业性、技术性非常强的文档,内容都是与协议相关的,包含概念、工作原理等详细信息。甚至有一些协议已经存在数十年,并且到现在仍然在使用的元老级协议。各大厂商都是通过该文档来规范自己的软硬件开发标准的。

所以,我们可以称RFC文档就是一系列的标准文档。1989年发布的与TCP/IP模型相关的文档是最原始的「RFC1122」,感兴趣的小伙伴可以深入研究一下。

2.TCP/IP模型分类

通过下图我们不难发现,TCP/IP模型有两种,中间的是TCP/IP模型最原始的模型,而右侧的是目前我们所使用的最新的最流行的TCP/IP模型。

2.1 TCP/IP原始模型

原始TCP/IP模型被划分成了四层,而且这四层主要对「网络层」「数据链路层」「物理层」做了调整,我们可以在RFC1122中看到详细的细节,后文会做出详细解释。

2.2 TCP/IP最新模型

应用层的改变

当前的TCP/IP模型的神奇之处在于,它与OSI模型紧密结合,我们可以看到,TCP/IP模型把OSI模型的前三层合并为同一层,统称为「应用层」,究其原因,那就是OSI模型的前三层本就是围绕应用程序的,所以这样的设计使得模型更加简单。

3.层级划分

3.1 上半部分

我们把这些模型都从中间进行一下划分,上半部分是应用程序及其信息处理过程,在应用层,我们主要讨论的就是包括HTTP协议(基于Web浏览)、IMTP & IMAP(基于邮件传递)以及FTP(用于文件传输)等等,这些应用程序会创建进程,在维持进程通信的同时侦听特定的端口。

这些进程的端口,都是使用传输层的TCP协议和UDP协议来实现工作的,后面我们会详细讲解「TCP协议」和「UDP协议」。

3.2 下半部分

下半部分着重于将数据从一台主机传输到另一台主机,例如网络层(Network)使用Internet协议或IP协议。

网络层

而数据链路层和物理层将用于将数据从一台设备传递到另一台设备,是跨越以太网中交换机、接入点、路由器和其他以太网中网络设备的一个普遍协议。

数据链路层 & 物理层

在最新的TCP/IP模型中,我们可以看到它将原始链路层分解为数据链路层和物理层两层。

这是因为在过去,数据链路和物理层没有太多不同的物理链接选项,而随着时代的发展,我们现在有以太网、Wi-Fi技术、光纤、电缆等不同的物理连接选项,从而导致数据链路层和物理层再次划分开来。

4.案例演示

下面,我们根据一个案例来演示TCP/IP模型的具体工作细节,看看新模型是如何逐层工作的,从最顶部的应用层开始,这里要注意,应用层并不是用于定义一个软件该如何运行,这是软件开发工程师的工作。

应用层主要用于描述应用程序该如何使用网络,这里,我们使用HTTP协议来进行演示(因为HTTP协议我们已经足够熟悉~)

4.1 应用层

从应用层开始,这个应用对应的就是客户端上的浏览器和服务器端上的Web服务器,HTTP是如何应用协议进行工作的?

【客户端】与【服务器端】的通信

我们先大致了解一下整体的工作流程

  1. 首先,我们想要从浏览器上看到某个网站的网页,那就需要在浏览器上输入对应网站的网址,例如(https://sspai.com/),然后按下回车,就完成了一个HTTP请求。
  2. 这里需要注意的是,我们的请求地址是否符合HTTP协议规则的要求,否则,我们无法准确的请求到相对应的网站。
  3. 此时,TCP/IP模型会开始工作,和OSI模型一样,这个请求会逐层进行传递,并在各层进行相对应的封装处理。
  4. 当请求走到最底层的物理层,便会通过物理链路传递到目标主机,并实现数据包的逐级解封。

4.2 传输层

传输层,则是在应用程序之间创建并维护对话,使得这一个请求不会中断。TCP协议和UDP协议就是在这里工作的,下个章节展开讲解TCP和UDP,这层的工作只是简单的使用他们的端口号来跟踪会话。

TCP请求标头与源目端口

例如Web服务器拥有一个进程侦听端口80,此时,客户端准备它的HTTP请求,并同时添加一个「TCP请求标头」,观察上图中间部分的「HTTP Data GET http://webserver.com」,我们在OSI模型中同样也会用到类似的请求标头,大家是否还记得?(忘记点这

传输层

4.2.1 客户端做了什么

这个TCP请求标头除了包含请求方式(GET)、请求地址(http://webserver.com)、还会把源端口(Source Port:7268)以及目标端口(Destination Port:80)存储起来,此时,我们将拼装好的内容称为「数据段(Data Segment)」

4.2.2 服务器端做了什么

当服务器收到这个数据段请求,会做出相应的响应,比如,准备好客户端正在请求的网页,然后,把源目端口位置转换即源端口(Source Port:80),目标端口(Destination Port:7268),这么做是为了将网页信息准确的响应给客户端。

4.2.3 问题

  1. 此时,如果我们的浏览器打开多个标签页,想要访问多个服务器上的网站是如何实现的呢?

4.3 网络层

端口号与IP地址的组合,使得我们的操作系统可以有多个会话,当传输层的任务完成之后,数据段会继续向后传递到网络层。

在网络层中,根据数据量的大小,来决定数据段是否会被分解为可管理的「数据块」,并且以单个或多个「数据包」的形式进行传递。

网络层

4.3.1 客户端做了什么

网络层的主要目的是确保来自一台主机的数据能够找到通往另一台主机的路径,因此通过观察图片,我们可以看到,在原有的数据段基础上又封装了源目IP地址,此时,我们称其为「数据包(Data Packet)」。

从一台主机到另一台主机的过程中,可能会跨越许多网络,数据包需要通过路由器从一个网络传递到另一个网络,这也是为什么将其称之为路由的原因。

4.3.2 服务器端做了什么

当数据包到达服务器主机时,它会剥去IP标头并将被分解的数据包合并为原始数据段,接着回传给传输层。

当然,网络层还有其他比较常用的协议,例如:ICMP(Internet 控制报文协议),但是IP地址目前已经可以解决我们的问题,因此对于其他协议,我们后面章节再细聊。

4.3.3 问题

  1. 我们在两个不同的网络上有两个主机,而他们之间要进行通信,请问,该使用什么设备来实现。

4.4 数据链路层

数据链路层,负责在单个网段或本地局域网LAN中传输流量,在TCP/IP术语中,这意味着在单个子网通用协议中进行传送,最常见的协议就是以太网中的「点对点协议」,所以我们就拿点对点协议来举例。

此时,我们不得不提「MAC地址」了,接入网络中的每个网卡,都会被烙印上一个伴随其终生的地址,那就是MAC地址,在之前的章节中,我们讲到过它的概念,因此不再过多赘述。

数据链路层

数据链路层,会给每一个数据包封装源目MAC地址,就像我们之前讲到过,如果两台设备位于同一个子网中,它们之间的通信将非常简单粗暴,就是从一台主机到另一台主机;若它们位于不同的子网中,一台路由器就可以解决问题了。

被封装源目MAC地址】数据包此时有了新的名称,「数据帧(Data Frame)」

需要注意的是,路由器MAC地址,如果是跨越两个网段的请求,主机请求的目标MAC将会是路由器MAC地址,因为主机首先需要找到路由器,并让它帮我们做转发。

路由器MAC地址

当数据帧(Data Frame)到达路由器后,路由器通过查看IP标头中的目标IP来确定要发送到的位置,然后路由器将自己的MAC地址作为源MAC地址,然后设置好目标MAC,信息就可以准确无误的发送到目标设备了。

如果路由器中有多个路由器做转发,则会重复上述的步骤进行MAC地址的转换操作。直到数据最终到达目的地。

4.4.1 问题

  1. 数据在传输到以下各层时被称为什么?
    1. 传输层「TCP」
    2. 网络层「IP」
    3. 数据链路层「以太网」

4.5 物理层

数据经过上层封装,最终来到最底层的物理层,物理层主要负责「物理传输」和「数据接收」,在发送端进行物理传输,在接收端负责数据接收。有很多种方式可以进行物理层的数据传输,例如「无线电」和「光信号」。

物理层

通常情况下,数据会经过编码,并且在不同的介质上进行传输,例如,数据再发出时会经过「双绞线」也就是所谓的网线,当数据到达交换机时,可能会通过「光纤」传走,并最终得以到达目的地。

4.5.1 问题

  1. 原始HTTP请求,从应用层到达最底层的物理层,会进行几次封装,且每次会封装什么信息?具有什么含义?
  2. 在以下层中,会用到哪些常用协议?
    1. 以太网
    2. IP
    3. TCP

原作者:

作者的其他文章:

  1. 小白也能看懂的网络基础 01 | 什么是网络?
  2. 小白也能看懂的网络基础 02 | 连接设备
  3. 小白也能看懂的网络基础 03 | OSI 模型是如何工作的?
  4. 小白也能看懂的网络基础 04 | IP 地址是如何工作的?
  5. 小白也能看懂的网络基础 05 | IP地址深度学习
  6. 小白也能看懂的网络基础 06 | TCP/IP 模型是如何工作的?