【计算机网络】网络发展历程与网络模型

回顾一下前面几篇,Java基础、多线程、IO都介绍了一轮,现在终于轮到计算机网络这个老朋友了(绝对不是因为我马上要考计网借此复习的)

其实一开始我对计网这门课或者说这一系列知识的态度是,这玩意不就是应付考试的,,,背会了不就好了

但是当我真正开始做项目写程序,修bug部署服务器的时候发现,大意了,,,这玩意真得好好学一下的

所以我新开了这一系列博客,打算从头开始,一点一点把计网这套东西搞清除


一、网络发展历程

要知道,网络并不是一开始就长成这样可以"随时随地刷视频"的,简单来说,可以分成以下几个阶段:

单机时代->局域网时代->广域网时代->移动互联网时代

最早的时候,计算机是完全孤立的,一台计算机就像一座小岛,所有的程序和数据都在本地运行。用户想要计算机做什么,只需要面对这一台机器即可

这就是所谓的单机时代

但是很快,人们发现了一个问题,我的数据和程序只能在自己电脑上玩,别人的数据我看不到,我的数据别人也看不到,倘若几台计算机之间能够共享数据,效率岂不是会高很多?

于是,局域网出现了

在一个物理范围很小的区域内,通过网线或者交换机把多台计算机连在一起,这样大家就可以在这样一个小圈子里通信、共享资源

Arpanet:一种早期的计算机网络,是美国国防部高级研究计划局(ARPA)于1960年代末至1970年代初开发的。它是第一个实现分组交换数据的网络,也是互联网的前身

再往后,局域网已经不能满足大家的需求,我不光想和同一个办公室的人通信,我还想和外地、甚至外国的计算机通信

于是就有了广域网

广域网的本质其实就是把一个又一个的局域网连接起来,而当全球范围内的广域网逐渐连接成一个整体,就诞生了今天我们所熟知的Internet(因特网)

二、核心硬件设备

网络之所以能运转起来,离不开一些非常核心的硬件设备,其中最重要的几个就是:路由器交换机中继器

2.1 路由器

路由器最核心的工作其实只有一件事:转发数据包,并决定数据往哪条路走

在家里,路由器负责帮你组建一个小型局域网;在更大的网络中,路由器负责把不同的网络连接起来

换句话说,它更像是网络中的"导航"

2.2 交换机

相比之下,交换机的角色要简单得多

交换机可以理解为给网络扩接口的设备,交换机本身并不负责网络规划,也不关心数据最终要去哪里,它只是负责在同一个网络中让更多设备能够互相通信

而且,交换机还可以套娃使用,一个不用再接一个

2.3 中继器

计算机网络是由一个个节点组成的,不同节点之间使用光纤、电缆等介质传输信号,但是长距离的传输会导致信号失真。

此时就需要使用到中继器,它是一种信号增强装置,它能接收、放大并重传信号,多段由中继器连接起来的电缆段与一根单独的电缆没有什么区别(当然,存在使用中继器引入的部分延迟)

当然,网络中并不只有这三种设备,像防火墙、网桥、网关之类的也都各司其职,只不过在我们后续学习和编程过程中,真正经常会"打交道"的,还是路由器和交换机这两位老朋友,其他设备先混个脸熟即可,没必要一上来就钻太深

三、网络通信的基本要素

当我们真正开始讨论"通信"时,有三个概念是必须要明确的:IP地址、端口号、网络协议

3.1 IP地址

IP地址的作用非常直接,用来标识网络中一台设备的位置,它相当于网络世界中的"住址"

当数据在网络中传输时,至少要知道两件事

  1. 数据从哪里来
  2. 数据要到哪里去

这两个信息,就是通过IP地址来确定的

3.2 端口号

但仅有IP地址还不行,因为一台计算机上,往往还同时运行着多个程序,如果数据只知道"到这台机器",那么问题来了,到底该交给哪个程序?

这个时,端口号就派上用场了

IP地址负责定位到机器,端口号负责定位到程序

所以在网络编程中,我们可以通过IP+端口号来确定唯一一个网络通信的端点

3.3 网络协议

再进一步,我们会想到一个问题,就算数据送对了地方,程序是怎么知道这些数据是什么意思?

倘若AB两台机器通信,A说你给我发个1,B说I`m fine, thank you,这不就乱套了

所以,通信双方必须提前约定好规则,这个规则就是网络协议

网络协议本质上是通信双方对于"数据格式"和"解析方式"的约定

只要双方遵守同一套协议,就可以正确地理解彼此发送的数据

四、协议分层

我们在学习计网之前一定或多或少的都听说过"OSI"、"TCP/IP"之类的多层网络模型,那么协议为什么要分层呢?

这是因为网络通信涉及的事情非常多,从最底层的信号传输,到最上层的数据使用,每一层关注的问题都完全不同

如果把所有事情都塞进一个协议里,那结果只有一个:复杂、难维护、不可扩展。换言之,shi山

于是就有了一个非常经典的设计思想:分层

4.1 分层的本质思想

分层的核心目标是把复杂问题拆小,每一层只关注自己的职责;并且约定,上层只能调用下层提供的服务,不能跨层直接交互

这样一来,修改某一层的实现,不容易影响其他层,各层可以独立演进

总之,非常好!!

五、OSI七层网络模型

前面提到了网络分层模型,这时候就绕不开一个在计网课本中"出镜率极高"的老朋友------OSI 七层模型

但是这个模型本身设计存在缺陷,需要先说明一点,这里说 OSI 有问题,并不是在否定它的历史意义,而是站在今天回头看,它确实更像一个"理想化的分层模型",而不是一个真正被工程实践验证过的方案

这个模型诞生的时候,互联网还远没有今天这么成熟,它的设计思路本身偏向于:先把网络通信这件事在逻辑上拆清楚,再尝试推动大家按照这个模型去实现

听起来没什么问题,但现实是,当OSI还在制定标准、反复讨论每一层该干什么时,TCP/IP已经在真实网络中跑起来了,而且还跑的不错

这就导致一个非常现实的结果:OSI模型在理论上非常完美,但在实践中严重缺乏落地土壤。正因为如此,几乎找不到一个严格按照OSI七层完整实现的网络系统,它更多是被用来"解释网络是怎么回事",而不是"指导网络该怎么实现"

六、TCP/IP网络模型

和 OSI 七层相比,TCP/IP 模型显得"朴素"得多,它并不追求把每一件事都拆得非常细,而是更关注一件事:这套东西,能不能在真实网络里稳定地跑起来?

答案显然是肯定的,不然今天我也写不了这篇博客了【狗头】

下文提到的具体协议这里先进行一个简要介绍,后续有机会另开一篇详细介绍一下,嘿嘿

6.1 TCP/IP的四层结构

TCP/IP 模型一共分为四层(有些教材会叫五层,本质一致):

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层(或物理层+数据链路层)

第一眼看上去,层数少了很多,但实际上并不是"功能减少了",而是把OSI中那些存在感不强、边界模糊的层合并了

这点,反而非常符合工程直觉

6.2 应用层

如果你写过Java网络程序,那你对TCP/IP的第一感知,一定是从应用层开始的

HTTP、HTTPS、SMTP、DNS......包括你自己定义的各种私有协议,都属于应用层协议哦

这一层要做的事情也很直接,规定应用之间如何通信、数据长什么样、怎样解析

比如 HTTP 中会定义请求行、请求头、请求体等数据格式

这些东西,和底层怎么发包、怎么重传,其实没什么关系,但对程序来说却是核心

这一层对应的就是OSI模型中的应用层+表示层+会话层

6.3 传输层

这一层的核心任务只有一个:在两台主机的进程之间,提供端到端的数据传输服务

你熟悉的两个老朋友就在这里,TCP和UDP

TCP提供一种"我尽量保证你能收到"的通信方式,通过连接、确认、重传、流量控制、拥塞控制等机制实现

UDP则是比较直接,只负责发,不保证对端能否接受

也正是在这一层,端口号开始真正发挥作用,也就是使用IP+端口定位一个通信端点

6.4 网络层

再往下一层,就是网络层

这一层关心的问题只有一个:数据包该如何从一台主机送到另一台主机

网络层不关心数据内容是什么,是不是完整,有没有顺序,而是尽最大努力把数据包送到目标IP所在的网络

至于中间走哪条路、经过多少个路由器、会不会丢包,都是网络层要操心的事情

也正是在这里,"路由"这个概念才真正出现

6.5 网络接口层

最底层的网络接口层,这一层负责主要负责:

  • 数据如何在链路上传输
  • 使用什么介质传输(网线、光纤、无线)
  • MAC地址
  • 帧的封装与拆解

你可以把它理解为,把上层交下来的数据,真正变成电信号、光信号、无线信号发出去

OSI模型中的物理层和数据链路层就是在这里被合并的

FINISH!下篇我们来介绍一下一个数据包在网络中是如何被"层层封装"的

相关推荐
Caitlin_lee_10 小时前
计算机网络期末复习SCAU-第六章
运维·服务器·计算机网络
normanhere10 小时前
码头网络设计方案
网络
bkspiderx10 小时前
UDP打洞的核心依赖:NAT特性深度解析
网络·网络协议·udp·nat·udp打洞·nat特性
开开心心就好11 小时前
音频格式互转工具,支持Mp3ApeWavFlac互转
java·网络·c++·windows·qt·电脑·excel
上海云盾-小余11 小时前
im即时通讯被攻击使用游戏盾高防方案有效解决
网络·网络协议·web安全·游戏·金融·ddos
zyu6719 小时前
03-Docker存储和网络
网络·docker·容器
Arciab20 小时前
51单片机_LCD1602液晶显示
网络·嵌入式硬件·51单片机
DX_水位流量监测1 天前
大坝安全监测之渗流渗压位移监测设备技术解析
大数据·运维·服务器·网络·人工智能·安全
电商API&Tina1 天前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php