前言

很多计算机网络的教程或课程,一开始就讲一堆术语与原理;

学习半天都还不知道有什么用,学一星期了也不清楚跟自己日常接触的网络有啥关系。

本文则是以字数少、通俗易懂为前提来科普整个网络方面的知识;

为各位阅读几百页的教材书或者观看几十集的网络课程时有一个基础的概念与体系,方便深入学习。

如果想深层次理解原理、进行网络搭建配置,可以去学习网络厂商的认证课程(例如华为HCIA、HCIP、HCIE)。

请不要过分纠结本文中的某段话,本身出于以上原则写的,所以部分地方描述的并不严谨。

请务必先看完全文,即使中途你有疑问。

从大家最熟悉的家庭网络开始介绍

一个家庭的网络从无到有,会经历这个过程

找运营商购买宽带套餐

运营商派宽带师傅上门安装

宽带师傅从户外通信电箱拉光纤到房间

拿出光猫接上光纤,配置光猫

家庭有无线路由器的,再通过网线连上光猫

设置好无线路由器的配置后

手机连上WiFi就可以上网,电脑通过网线连接无线路由器也可以上网了。

如果家中设备比较多,那么可以在无线路由器下再连接一个小型交换机

最终就是这样样子

图1——家庭网络架构

简单用文字介绍,那就是 运营商提供的链路——光猫——路由器——交换机——网络设备

接下来就简单介绍这些设备在网络中起到什么作用

光猫、或者说“猫”

这个设备的作用就是信号转换。比如将光纤中的光信号与网线中的电信号作互相转换。

这个设备英文名叫Modem,是 modulator(调制器)和 demodulator(解调器)的合成,也就是“调制解调器”。

早期大伙都音译叫做猫,于是”猫“这个叫法就这么一直流传下来了。

目前“猫”这个词所代指的设备很宽泛,不再单指调制解调器。

现在运营商提供的光猫都带调制解调器功能与路由器功能,有的甚至加上了无线WiFi的功能。(也就是集成了无线路由器的功能)

路由器

连接不同网络的“网关”,可以类比作不同国家之间的海关。

一般来说,一个网络中只配置一台路由器。

路由器主要负责”路由“功能,也就是给网络数据的传播做一个导航指路的作用。

交换机

一般交换机就是用来连接多台网络设备,使设备连接在一起。

同时可以理解为,交换机就是一个插排。

路由器/其他交换机传过来的’电‘只剩一个’插座口‘,接上交换机这个‘插排’后,就可以给多台网络设备同时’供电‘了。

以上都是以基础小白的概念以及家庭网络层面来介绍的,后续以公司网络架构为基础介绍数据包过程就会更为具体准确的讲解了

简单来说,数据包(要发送的信息)就是通过电脑主机形成、通过链路到达交换机、再用交换机转发到路由器、路由器再一路转发到目标电脑所在的局域网路由器、经过交换机到达目标电脑,由目标电脑解析数据包的内容。

在正式的网络中,就是一台路由器加数台交换机。

如果是规模比较大的网络,一般会考虑一个链路冗余、双机备份,避免某处线缆破损或者设备损坏导致大片设备无法上网。

这里贴一个网络拓扑图可以参考一下(与家庭网络相比最主要的区别就是将WIFI功能从路由器上剥离,使用专门的无线AP设备来实现)

强调一下,家用无线路由器是集成了WiFi、路由、交换三种功能的设备。在企业网络中,一般都是由专门的设备独立负责的(不使用家用无线路由器是出于性能考虑)

图2——企业网络架构

网络信息

本章介绍网络通信时所需要的信息,平时会折腾一下电脑或手机网络可能都会看到这些

图3——计算机网络信息

其中我们需要注意的 MAC地址(物理地址)、IP地址(一般指IPv4地址)、网关、DHCP、DNS。

MAC地址是网卡的身份证——每个网络设备上至少有一块网卡,mac地址就是用来标识网卡的,严格来讲mac并不叫“地址”。

IP地址为门牌号——用来标识网络设备在网络中的具体位置

网关为小区门卫——管理一个网络的进出口链路,一般可以理解成网关就是路由器

DHCP是随机摇号机制——为网络设备分配ip地址

DNS是业主住址薄——用来查找一个网站域名对应的ip地址是多少

图中网关、DHCP服务器、DNS服务器为同一个,是因为我用的电脑连接手机的热点。

DNS设置为网关,相当于使用网关的网络信息中的DNS服务器。(笔记本:我用什么DNS都依手机,跟他一样)

端口

端口这个说法不够具体,物理接口就叫做端口,比如交换机端口,墙面端口等等

这里要介绍的是抽象概念上的虚拟端口,在计算机中,其范围从0~65535,

你电脑上运行了很多联网的程序,他们都在使用网络资源,但他们都互不干扰。

具体一点就是你与很多qq好友同时在线聊天,你接收到A好友发来的消息并不会跑错到B好友的聊天窗口中。

这是因为在你的电脑上虚拟了很多个端口,应用进程使用其中一个端口与对方通信,就不会跟其他的冲突了。

打开系统的资源监视器就可以直观的看到了,注意看我只运行了一个qq(PID为12344),但它已经使用了很多个端口在与不同的远端电脑通信。

图4——计算机进程端口映射表

协议

协议就是规则、规范,或者说一种语言。

因为计算机网络中传播的数据只有0和1,为此就需要协议来定义出各种编码解码方式(类似摩斯密码)

以及定义得到的各种参数代表什么含义。(类似缩写与黑话)

计算机通信中存在着许多的协议,这里按五层模型来展示的话,一共有这么多协议。

图5——分层网络协议

目前只需要知道有协议这个概念就行,以后会具体一个个协议的学习

网络参考模型

七层模型是ISO组织于1984年发布的细化的网络层级,更多的作用是让你理解网络通信这个抽象的东西,同时让厂商基于这个层级去标准化规范化的设置与遵循协议。

故障排查时也可以按照七层模型来逐级排查。

1
2
3
4
5
6
7
8
9
10
11
12
13
应用层:	OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。

表示层: 提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。

会话层: 负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

传输层: 提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。

网络层: 定义逻辑地址,供路由器确定路径,负责将数据从源网络传输到目的网络。

数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。

物理层: 在设备之间传输比特流,规定了电平、速度和电缆针脚等物理特性。

图6——分层传输过程

而TCP/IP四层/五层模型可以说是对OSI七层模型的简化。将最上的5、6、7层简化为一层。

具体内容感兴趣可自行查阅资料,目前五层模型更被广泛接受。

图7——两种分层协议对比

目前只需要知道二层是基于mac地址进行数据传输,三层是基于ip地址传输。

因此在电脑之间的网络传播都是处于前3层上的。

路由器都是三层设备,而交换机会有二层交换机与三层交换机之分,一般个人接触到交换机都是二层交换机。

介绍以上信息都是为了接下来介绍的数据包的传输做基础。

数据包

我们都知道计算机的底层是由0和1构成的,我们看到的图片、音频、视频在计算机底层都是一串串数字。

网络通信时传输的就是这些字符串。

在实际传输时,会把这些字符串拆解打包,封装,成为一个个数据包,有些地方会叫做报文(严格来讲,有包、段、帧的区分,但日常都统称为包)

一个数据包的结构可以简化为

【目标地址】【源地址】【协议类型】【数据内容】【校验码】

具体可以百度搜索一下各数据报文结构。此处不是很严谨,不同分层下的数据包结构是不一样的,这里只是一个形象的简化概括。

类比一下

含义 类比
目标地址 数据包要送达的目的地 快递的收件人
源地址 数据包的发送来源 快递的寄件人
协议类型 该数据包遵循什么协议、使用什么协议解读 走哪一家物流公司的渠道
数据内容 真正要传输的数据 快递包裹内的东西
检验码 通过固定的算法计算出的数据包相关内容的值
如果设备收到该数据包后计算的出的值与该检验码不同
则说明该数据包损坏了,于是会丢弃该数据包
(也就是常说的“丢包”)
快递的包装、如果包装破损、物品缺失、会拒收

数据包的传输过程

交换阶段

不知道各位在学校上电脑课时,在老师还没开通“上网”功能前,有没有偷偷跟同学联机打几把cs。

多台电脑在没连通互联网时是如何联机打游戏的呢? 应该有人会说出一个词——“局域网”。

局域网就是一个小型网络,在学校机房这个地方,其局域网可以简化为这样。

图8——拓扑

交换机SW2开启DHCP功能,1号口连接SW1的4号口。MAC地址为:4c-1f-cc-25-2c-49

交换机SW1的1、2、3号口分别连接PC1、PC2、PC3。MAC地址为:54-89-98-b6-57-ab

PC1自动获取到的ip地址为192.168.10.251,MAC地址为:54-89-98-B6-57-AB

PC2自动获取到的ip地址为192.168.10.252,MAC地址为:54-89-98-32-67-F6

PC3自动获取到的ip地址为192.168.10.253,MAC地址为:54-89-98-A8-22-35

交换机的mac地址映射表

假设主机之间都知道彼此的mac地址,那么通讯就是基于二层,由二层交换机处理即可。

交换收到一个标注了mac地址的数据包,他要如何发送给对应的电脑呢?

这就要介绍交换机的两大特性:学习、泛洪(广播)

举例PC1指定发送给PC2,同时目前交换机是刚连入该网络中

学习:交换机从1号接口收到一个数据包——数据包是会注明源地址与目标地址(发件人与收件人)

交换机查看到数据包的源地址,就会记录下这个源地址就是来自这个端口(PC1来自1号口)

泛洪:交换机发现未曾记录过目的地址(PC2的mac),交换机就会进行广播,将该数据包同时从2、3、4口发送出去,当PC2收到并回复时,交换机便会学习记录下来(PC2在2口)

注:其余pc虽然收到了PC1发给PC2的数据包,但他们看到数据包开头的目标地址不是自己的mac地址,于是不会理会回应这个数据包

以下是在模拟器中查询交换机SW1的mac地址对应表

1
2
3
4
5
6
7
8
9
10
<SW1>dis mac-address
MAC address table of slot 0:
-------------------------------------------------------------------------------
MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID
VSI/SI MAC-Tunnel
-------------------------------------------------------------------------------
5489-98b6-57ab 10 - - Eth0/0/1 dynamic 0/-
5489-9832-67f6 10 - - Eth0/0/2 dynamic 0/-
-------------------------------------------------------------------------------
Total matching items on slot 0 displayed = 2

基于学习与广播两种方式,一个普通的交换机就能完成一个简单的局域网通讯。

ARP协议

上面是在主机已知对方mac地址的情况下实现的(主机发送数据包时,填写了收件人)

目前我们记录与使用的都是ip地址,很少会去专门记mac地址。

插播一条知识:即便是一个网站名,比如www.baidu.com,它其实也是一个ip地址,DNS就是负责将网站名翻译为ip地址

那么在知道ip地址,不知道mac地址时,又是如何完成通信的呢。

首先,电脑会判断要访问的目标ip与自身是不是处于同一个子网(有关子网,稍后会介绍)

若不同子网,电脑会将数据包的目标mac填写为网关的mac地址,使该数据包发送给网关,由网关去寻找目标ip

若同一子网,电脑会将额外发送一个ARP数据包,该数据包的目标mac填写为ffffffffffff,也就是广播。通过ARP获取了目标主机的mac地址后,才开始发送数据包。

这里我抓了个包,是在PC1与PC2都没有对方mac信息是,由PC1去访问PC2的ip地址。

图9——抓包信息

其中,第二行这段就是二层的信息,其注明了源地址为54:89:98:b6:57:ab 目标地址为ff:ff:ff:ff:ff:ff。以及该数据包的类型为ARP

交换机只识别到二层信息,发现目标地址是广播地址(全F),于是转发给所有主机。

Ethernet II, Src: HuaweiTe_b6:57:ab (54:89:98:b6:57:ab), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Type: ARP (0x0806)

下面这段摘抄一下,也是记录了源mac与IP地址,以及目标ma与IPc地址

Address Resolution Protocol (request)
Sender MAC address: HuaweiTe_b6:57:ab (54:89:98:b6:57:ab)
Sender IP address: 192.168.10.251
Target MAC address: Broadcast (ff:ff:ff:ff:ff:ff) 注意实际中此处为00:00:00:00:00,模拟器bug才显示的全f
Target IP address: 192.168.10.252

PC2收到这个数据包后,解析内容知道这是一个ARP数据包,并且数据内容中含有自己的IP地址(192.168.10.252)。

于是遵循协议,它会回复一个数据包。

该数据包,自然就写上了PC2自身的mac地址,PC1收到这个数据包,也就清楚了192.168.10.252对应54:89:98:32:67:f6

图10——抓包2

我们也可以验证一下,在PC1的命令行中查看ARP表。

1
2
3
4
PC>arp -a

Internet Address Physical Address Type
192.168.10.252 54-89-98-32-67-F6 dynamic

等拿到了mac地址,PC1与PC2的通信就简单了。

路由阶段

前面我们介绍了交换过程,会发现交换过程有一个小问题,那就是广播包太多:交换机泛洪,ARP泛洪。

提一下,交换机的泛洪是由它自身发起的,是交换机本身不知道数据包中的目的mac地址在哪

ARP泛洪是要进行通讯的网络设备引起的,是为了要填写目的mac地址,需要知道目的设备的mac地址是多少。

网络中设备越多,这些广播包数量就越多,这样就会占用太多网络资源,导致“网络变卡”

为此需要限制一下广播域,这就需要两项技术:路由与子网

先简单说明路由的作用,路由作用在不同的网络之间,提供类似交换机一样的服务,但路由有一个最重要的作用,隔绝广播域

网络内部,或者说局域网内部的广播数据包到达路由设备,路由设备不会将其扩散到其他局域网。

还记得我们看网络信息有ip地址、子网掩码与网关吗,包括我们手动修改ip地址时,也会让你填写。

网关就是路由设备的ip地址:如果要与其他网段通信的话,每个网段必定需要一个网关

(不与其他网段的设备通讯的话,可不填写网关)

什么叫网段呢,网络号不相同的ip地址就是处于不同的网段,网段就是ip地址与子网掩码进行与运算后得到的网络地址。

因此我们先介绍子网的概念

图11——计算机ip信息

子网

我们可以看到ip地址、子网掩码每行都是由四段组成的,实际是4个字节,也就是4个8位二进制。例如

00000000 00000000 00000000 00000000 表示的是0.0.0.0

11111111 11111111 11111111 11111111 表示的是255.255.255.255

二进制十进制的转换就不介绍了,百度一下就有。(现在记住,一个8位的二进制全为1时,就是255)

IP地址,是由网络号加主机号构成的,也就是小区地址与门牌号。

子网掩码,是用来标识到哪一段都是网络号

其规则为将标识网络号的部位写为1,主机号的部分写为0。

例如我们常见的

ip地址:192.168.1.2

子网掩码:255.255.255.0

255明显就是整个字节8位二进制都为1,也就是前面3个字节都表示的网段。

所以192.168.1 这一段为网络号,后面的.2为主机号。

其网段就是192.168.1.0

好吧,你可能感觉不好理解是吧。(其实这才是最好记得)

那么我们按照原理来算一遍

网络号的计算就是使用ip地址与子网掩码,进行二进制的与运算:有0则为0,都是1的才保留。

按原理来,写出来就如下表格:

类型\值 第一字节 第二字节 第三字节 第四字节
十进制ip地址 192 168 1 2
十进制子网掩码 255 255 255 0
二进制ip地址 11000000 10101000 00000001 00000010
二进制子网掩码 11111111 11111111 11111111 00000000
进行“与”运算后的二进制 11000000 10101000 00000001 00000000
运算后的十进制(网络号) 192 168 1 0

正因为“与”这种运算,有0则为0,都是1才1。

而子网掩码标记网络号的地方都标记为1,则我们算子网掩码前面有多少个1,去取ip地址前面多少个数就是网络号了。

根本不需要进行计算。

早期,子网分为三大类

类别 子网掩码
A类 255.0.0.0
B类 255.255.0.0
C类 255.255.255.0

这很方便我们理解,因为它们是以一整个字节来划分的。

子网划分

但在实际中,C类包括的主机号也达到了253个(255-1-1,一个二进制全0表示网段,一个二进制全1表示广播地址)

出于节省ip地址与进一步隔绝广播域的目的,后来人们将子网进一步划分。

原网段:

点分十进制 二进制
IP地址:192.168.1.0 11000000 10101000 00000001 00000000
子网掩码:255.255.255.0 11111111 11111111 11111111 00000000

比如规划给某一层楼的ip网段是192.168.1.0,255.255.255.0

假设这层楼有4个办公区,要按办公区划分子网,也就是分出4个子网来。

要表示4,需要至少两个二进制数,(00、01、10、11)。

而子网掩码对于网络号的定义是从左往右的,也就是我们要将原来二进制下的子网掩码多往右数两个数,写为1,用来标记这里也是表示网络号。

那子网掩码就为11111111 11111111 11111111 11000000 也就是255.255.255.192

划分后的的网段:

二进制 点分十进制 主机可分配的ip地址范围
11000000 10101000 00000001 00000000 192.168.1.0 192.168.1.1~192.168.1.62
11000000 10101000 00000001 01000000 192.168.1.64 192.168.1.65~192.168.1.126
11000000 10101000 00000001 10000000 192.168.1.128 192.168.1.129~192.168.1.190
11000000 10101000 00000001 11000000 192.168.1.192 192.168.1.193~192.168.1.254

注意,虽然划分了不同网段,但对于外部网络来说,这四个子网区域依旧还是192.168.1.0,255.255.255.0这一个网段。

打个比喻,就是对于外面的人来说,我们一家人都住在101号房,但是我们家里每个人分别住在主卧、次卧、客卧。

子网掩码的简写

子网掩码的书写总是要敲4段,而且有时不是很快理解。

所以我们会把子网掩码进行缩写,以二进制写法中,有多少个数值全为1,也就是说以网络号有多少位来简写

192.168.1.2 255.255.255.0 可以简写为192.168.1.2 /24

192.168.1.64 255.255.255.192 可以简写为192.168.1.64 /26

(当然,实际历史发展不是这样的,还是得强调本文旨在通俗易懂的理解计算机网络的基础概念,具体的学习更推荐另外看正统书籍)

路由

上面已经理解了网段的概念,接下来理解路由就很轻松了

路由就是指示去往其他网段的道路,是导航。

过程:

当我们电脑要发送数据时,电脑会识别目标ip地址是不是同网段:

同网段,则不需要路由参与,按照交换过程传输数据包(无mac先ARP,拿到mac了直接通过mac发送数据包)

不同网段,则会在数据包的目标mac地址位置填写网关的mac地址(一样的,如果不知道网关的mac地址,就ARP寻找)

网关收到给自己的数据包,发现虽然mac’地址是自己,但ip地址不是自己的,网关就会根据路由信息去转发这个数据包。

所以把路由设备叫做网关很好理解,跟海关差不多。

图12——物流过程

1、电脑发送数据包

2、链路传输

3、交换机转发

4、路由设备寻址转发

5、路由设备之间的传输

6、目标网段的路由设备

7、8、目标网段内的交换

9、到达目标设备

路由原理

路由设备与交换机可以说原理大同小异。

路由设备内部也是维护这一个数据表格,叫做路由表。

我在模拟器上搭了个简单的网络拓扑

图13——拓扑2

图片内容描述:

三台专业路由器AR1、AR2、AR3连接在一起,它们底下各自连着一台PC

注:专业级路由器。IP地址是配置在接口上的,所以一台设备拥有多个IP地址

RI与PC处于10.0.0.0 /24网段,R1与R2处于12.0.0.0 /24网段

R2与PC处于20.0.0.0 /24网段,R2与R3处于23.0.0.0 /24网段

R3与PC处于30.0.0.0 /24网段。

为设备配置好网段与IP地址后,我们来查看R1的路由表(我将本地回环与广播地址相关的删除了)

1
2
3
4
5
6
7
8
9
[R1]dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.0.0.0/24 Direct 0 0 D 10.0.0.254 GigabitEthernet0/0/0
12.0.0.0/24 Direct 0 0 D 12.0.0.1 GigabitEthernet0/0/1

我们需要注意的就是目标网段与下一跳(NextHop)

上述R1路由表的意思就是,前往10.0.0.0/24网段,从10.0.0.254这个ip所在位置出发;前往12.0.0.0/24网段,从12.0.0.1这个ip所在位置出发。

那么我们是不是可以从PC1通讯到路由器R2了呢?

1
2
3
4
PC>ping 12.0.0.2

Ping 12.0.0.2: 32 data bytes, Press Ctrl_C to break
Request timeout!

很遗憾,还不行,让我们来排查一下。

1
2
3
4
PC>ping 12.0.0.1

Ping 12.0.0.1: 32 data bytes, Press Ctrl_C to break
From 12.0.0.1: bytes=32 seq=1 ttl=255 time=16 ms

PC1到R1是通的

1
2
3
<R1>ping 12.0.0.2
PING 12.0.0.2: 56 data bytes, press CTRL_C to break
Reply from 12.0.0.2: bytes=56 Sequence=1 ttl=255 time=10 ms

R1到R2竟然也是通的?!而R1并没有故障。


好,不卖关子,这是因为通信是双向的,虽然PC1可以联系到R2,但是目前R2联系不到PC1,所以他们就不互通,ping就会失败

这是R2的路由表

1
2
3
4
5
6
7
8
9
10
<R2>dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public

Destination/Mask Proto Pre Cost Flags NextHop Interface

12.0.0.0/24 Direct 0 0 D 12.0.0.2 GigabitEthernet0/0/1
20.0.0.0/24 Direct 0 0 D 20.0.0.254 GigabitEthernet0/0/0
23.0.0.0/24 Direct 0 0 D 23.0.0.2 GigabitEthernet0/0/2

其中并没有前往10.0.0.0/24的路由信息,手动添加一条静态路由信息进去。

1
2
3
4
5
6
7
8
9
10
11
[R2]dis ip routing-table 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.0.0.0/24 Static 60 0 RD 12.0.0.1 GigabitEthernet0/0/1
12.0.0.0/24 Direct 0 0 D 12.0.0.2 GigabitEthernet0/0/1
20.0.0.0/24 Direct 0 0 D 20.0.0.254 GigabitEthernet0/0/0
23.0.0.0/24 Direct 0 0 D 23.0.0.2 GigabitEthernet0/0/2

这时,PC1再去pingR2就通了。

1
2
3
4
PC>ping 12.0.0.2

Ping 12.0.0.2: 32 data bytes, Press Ctrl_C to break
From 12.0.0.2: bytes=32 seq=1 ttl=254 time=16 ms

延申一下,既然PC1能ping通R2了。那么能ping通PC2吗?

1
2
3
4
5
PC>ping 20.0.0.2

Ping 20.0.0.2: 32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!

是的不行,这是因为R1中没有前往20.0.0.0/24网段的路由信息。

只要在R1配上对应的静态路由,PC1就能与PC2通信了。

包括后续与R3、PC3,因为都不是同一个网段,需要有对应的路由信息才能通信。

有关路由的详细介绍,请看路由基础这篇文章。


隔绝广播域的原理

至于说路由设备为什么能隔离广播域

是因为在路由表中指定了广播地址(二进制全1,也就是255),的下一跳是127.0.0.1,也就是路由器本身,所以广播包不会转发出去

1
2
3
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0

总结

其实理解了交换与路由的过程,就已经知道了计算机网络的全部通信过程。

其他的技术与知识都是在交换路由的基础上进行功能的丰富

到这里,我建议再回头从文章开始的位置再通读一遍,能更深刻的理解计算机网络中数据的传播过程。

知识拓展

DNS

原理

DNS(Domain Name System,域名系统),其作用是解析域名,将域名转换成ip地址。

早期,互联网都是直接使用ip地址通信,但对于人类来说,记忆ip地址还是太困难了。

于是出现了域名,访问百度,我们使用只需要记baidu.com,这非常方便好记。

而DNS就是对应的用来翻译域名的工具。

DNS服务器上有一个庞大的数据库,里面就记录域名对应了什么IP地址。

电脑访问一个域名时,会先访问DNS服务器,获取域名的IP地址,之后再根据IP地址去通信。

一些人可以听说过,“换一个DNS,网络就会好一些”

这有两个原因,一个是你与DNS服务器之间的访问速度;另一个则是DNS服务器翻译给你的ip地址不是最佳地址

多数情况都是第一个原因。

至于第二个原因,是因为大型网站,其搭配的运营商不止几个,服务器不止一台,甚至机房不止一处。

也就是说会有多个ip地址,虽然网站内容都是一样的,但是访问它们的速度自然会有差异。

另外,如果是电脑正常能够上网,但某个网站或者联网程序就是有网络问题,这就有可能是你使用的DNS服务器有问题——其数据库中没有解析出正确可用的ip地址。(只是说有可能,不是一定)

hosts文件

如果是Windows与Linux系统,电脑本地会有一个hosts文件,其中也储存着域名与ip地址的映射信息(其实是先有hosts文件,后出现DNS技术的)

电脑访问一个域名时,会先查询hosts文件,有信息直接访问该IP;没有的再去请求DNS。

根据这个原理,我们可以玩个骚操作

在hosts文件中,添加一个常见的广告与流氓域名,将ip地址填写为127.0.0.1

这样电脑访问这些域名,就直接请求到本地地址去了,相当于自定义了黑名单。

实际是先查询DNS缓存,没有再去找hosts文件,hosts文件也没有,才去找DNS。

但对于开机之后还没有去访问过的网站,那肯定没有相应的DNS缓存,会直接先去找hosts文件。

NAT

Network Address Translation,网络地址转换。

其诞生是因为IPv4地址即将分配完毕,由于成本问题与政治问题,众多国家不愿意迁移至IPv6。

美国于1994年开发推出了NAT技术,用于解决IPv4不够使用的问题。

其原理非常简单,就是将原来的局域网划为私网,不与互联网直接互通,而是在路由器上使用NAT技术,将私网的ip地址转化为一个公网ip地址。

使得原本需要几十个、几百个公网ip地址的区域,只需要配备一个公网ip地址就可以了。(你可以理解为变相的对一个公网地址进行子网划分)

目前使用的NAT技术,具体来说是NAT-PT( Protocol Translator),是利用端口来进行地址转换。

在路由器内部有一张端口映射表,记录了路由器的什么虚拟端口对应什么私网内的ip地址(对应哪一台主机)。

路由器向公网通信就通过分配给自己的公网ip地址加上端口号。

NAT这个技术好处除开解决了IPv4不够用的问题之外,就是隔绝了公网与私网。

我们无法直接访问私网内的某一台设备,需要由对方先通信才行。(因为该设备未在路由器内建立映射,或者建立了,但你并不知道其对应哪一个端口)

这变相的保证了私网的安全:私网内的网络设备,不会被直接定向攻击。

但这个好处同时也是一个坏处。

私网内的网络设备不直接连通在公网上。很明显我们不能直接将随便一台网络设备作为服务器,其他人或者是你在其他地方无法直接访问到这台设备。

如果你家里的电脑有公网IP,那你在公司可以直接远程访问,可以作为你的云电脑,甚至你可以使用手机来远程,使手机拥有电脑的性能。

如果你的手机有公网IP,那你可以在家里,就远程放在公司的手机,直接打卡!

当然,现在有很多方案可以实现,比如:内网穿透。

IPv6

IPv6虽然使用上与IPv4一样,但IPv6不是IPv4的升级,而是一个全新的协议,与IPv4不兼容

早期人们发现计算机发展拓展速度很快,甚至出现了移动智能设备(手机),IPv4可预见的不够使用,于是提出了IPv6。

IPv6的二进制位数是IPv4的4倍(32*4=128),虽然第一眼看只是4倍,但这是二进制位数

换算一下总数量为2128=340282366920938463463374607431768211456。而IPv4是4294967296。

IPv6因为与IPv4不兼容,所以想替换为IPv6,需要客户端、服务在程序上替换为IPv6,还需要路由设备也同时替换为IPv6。

因此出于成本问题这项技术很难推广开来,而且后续出现的NAT技术,解决了地址分配问题,这使得许多国家与机构放弃了IPv6。

防火墙

防火墙的作用是自定义隔绝网络请求,阻断特定的网络通讯。

防火墙分软件防火墙与硬件防火墙。

软件

我们的个人电脑就有防火墙(Windows防火墙或者你安装的杀毒软件携带的防火墙)

路由设备上也有防火墙

硬件

专门的防火墙设备,常与路由器串联在一起

一般只有大企业才使用硬件的防火墙设备。

举几个防火墙的实际作用

限制办公设备访问常见的娱乐域名(不知道各位公司有没有设置过,会让你登不了游戏跟游戏平台)

限制个别办公设备访问公司服务器

限制互联网设备访问内网设备的特定端口(例如3389,这是Windows远程桌面的默认端口)


结语

有关IPv4、IPv6、NAT、DNS的技术背景与政治背景,我推荐看看这个视频,这个视频做的非常好。

   


       
   

看过以上知识后,相信你对计算机网络已经有了个大概了理解。

如果对计算机网络感兴趣,推荐去学习一下HCIA的知识,一套课程大概一个月就可以学习完毕。

之后还有兴趣再学习HCIP知识,到这我个人认为就足够了,已经覆盖了目前大多数的实际网络情况。

另外这个阶段去看看经典教材书籍也不错,尤其是TCP/IP相关的书籍。

当然,你认可我的文章,我也有写介绍这些计算机网络具体技术的文章。

另外,如果你偏向实用主义的话,可以继续看我出的文章:归档 | Magiku’s药剂屋,科普系列的后几篇就是实操向的文章。