初识计算机网络

生活中熟悉又陌生的网络

在我刚开始了解算计网络之前,我一直认为计算机网络应该指的是:一台电脑连着网线,他可以通过操作系统上的各个软件访问网络上的资源 才叫网络。但是其实不是,作为一个 94 年出生的臭男人,其实在小的时候就已经接触到了网络了。那就是电视。

以前我家里的电视大概是这种(图片来自百度):

以前这台电视可贵了,3000 多块,可以想象在 1994 年的时候,是什么样的概念。

那么既然有电视,不可能是单机运行(其实他也运行不了什么)。那么 网络 在哪个地方出现了,那就是 有线电视台。家里的大人去电视台说我家要拉电视线,那边的工作人员就会过来,然后拉了一条线进家里,大概就是这种线(图片来自百度):

接上去,我们的电视就可以收看 56个 妇科广告的节目。

当然,现在这种线我们终于知道了,有个专业的名字,叫做 同轴电缆。这也我最早见到的 计算机网络7层 协议中的第一层 物理层 的连接线了。

那么后来,在我读小学的时候,家里装了电话机,那么这时候,又一条网络接入我家里来,而我们肯定知道,当我们的电话在通话的时候,别人如果想要连接进来的话,是实现不了的,会一直提示(宁波打的电话正在通话中…)

这种线长这个样子(图片来自百度):

那他现在也有个正经名字:双绞线缆

后来家里入了电脑,毕竟为了 玩游戏 嘛。印象深刻的就是又是拉电话的那个大叔,挎着个包进来我家门,然后在电话线那里插上一个类似于 一分二 的接口,一个接口接电话,另外一个接口则是接上 猫(英文名Modem,是一款调制解调器) 然后再把 的一个网线接口接上电脑,再在电脑上配置一波,然后跟我说以后电脑开机需要上网的话就需要先启动一下这个,然后点击 连接 才可以进行上网:

OK,等师傅走了以后,我就打开浏览器,输入 9744。com 进行快乐的网上冲浪了。

那么搁现在用专业名词讲,那就是 拨号连接,协议使用的是 PPPoE。怎么说呢,我们的运营商要收钱,要收钱就需要验证你现在要上网时的用户名和密码,那么就需要通过拨号软件将这些信息提供给运营商的 ISP服务器,然后后续我们的电脑将需要上传给服务器的数据通过 PPP协议 的编码方式进行编码(依赖 CPU,还会消耗计算机的性能),然后发送给 ISP服务器ISP服务器 是互联网中的一员,所以就可以将 IP数据包 发送出去从而提供互联网服务。

那么曾经那个在网上冲浪学习的 精壮少年 长大了,这时候网络已经发展到 光纤 时代,曾经的电话线 2m 的速度跟现在办卡送宽带的 300m 光纤已经没法比了,这时候的线(来自百度):

师傅调试的时候,用一个 手电筒 插到线的一头上,即可在楼下查找与其连通的另外一端。

光纤的原理粗糙的说,就是通过光的反射来传递数据,而这个牛逼的东西出自一个牛逼的华裔物理学家 —— 高锟。光速是目前所发现的自然界物体运动的最大速度,那么用他来传递数据速度肯定不用说的了。

计算机模型——OSI七层协议

分层预览

OK,上面聊了这么多我跟网络的往事,那么目的就是为了把 计算机网络基础 聊清楚,那么我们来看个熟悉又陌生的 osi七层模型,然后我们分层慢慢来说。

那其实这七层协议中,再结合上面的宝贵的 人生经历 中,我们通常看到的,只有上面的 应用层 和 下面的 物理层 我们可以看个基础。应用层这个不用说,就是应用嘛,QQ微信浏览器 等等就是我们的应用层了,而 物理层 则是上面提到的那些线和调节器(猫)。

我看了这个分层好几年了,没能理解,最近刚好终于理解了他存在的意义:这个分层只是一个 参考模型,他提供的是 应用数据电平 的转换模型,实际我们应用的并没有这么多层,而是把一些好几个都合并到一个层去了,也就是后面我们会说到的 TCP/IP协议。但是这个模型还是能够很好的帮我们理解我们日常操作的数据是怎么在 操作系统 中翻译并且传递到另外一个计算机去的。

分层的作用

鲁大爷曾经说过:计算机世界中的任何问题,没有什么是包一层解决不了的,如果有,那就包两层

所以现在你终于知道为什么包了 7层 了趴。

那首先我们从第 7 层开始阐述。

  1. 应用层:应用层就是我们熟悉的应用了,每一个应用都会有自己的协议,比如最简单的 HTTP协议Headerbody)这些是必要的,他在发送端就是将用户数据进行包装,而在接收端则需要将上一层的数据进行解包展现在界面上;
  2. 表示层:那么表示层是一层只为 应用层 以及 会话层 服务的分层,他负责将应用层上送过来的数据进行编码、加密、压缩等等操作,比如使用 UTF-8 编码将上面的信息进行编码,然后将包装以后的数据加上自己的 Header 转发给下一层的 会话层
  3. 会话层:他管理着连接何时开始打招呼,何时保持连接、断开连接以及发送数据的顺序,然后他将表示层传递过来的数据继续包一层自己的 Header 然后往下一层的 传输层 进行传递;
  4. 传输层:会话层已经对何时连接这些问题进行了管理,那么这一层是需要对数据的完整性进行检查的,两边的传输层会互相确认:“这个数据接收完整了吗?”,如果不完整,那么传输层将会对这个数据进行重发,继续包一层自己的 Header 进行传递给网络层;
  5. 网络层:这一层做的事情就跟数据无关了,而是跟目的地有关,就是找出目标服务器的地址,或者中转服务器的地址(相当于一个快递从北京过来广东,需要经过很多中转点),然后将数据包一层 Header 发出去,至于发出去的下一个中转站的位置,就有可能由接下去连接的路由器或者运营商的服务器进行转发了;
  6. 数据链路层:这个就是上面所说的一系列的 连接线(同轴电缆、双绞线、光纤线等等)
  7. 物理层:数据在我们熟知的生活介质中的表达方式,比如电平的正负极怎么表示机器码中的0和1,多少个正极连在一起就是一个整体等等

然后我们现在可以回过头来看看这个图了:

接收端接收到物理层的状态的时候,就需要逆向向上翻译,从而将信息展现在接收端的机器上(控制台啊屏幕啊什么的)

互联网的组成

那我们假想上面的 OSI七层协议 是两台计算机之间传递数据的方式,这时候镜头要拉远一点了,在广东的小男生是怎么访问到远在不知道哪个地方的学习网站的。

那么接下来就需要说三个问题:

  1. 数据传输过程中的可靠性;
  2. 数据怎么去目的地(IP地址);
  3. 宏观网络的构成(众多的转发器的连接方式)。

数据传输的可靠性

我们熟悉的 TCPUDP(这两个不属于七层的内容),区别就是有无连接:

数据的目的地

那么目前的解决方案就是:IP地址 + 端口号

IP地址规定了去到哪台计算机,而端口号则是在定位到某台计算机的情况下,将数据传输给某个应用进行处理。

地址必须具备唯一性(在一个网络内)

那么结合我们生活中遇到的问题来说,在同一个区域之内,地址是不允许重复的,要不然我们在寻找某个地址的时候就很容易出现迷惑:到底应该去哪一个。而这个也可以结合下面将要说的分层来确定唯一性。比方说:在珠海,金湾区有个地点叫做 湖心路口,而在 吉林大学珠海学院 里,也有一个 湖心路口,那么我们就需要在不同的场景之下定义他的唯一性:我去金湾区的湖心路口或者我去吉珠的湖心路口。

地址的分层

我们熟悉的 IPv4 地址是有 4 个部分组成的,比如 192.168.1.1 就是指定当前网络中的某台计算机,而前面的 几个部分 可以先简单粗略的认为是分区,比如 广东省广州市天河区 这样,那么数据在网络中进行转发的时候,就可以一层一层的传递到目标主机去。

宏观网络的构成

那么一台计算机(不仅仅指的是电脑)在实现访问世界上任何资源的时候,总是会或多或少具备这几个东西:网卡中继器网桥路由器

那么我们先来一个表总结一下这些元件,后面会指出代表 OSI模型 的哪些层,顺序是由 高层低层

设备 OSI模型层 简要作用
网卡 数据链路层、物理层 连接计算机和网络设备的中间设备
中继器 数据链路层、物理层 延长物理层网络的设备
网桥 网络层、数据链路层、物理层 连接两个网络的设备,根据MAC地址转发
路由器 网络层、数据链路层、物理层 可以根据IP地址转发
4-7 层交换机 可以跨越所有层 分析收发数据,进行特殊处理
网关 可以跨越所有层 翻译协议并转发数据

网卡

这个就没什么好说的了,每一次组装电脑,网卡都是必不可少的东西。他连接着我们的主板和网线,反正又是 套了一层,并且负责将线路中的物理信息翻译成我们的机器码,以供CPU和操作系统进行处理。

中继器

可以套在不同的传输介质中间进行翻译的器件,比如我们安装了光纤,那么我们就可以将家里普通网线的 0和1 两种不同的信号翻译成光信号,而他做的事情就是这个,就算我们传输数据的过程中,数据出现了错误,他也会一五一十的将其翻译并且传输出去。比如我们的 猫(Modem),也可以是无线电翻译成网络运营商的信号(比如无线路由器中的模块)

网桥

他可以将两个不同的网络端连接起来,比方说,我们在一个小区里边,一栋楼(老式,不高,网络端口不多的那种),那么一栋楼就可以归为一个局域网。然后比方说我们从 A栋 连接到 B栋,那么这时候就可以使用网桥的方式。

网桥也有自己的内存,他可以将接收到的网络数据储存起来,然后生成一个全新的数据发送给相连的另外一个网段。而有些网桥还可以 自学,他会学习 A网段 中有哪些网卡的 MAC地址(不一定是终端电脑),并且决定此时接收的数据包需不需要发送给隔壁的 B网段

路由器

路由器其实作用跟 网桥 差不了多少,但是唯一区别就是,路由器是根据 IP地址 进行终端寻找的,所以在 TCP/IP模型 中,经典的 OSI网络层 就变成了 IP地址

现在的路由器功能也很多,比如我家里的那个,可以连接 花生壳 还可以在通网络运营商中通过 IP 访问到我电脑上的资源等等。

4-7 层交换机

这个功能就很多了,可以负责所有层的数据,并且识别一些恶意请求,将合法请求传输到指定的服务器等功能。例如我们熟悉的 F5负载均衡 方案,就是可以在服务器之前假设这样的一层设备,用于流量之间的负载均衡。价格嘛,还是比较昂贵的。

所以我们现在编程过程中一般用软件来实现负载均衡这个功能。

网关

这个我们现在就很少见到了,但是我们的编程模型中就有 Spring-Cloud-Gateway 或者 Spring-Cloud-Zuul 这种网关框架,作用就是可以对我们的数据进行一些转发保护以及记录,也不在这里做重点。一般数据进来就是客户端与这个网关交互,至于网关怎么用请求数据做什么,包装啊什么的,然后调用后端隐藏的应用进行处理,用户是感知不到的。最后网关拿到返回数据的时候,又重新包装,返回给客户端。


说了这么多模型,那么有些 长得帅但憨憨 网友就要问了,你可以说一下小区的网络模型鸭:

把上面几个设备拼来拼去就行了呗,反正不同地区的模型内涵差不多但可能用的设备顺序方法又不一样。


现代网络协议 TCP/IP

聊了这么多基础性的东西,其实是我想聊 TCP/IP协议 的。那么是时候进行转换了。

TCP/IP协议 是由 IETF组织(The Internet Engineering Task Force,简称 IETF) 讨论制定的,他的过程更趋向于实用性和开放性,而且是基于邮件进行讨论,并且制定了一些规则来淘汰没有意义的讨论,所以当一些特性被写入规范的时候,都已经进行过深度的测试和实现的,所以可以说是先有程序,再制定规范的一种协议。

参考文档:

阮一峰——IETF:互联网精神的典范

而这个组织呢,会针对网络连接各个要素进行讨论,并且形成 RFC(Request For Comment),可以当成是一种会议记录,详细的记录了每一种协议(比如 TCP IP 等等)的内容、实现、以及运用的相关信息。所有人都可以查询,并且加入讨论。然后关于文档的管理方式也很 区块链:一旦这个文档形成加入 RFC,将不能对这个文档进行任意的修改,如果需要拓展修改,则需要生成新的 RFC 提交并且对旧的 RFC 标记作废。我们可以通过 这个网址 访问所有的 RFC 内容。

一个方案一般会经历以下的几个阶段:草案,提议,标准化。一个草案的有效期一般是 6个月,如果这个时间内还没有得出结果,那么这个草案将会被消除。而如果经过了充分的讨论,并且得到 IETE 主要成员的认可,那么即可编入 RFC文档。然后如果这个标准被众多的设备所应用,并且没有什么奇奇怪怪的问题,那么即可成为一种 标准。如果有问题,那么又要经过修订生成新的 RFC文档。而开山之作 TCP/IP 比较牛逼,他并没有经过这些过程,而是先在设备中使用了,然后被编入标准的。

关于 TCP/IP 的内容,放在下一篇继续聊。