目录

一、网络的发展历史

1.1 计算机独立运行阶段(1940 ~ 1960)

1.2 计算机批处理阶段(1950 ~ 1960)

1.3 多用户分时操作系统(1960)

1.4 计算机之间开始通信(1960后期)

1.5 计算机网络诞生:ARPANET

1.6 局域网阶段(1970)

1.7 互联网形成(1980)

1.8 Web 时代(1990)

二、网络协议

2.1 初始协议

2.2 协议分层

OSI 七层模型

TCP/IP 五层(四层)模型

2.3 再识协议

为什么要有 TCP/IP 协议

什么是 TCP/IP 协议?

TCP/IP 协议与操作系统的关系

三、网络数据传输的基本流程

3.1 局域网网络传输流程(以太网为例)

认识 MAC 地址

Linux 下查看 MAC 地址

Windows 下查看 MAC 地址

局域网通信原理

局域网通信过程

为什么被叫做网络协议栈?

3.2 跨局域网传输流程(互联网)

IP 地址的作用

IP 地址的两种主流版本

1. IPv4 地址

2. IPv6 地址

跨局域网传输的过程


一、网络的发展历史

1.1 计算机独立运行阶段(1940 ~ 1960)

在早期计算机诞生时,计算机之间没有任何链接,每台计算机都是一个独立的信息处理系统。

例如:ENIAC、大型计算机

科学家通过打孔纸带、打孔卡片、控制面板输入程序和数据,计算机计算完成后,输出结果,科学家取走结果。

此时,计算机之间是没有协作关系的。

1.2 计算机批处理阶段(1950 ~ 1960)

随着计算机数量增加:

问题出现:一台计算机只能一个任务一个任务运行,效率太低。

于是出现:批处理系统

科学家提交:程序1、程序2、程序3等等

操作系统统一安排:将任务放到任务队列中按照特定的顺序依次处理。

但是:计算机仍然是孤立的。

计算机之间数据交换方式,主要依靠:磁盘、磁带、人工搬运

计算机A

  ↓

磁带

  ↓

计算机B读取

数据传递的过程是由人工来传递的,效率依旧很低。

1.3 多用户分时操作系统(1960)

随着大型机发展:

人们发现:一台昂贵的计算机,如果多人共享,会更划算。

于是出现:分时系统

一台大型机:

             主机

              |
    ---------------------
    |         |         |
  终端1     终端2     终端3

用户通过终端连接主机。

注意:这里还不是网络。

因为:终端本身没有计算能力,终端只能远程操作一台计算机。

1.4 计算机之间开始通信(1960后期)

随着计算机越来越多:

新的需求:

不同计算机之间能不能直接交换数据?

例如:

计算机A

保存实验数据


计算机B

需要访问这些数据

如果一直靠人工来传递数据,效率太低。

于是出现:计算机互联思想

目标:让计算机 A 和计算机 B 之间能够直接通信。

1.5 计算机网络诞生:ARPANET

美国为了实现:多台计算机之间可靠通信

建立:ARPANET

了解:ARPANET(高级研究计划局网络)是美国于1969年启动的早期分组交换计算机网络,由美国国防部高级研究计划局(ARPA,后称DARPA)资助建设。它验证了大规模分组交换联网的可行性,并成为现代互联网技术与协议发展的重要实验平台,对全球计算机网络的发展产生了深远影响。

第一次:计算机真正连接起来

结构:

计算机A
    |
  网络节点
    |
  网络节点
    |
计算机B

核心思想:分组交换

数据不再整体发送:

比如:Hello World

拆成:包1 Hello  包2 World

每个包独立寻找路径,通过某种算法来保证数据传递的正确性。

1.6 局域网阶段(1970)

ARPANET解决:远距离计算机通信

此时ARPANET主要是通过有线通信线路传输电信号(电话路线)来实现计算机之间通过通信线路进行远距离通信,为现代互联网奠定基础。

但是全球各个企业、实验室等内部还有需求:实现办公室里的计算机互联。

于是:局域网 LAN(Local Area Network) 出现

例如:

        服务器

           |
      +---------+
      | 交换机 |
      +---------+

    /    |    \
 PC1   PC2   PC3

目前代表技术:以太网、令牌环网、无线 LAN

1.7 互联网形成(1980)

此时:世界上存在很多局域网

问题出现:不同局域网之间不能通信

于是提出:网络之间的网络

局域网A
    |
    |
  路由器
    |
    |
局域网B

核心:TCP/IP 协议

1983年:ARPANET 正式采用 TCP/IP 协议,互联网真正形成。

1.8 Web 时代(1990)

互联网早期:主要服务是科研、文件传输、邮件

普通人难以使用。

于是1990年:WWW出现

互联网变成:

用户
 |
浏览器
 |
网站服务器
 |
数据库

开始进入大众时代。

二、网络协议

2.1 初始协议

协议就是一种约定,在计算机中:通信双方为了让数据能够被正确传输和理解,而共同制定的一套规则。协议的优点:快速形成共识,降低通信成本

例如:

在革命时期,革命队伍的指挥官与士兵商量好,各个手势代表什么含义以及各个信号代表什么含义,等到晚上夜袭敌军的时候,为了不让敌人发现,指挥官们用不同手势来决定各个队伍的战术。

这就是一种协议。想必细心的你,肯定能发现协议在我们生活中处处可见。

在计算机中,计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示二进制01这样的信息。要想传递各种不同的信息,就需要通信双方约定好数据的格式、传输、识别、处理等。所以在计算机中,协议是必然存在的。

而计算机通信,不仅要在局部实现通信,也要在全球各地实现通信。且计算机生产厂商很多,计算机操作系统很多,相关计算机网络硬件设备(网卡、交换机、路由器)很多,要想实现全球化互联网时代,这就需要有人站出来,约定一个共同的标准,这就是网络协议

ISO(国际标准化组织):ISO 是由多个国家的标准化团体组成的国际组织,它在OSI(open system interconnection,开发系统互连)模型方面的工作尤为著名。OSI 模型定义了网络通信的七层协议结构,尽管在实际应用中,TCP/IP 协议更为普遍,但 OSI 模型在学术和理论研究中占有重要地位。

2.2 协议分层

协议分层的好处:为了更好地模块化,解耦合,便于维护和提升

例如:

我们写一个 C 语言程序的时候,将一个大问题,拆分成多个子问题,逐步解决一个子问题,将解决子问题的代码,以一个模块来完成,那么当程序出现问题的时候,就能快速定位某一个模块。当我们提升某个功能的时候,也能快速定位某个模块,来实现新的功能,对其他的模块影响程度很低。

OSI 七层模型

OSI 七层网络模型称为开发系统互联模型,是IOS提出的一个标准。它把网络从逻辑上分为了七层,每一层都有相关、相对应的物理设备。比如:网卡、交换机、路由器。

OSI 七层模型是一种框架性的设计方法,其主要功能是帮助不同类型的主机实现数据交互。

它最大的优点是将服务、接口和协议这三个概念明确地区分,通过七个层次化的结构模型使不同的系统不同的网络之间实现数据交互。

在网络角度,ISO 制定的协议 OSI 七层模型非常完善,但是在实际开发过程中,会话层、表示层是不可能接入到操作系统的,所以在实践中,最终落地的是 五层模型。其中最出名的是 TCP/IP 五层模型。

TCP/IP 五层(四层)模型

TCP/IP 是一组协议的代名词,它不仅包含 TCP/IP 协议,还包含其他协议,统称为 TCP/IP 协议。

物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞线),早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤、现在WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

数据链路层:负责设备之间数据帧的传送和识别。例如网卡设备的驱动、帧同步、冲突检测、数据差错校验等工作。有以太网、令牌环网、无线 LAN 等标准。交换机工作在数据链路层。

网络层:负责地址的管理和路由器的选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路(中转站:路由器)。路由器工作在网络层。

传输层:负责两台主机之间的数据传输。如 TCP(传输控制协议)能够确保数据安全地从源主机发送到目标主机。

应用层:负责应用程序间的交互。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)。网络编程主要是在应用层。

在软件方面上,物理层考虑较少,因此 TCP/IP 也被称为四层模型。

2.3 再识协议

为什么要有 TCP/IP 协议

根据冯诺依曼体系结构得知,一台计算机至少要包含:输入设备、内存、CPU、输出设备。而数据在计算中的流动本质就是数据在各个物理设备间进行拷贝。那么让数据能够能被正确的输入、读取、处理、输出,CPU 与内存数据交互,内存与外设数据交互也必然存在协议。而这些协议都在本地主机各自的硬件中,它们通过线路发送高低电流来进行数据交互。

那我们可以想象以下,假如这个线路能被无线延长,是不是就达到了远距离通信。可现实是线路不可能无限延长啊。其中网络通信最大的痛点就是主机之间变远了。那么就会产生新的问题,这些问题必然要被解决才能实现远距离通信,所以就会产生新的协议,其中 TCP/IP 协议是目前最好的协议。

设想一下:两台主机变远了,会产生什么问题?

1. 两台主机不再采用线路来完成数据交互,那采用什么?(这一点涉及物理层,我们不深入讨论)

采用光电信号的波形图等

2. 怎么对数据进行保护?(因为数据由于传输距离的边长,可能造成丢失)

3. 怎么定位目标主机地址?(世界上这么多主机,这么定位并找到目标主机)

4. 将数据发送给目标主机,可是不能直接发到,先发给谁?(理解:发送给目标主机 == 长期计划,先发给谁 == 短期计划,实现长期计划,肯定要将长期计划划分,从而实现多个短期计划)

5. 目标主机收到数据后,怎么对数据做处理?(如何将数据交互到用户)

所以,为什么要有 TCP/IP 协议?

因为主机之间实现长距离通信产生了许多问题,这些问题需要被解决。

什么是 TCP/IP 协议?

TCP/IP 协议本质就是一种解决方案。

以上可知,TCP/IP 协议是能分层的,为什么能分层呢?是因为问题本身能被拆分而解决。

TCP/IP 协议与操作系统的关系

怎么对数据进行保护 ---- 传输层

怎么定位目标地址 ---- 网络层

将数据发送给目标主机,可是不能直接发到,先发给谁 ---- 数据链路层

目标主机收到数据后,怎么对数据做处理 ---- 应用层

其中对于主机上面安装的操作系统不同,但是所有操作系统的网络协议栈必须按照协议进行相同的实现,这就是为什么不同的主机,可以互相通信的秘密。

如果你学过操作系统,很容易就能得出一个结论:操作系统中存在这么多协议,那协议肯定要被管理起来,如何被管理呢? 先描述再组织。

其中 OS 内核代码一般是用 C/C++ 语言写的,那对于协议的理解就更简单了,协议本质就是一个结构体,不同的主机之间能够通信的原因就是它们都能识别该结构体,并做出对应的处理。

因为协议栈是分层的,所以对于每层都有协议,同层之间双方互相认识对方的协议。

三、网络数据传输的基本流程

3.1 局域网网络传输流程(以太网为例)

两台主机在同一个局域网内,是否能够直接通信?

能,不知道大家小时候有没有玩过一些联机游戏(如:我的世界),我和朋友连的是同一个路由器,但有时候会出现没有网络的情况,其中我朋友在我的世界开个局域网联机,我的电脑依旧能看到他的房间。所以说在同一个局域网内,是能够通信的。接下来让我们搞清楚局域网的通信原理。

认识 MAC 地址

MAC 地址,全称 Media Access Control Address(媒体访问控制地址),也叫物理地址、硬件地址、以太网地址。它是网络设备(网卡、蓝牙模块等)在出厂时被烧录在硬件芯片上的全球唯一标识符

MAC 地址由 48 为二进制数(6 字节)构成,通常用 12 位十六进制数表示:

格式:XX : XX : XX : XX : XX : XX 

示例:00 : 1A : 2B : 3C : 4D : 5E

           00 - 16 - EA - AE - CD - DC

前 24 位(前 3 字节)作用:OUI(组织唯一标识符),代表厂商(由 IEEE 组织统一分配给硬件制造商) 

后 24 位(后 3 字节)作用:设备序列号,区分厂商的不同网卡(厂商自行分配,保证唯一性)

Linux 下查看 MAC 地址

bash:
ip link show
输出示例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    link/ether 08:00:27:a1:b2:c3 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    link/ether dc:a6:32:5e:7f:8d brd ff:ff:ff:ff:ff:ff

关注 link/ether 后面的就是 MAC 地址

Windows 下查看 MAC 地址

cmd:
ipconfig /all
输出示例:
以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Intel(R) Ethernet Connection
   物理地址. . . . . . . . . . . . . : 08-00-27-A1-B2-C3
   DHCP 已启用 . . . . . . . . . . . : 是

关注 物理地址 那一行(Windows 用 - 分隔,Linux 用 : )

局域网通信原理

在以太网中,任何时刻只允许一台主机向网络中发送数据,而其他主机都能收到该数据,只不过其他主机根据 MAC 地址判断,直接将它丢弃了。其中如果其他主机不跟据 MAC 地址进行判断,直接接受该数据,这个过程被称为抓包。(需要在网卡中设置)

如果有多台主机同时发送,会存在数据干扰,被称为数据碰撞。

所有发送数据的主机要进行碰撞检测和碰撞避免。

在没有交换机的情况下,一个以太网就是一个碰撞域。

在这里可以想象,以太网 ---- 临界区,访问以太网 ---- 访问临界区进而访问临界资源 碰撞检测和碰撞避免 ---- 实现互斥的算法

局域网通信过程

报头:每层协议对应的结构体字段

除了报头,剩下的叫做有效载荷

报文 = 报头 + 有效载荷

不同的协议层对报文有着不同的称谓,在传输层叫做数据段,在网络层叫做数据报,在数据链路层叫做数据帧。

用户发送的数据通过网络协议栈发送到网络上,其中每层协议都要加上一个报头,这个过程称为封装。

数据帧发送到传输介质上,到达目的主机后每层协议再剥掉相应的报头,根据报头的上层“协议字段”将数据交给对应的上层协议处理,这个过程称为解包和分用。

为什么被叫做网络协议栈?

仔细思考一下,封装的过程 ---- 入栈,解包和分用的过程 ---- 出栈

从现在开始,对于任何要学的协议,都要在宏观上建立这样的认识:

要学习的协议,是如何做到解包的?只有理解解包,封包也能理解

要学习的协议,是如何做到将自己的有效载荷,交付给上层协议的?

其中:局域网通信的本质就是两台主机通过 MAC 地址识别,对报文进行封装和解包分用的过程。

3.2 跨局域网传输流程(互联网)

IP 地址的作用

在上一节中,我们可知在局域网里靠 MAC 地址找到同一局域网内的另一台主机,但如果要跨局域网、跨城市甚至跨国进行数据交互,只靠 MAC 地址就不可以了,因为各个局域网中通信协议并不相同,可能无法做到数据交互,那么就必须产生一个新的标识来用来保证全球互联网的通信。

IP地址就是网络世界中“详细的门牌号”,它的核心作用是给互联网上每一台联网设备分配一个唯一的身份标识,让跨网络的数据能够精准找到目标设备。

IP 地址的两种主流版本

1. IPv4 地址

这是我们用来几十年的主流版本,它由 32 位二进制数组成,通常将其拆成 4 段 8 位二进制,将其转化为十进制显示,例如:192.168.1.1。它的总地址量大约 43 亿个,早在多年前就已经全部分配完毕(目前采用 NAT 地址转换技术来解决)

NAT地址转换技术:就是我们常说的网络地址转换,最典型的就是家用路由器的 NAT 功能:将大量内网私网IP映射到少量公网IPv4地址上,让成百上千台内网设备共享同一个公网IP访问互联网。运营商侧还部署了运营商级NAT(CGN),进一步在骨干网层面复用公网IPv4地址,大幅降低对公网IPv4的需求量。

2. IPv6 地址

为了解决 IPv4 地址不够用的问题而退出的下一代 IP 协议,由 128 位二进制组成,格式是 8 组用冒号分隔的十六进制数,比如 2409 : 8a10: xxxx : xxxx ... 。它的地址可以看作无限的。

跨局域网传输的过程

IP 地址在整个路由过程中,一直不变

MAC 地址一直在改变

目的 IP 是一种长远目标,MAC 是下一阶段目标,目的 IP 是路由路径选择的重要依据,MAC 地址是局域网转发给路由器的重要依据

IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异

跨局域网传输的本质就是两台主机根据 IP 地址通过路由器来不断规划 MAC 地址的走向,进而递达目标 IP 地址的过程,也就是对数据帧不断封装、解包和分用的过程。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐