113由浅入深学网络--网络基础
网络工程师认证体系
在开始学习网络的相关知识前,我们来认识一下相关的认证证书。虽然只是一个 paper,但这是实力的一个证明,同时也是进入一个企业的敲门砖。并且在初次接触网络的时候,为你提供了一条学习与进阶的方向。
目前使用范围最广、市场占有率较高、拥有自己的认证体系的公司有这三家:
Cisco(思科):生产了全世界第一台路由设备的厂商,优越的质量与创新的开发能力使他无可争议的成为全球市场占有率第一的品牌。
H3C:H3C 公司又名为华三,是2003年华为与 3com 公司合资的公司,历经波折如今已成为紫光与惠普的新华三,占据中国路由大半市场,特别是政府以及国家单位。
Huawei:华为在失去华三之后,没有放弃该行业的市场,凭着强大的研发能力在市场上强势崛起,仍然有不小的市场。
我们来看看 2016 年各个厂商在全球所占据的份额比例:
image.png
由此看出,对于思科,华为,华三的认证还是很有权威的。
首先我们来看思科的认证体系:
image.png
从路由与交换来看的话,我们的进阶道路就是 CCNA R&S(Cisco Certified Network Associate Routing & Switching )--> CCNP(Cisco Certified Network Professional) --> CCIE(Cisco Certified Internetwork Expert),分别是思科认证初级网络工程师、思科认证网络资深工程师以及思科认证互联网专家
image.png
路由与交换在 Huawei 的进阶路径是这样的:
HCNA (Huawei Certified Network Associate )--> HCNP(Huawei Certified Network Professional) --> HCIE(Huawei Certified Internetwork Expert)
而同层次的路由与交换在 H3C 的进阶路径是这样的:
image.png
H3CNE(H3C Certified Network Engineer,H3C认证网络工程师)--> H3CSE Routing & Switching(H3C Certified Senior Engineer for Routing & Switching,H3C认证路由交换网络高级工程师)--> H3CIE(H3C Certified Internetwork Expert,H3C认证互联网络专家)
虽然分为三个不同的认证体系,但是结构基本类似,从初级到高级最后到专家,每一层次需要的技能如下:
初级阶段:定位于中小企业网络基本配置操作和设备维护,包括计算机网络基础、网络设备操作入门、高级TCP/IP知识、网络的建构、网络设备互连实践、设备的安装与调试,简单的路由、交换的知识。
高级阶段:掌握了包括路由、交换、组播、VPN、QoS、基本安全特性等部署园区网络所需的全方位的理论知识和操作技能,可以胜任大中型复杂网络的建设和管理工作。
专家阶段:在网络技术领域有长期的实践经验,熟悉网络设备产品和相关技术理论的网络工程技术人员,网络设计者和网络维护者。
这些便是常见的、较为有价值的认证体系,也是以后深入学习的一个方向。接下来,我们就正式开始对网络的学习。
模拟器以及相关工具
模拟工具 GNS3
在后续的实验中我们将会使用 GNS3 来做我们的仿真模拟工具,并使用 Wireshark 来作为抓取数据包以及数据包分析的工具,其中 GNS3 大部分都是做 Cisco 相关机器、网络的模拟。
GNS3 是一款具有图形化界面、可以运行在多平台(包括Windows, Linux, and MacOS等)的网络虚拟软件(Linux 中 Ubuntu 可以使用官方提供的源来安装,Windows 因为网络环境有部分的依赖软件无法安装,需要自己单独安装下载)。
GNS3 同时也是一个开源的软件项目,在 GNS 的 Github 可以看到其源代码,有兴趣的同学可去了解,GNS3 是使用 python 开发的,集合了 Dynamips、IOU、Qemu、VMware、VirtualBox、Docker 等工具在其中,之所以说其仿真是因为我们可以通过简单的鼠标拖动来构建我们的网络拓扑,而拖动的组件中可以运行真实的交换机或者路由器的操作系统,这样直接在模拟器中的配置在真实的机器上操作也不会相差太多(只要相关的功能能靠软件实现)。
GNS3 的强大能让我们完成大部分实验,但他也不是完美的,因为在真实生活中有一些功能依赖于硬件的实现,所以部分的功能模拟出来的效果不是太完美,甚至是无法模拟。
每个机器的运行都有其相应的操作系统,和实现相应功能的软件,电脑有操作系统如 Windows、Mac、Linux,同样路由、交换机也有其相应的操作系统称之为 IOS(Internetwork Operating System)
我们将打包成二进制的 IOS 称之为镜像(Image),如 /home/shiyanlou/GNS3-images 中以 bin 结尾的文件。
image.png
在图中我们可以看到两种命名,一种是以 c 开头的,一种是 i 开头的。
c 开头的就是某种型号的真实设备的系统镜像(因为不同型号的设备功能略有差别,所以他们的 IOS 里的功能也略有差别),用于导入 IOS 由 Dynamips 运行模拟的,i 开头的是用于 IOU (Images on Unix)的。IOU 将镜像放在 Unix 系统或者类 Unix 系统中运行(IOU 的镜像是官方人员用于添加某个功能测试而打包的),不像 IOS 是使用集成的 Dynamips 来运行。
最主要的区别是 IOU 会占用大量的内存,而 IOS 的特点是消耗大量的 CPU 资源。其次因为 IOS 是真实机器的镜像,在涉及某些以硬件实现的功能时可能会有一些差别或者模拟不了,而 IOU 相对来说能够模拟的功能会更全面一点。在模拟的时候我们也会更多选择 IOU。
我们可以通过终端来打开 GNS3,如图所示,只需打开终端,并在其中输入 gns3 回车即可:
image.png
打开之后我们会得到这样的一个界面,因为 GNS3 是基于 C/S 架构的(也就是有一个客户端,一个服务端),所以这里可以供您选择服务端运行的位置(可以在本地,也可以是远端的服务器,或者是虚拟机),我们这里默认即可,点击右下角的 Cancel:
image.png
接下来会看到让你设置该项目的项目名与位置,直接 OK 或 Cancel 都可以,它将使用默认的位置配置,当然你也可以填写自定义的项目名,如 test 等等:
image.png
这样我们就可以看到整个模拟器的功能展示区了:
image.png
我们可以在中间的画布区域任意的拖放机器来绘制我们的拓扑图。在其左边的就是设备所在的区域,而右边是机器的总览与状态的列表区域。下面是一个命令控制台,上面是一些常用功能的展示区域,这些功能在更上面的菜单栏里同样存在。
这些对应的功能都会出现在菜单栏里的下拉列表中,所以便不再做过多的介绍了,其中在 Edit->Prefences 中是对 GNS3 的一个配置:
image.png
有这样的一些配置选项:
image.png
主要的配置项是:
General:一些常规的配置所在,如项目名,配置文件,图标等等的位置设定,连接工具的设置如 Console、VNC 的连接方式,还有展示区的大小等等。
Server:GNS3 是基于 C/S 模式,也就是有客户端与服务端,客户端就是当前我们所使用的工具,服务端一般是默默在后台运行的,用于镜像和特殊功能的运行,一般有三种方式--本地、虚拟机、远程服务器:
Local Server:由本地同时运行客户端与服务端,一般默认的便是这种方式;
GNS3 VM Server:用 VMware 或者 VirtualBox 这样的虚拟机工具来运行服务端,在官方的 github 中有提供其制作的 VM 镜像,可以直接导入使用;
Remote Server:用远程服务主要是为了模拟较为大型的项目,在本地机器负载不起的情况下,使用专门的服务器来运行服务端,让 IOS 与 IOU 功能都在服务器端运行。
Packet capture:使用的装包工具,默认使用的是开源的 Wireshark 来抓包,我们是仿真模拟,线路上自然有数据包的通信,可以通过该工具来查看数据包通信的过程与具体内容。
VPCS:Virtual PC的意思,是一个集成的模拟多台主机的工具。
Dynamips:Dynamips 是一个基于虚拟化技术的模拟器(emulator),用于模拟思科(Cisco)的路由器,原始名称为Cisco 7200 Simulator,源于Christophe Fillot 在 2005 年 8 月开始的一个项目,其目的是在传统的 PC 机上模拟(emulate)Cisco 的 7200 路由器,现在已经支持很多系列了。GNS3 集成进来支持对 IOS 的运行
IOS on UNIX:称为 IOU,是另外一种模拟方式,因为 Unix 与 类 Unix(也就是 Linux)对网络的良好支持,所以功能在这样的平台上运行起来兼容性会更好一些,也更加的仿真,更像在真实机中运行。并且 IOU 的镜像是由 Cisco 功能测试所使用的系统版本,功能齐全。
QEMU:也是常用的模拟器软件,在这里主要是用与对防火墙设备的模拟,如 ASA 这样的设备,当然这样设备非常消耗系统的资源,谨慎使用,不然一不小心就卡死了。
VirtualBox、VMware、Docker:这三个都是使用虚拟技术来运行我们的 IOS 或者 IOU 设备的,也就是上面所提到的 GNS3 VM 选项,Docker 是在较新的版本中才支持的。
这些就是 GNS3 的所有配置选项,其实 GNS3 就是所有常用工具的一个集合,可以绘制网络拓扑图(网络的逻辑结构)、可以装包分析、可以运行设备并配置。
抓包分析工具 Wireshark
虽然可以使用的抓包工具众多,但是在 GNS3 中默认使用的是开源的 Wireshark。其功能十分的强大,不仅可以抓包并且还可以展现数据包的所有内容。
打开 Wireshark:
image.png
当然我们也可以使用终端直接输入 wireshark 就可以打开。
Wirshark 主要有这样几部分:
image.png
标题栏:用于显示文件名称、捕获设备名称和Wireshark 的版本;
菜单栏:Wireshark 的标准菜单栏,所有的功能、配置、帮助都可以在里面找到;
工具栏:工具栏中显示的一些常用的功能;
显示过滤:过滤一些暂时不需要查看的包,只查看所需协议的包;
Packet 面板:此时是启动的页面,在抓包时会显示 Packet List(包列表)、Packet Details(包的具体信息)、Packet Bytes(包的十六进制与 ASCII 格式的显示);
状态栏:专家信息、注释、数量以及Profile 的显示。
说了这么多我们也不知道怎么用,我们来尝试一下 Wireshark 的使用。
我们用来抓取我们对外上网的网卡 eth0 上的数据包。
开启抓取 eth0 网卡的方式有两种,一种是通过工具栏中的 Interface List 来选择抓包的接口,也就是我们的网卡,还有一种就是在 Packet 面板中提供的快捷按钮,选择监控的网卡,然后点击 Start。
image.png
由此我们可以看到 Packet 面板有所变化,分为了三个部分:
Packet List:所有抓取的包的列表,每个数据帧的摘要;
Packet Details:分析封包的详细信息,每一层的信息都分开显示分析(物理层,数据链路层,网络层,传输层)(网络层次的划分将在后续详解);
Packet Bytes:以十六进制和 ASCII 格式显示数据包的细节。
image.png
我们可以用 wireshark 来分析以及更深入的了解协议的运作原理,检查延迟,过滤显示(只查看某个协议的数据包,或者自定义匹配条件的数据包),统计图表的构建还可查看是否异常等等。
环境的搭建
GNS3 的环境搭建并不难,实验楼已经为大家搭建好了,当然若感兴趣的同学可以关注一下环境如何搭建的,当然也可以跳过,官网上有详细的讲解,在此处介绍一下 Linux 的 Ubuntu 中如何安装:
# GNS3 有自己的 ppa 源,可以以他的源来安装
sudo add-apt-repository ppa:gns3/ppa
# 若是没有 add-apt-repository 程序则需要执行这一步,然后再添加,因为 ubuntu 的版本与python变化有不同的版本,所以有三条指令可以尝试
# 用于 ubuntu 12.10之后的版本
sudo apt-get install software-properties-common
# 或者(用于 ubuntu 12.10之前的版本)
sudo apt-get install python-software-properties
# 使用python3,用这个。这三条命令其中一条即可
sudo apt-get install python3-software-properties
# 添加源后记得更新一下源列表
sudo apt-get update
# 安装 gns3 的图形界面
sudo apt-get install gns3-gui
如此便非常简单的安装好了 GNS3 以及其依赖的工具如 Wireshark 等。其他的 Linux 发行版可以参照官网。
而在使用 Window 的同学需要安装 GNS3 的话可以去官网下载,下载 all-in-one 的版本才会安装所有工具,若是网络问题无法访问官网,可以在 Github 中搜索 gns3-gui 然后通过 releases 下载最新版。
提示:在 Windows 中安装 GNS3 会给你在线安装 Wireshark,但是里面默认的连接是指向国外的网站可能会安装不上,我们可以取消跳过,然后自己安装 Wirshark,再去配置中指定 Wireshark 即可,同时 Windows 中没有像 Linux 中有 terminal,默认使用的 putty 这个远程连接工具需要自己安装,或者自己选用其他的工具如 Secure CRT,然后再配置。
而系统中已有的镜像需要自行百度寻找了。注意因为本实验环境本就是在 Linux 中,所以可以直接导入 IOU 设备镜像使用,而若是使用 Windows 环境的同学,需要去 GNS3 的 Github 中下载其做好的环境镜像,导入 Vmware 或者 VB 中来实现 IOU 的运行环境。
简单的操作命令
现在我们便来尝试 GNS3 的一些简单使用,实现两个交换机的互联。
同样我们打开终端,在其中输入 gns3 即可打开 gns3 工具,如同上文的操作我们选用默认的配置以及项目名,或者自定义一个项目名。然后我们在左边设备列中点击第二个(两个箭头的那个)选项(也就是交换机设备汇总列表):
image.png
找到我们添加好的 switch 设备,按住它不放拖放到我们的画布中,这样便实现了一个交换机设备的添加,若是还需要一个我们再拖一个便是:
image.png
此时的两台设备处于相互独立的状态,我们需要使用网线将他们连接起来,这样才能相互通信,而连接的媒介也就是网线没有区分类别,它会根据端口的不同自动识别。点击设备列表的最后一个,像 RJ-45 水晶后面接着一根线的选项。
点击之后它上面会加一把红叉,表示使用状态,若是你不需要使用连接线了就再点一下它就可以取消,或者鼠标右键也可以,此时我们去点击我们的交换机设备,会弹出一个列表,这是在问我们网线的这一头需要插在设备的哪一个网口上,选择一个之后,点击另外一个设备,就像问网线的这一头选择插在那个网口上?选择一个即可,我们可以看到每个网络接口前面都是一个红灯,这表示没有连接过的接口,若是绿灯,说明该接口已被使用了:
image.png
你或许会觉得这样 IOU1 与 IOU2 命名太不人性化了,一会儿就忘了这台设备最初设立的目的,而且图中也没有注释,也没有接口连接的显示。所以我们可以这样设置:
image.png
通过工具栏中的两个按钮我们可以显示或隐藏已经连线了的网络接口和为我们的拓扑图添加注释,通过双击设备名,或者右键设备找到 change hostname 选项可以修改设备名,当然在 Configure 选项也可以修改。这样可以更人性化地显示所有信息。
做好了准备,我们就可以开启我们的机器让它为我们工作了,如何给他们开机呢?
image.png
有三种方式:
工具栏中点击绿色三角形的按钮,开启所有的设备;
若是不想开启所有设备,可以在画布中按住鼠标左键不放拖动选中自己需要开启的设备然后右键,出现列表选择 start;
使用 Console 控制台,输入命令开启设备,start /all 或者 stop /all 关闭所有设备都可以。
连上了设备,但是没有做任何配置的设备并没有什么用,我们需要连接上两台机器做一些配置,连上设备在 Linux 中默认使用终端来 Telnet 设备,而若是在 windows 的话就需要 putty 或者 SecureCRT 来远程连接上了,而在实际生活中有专门连接的工具。在环境中我们双击我们连接的设备,或者右键设备选择 Console 就可以了:
image.png
这样我们就登陆上了 Switch1,Switch2 的登陆方式与之相同。
登陆上之后我们看到前面的标识是 Switch#,这样的表示方法与 Linux 的终端相类似,主机名加标识符,不同的标识符有不同的权利,交换机与路由器类似有三种模式:
用户模式的标识是 Switch>(hostname>)。这种模式下只有一些简单的命令可以使用;
特权模式的标识是 Switch#(hostname#)。 这种模式下可以查看各种设备信息,大部分都是查看命令,以及清除之类的不保存类型的命令;
全局配置模式的标识是 Switch(config)#(hostname(config)#) 。这种模式下我们可以做各种各样的配置,接口功能的配置;
这样的标识 hostname(config-if)# 是在接口状态,也就是在这种标识下说明我们正在配置某个接口(也就是网口)。
一般情况下远程登陆上去应该在用户模式下,并且可以设置进入特权模式的密码,这样更加的安全。只是在 GNS3 中模拟登陆是直接到特权模式而已。
从用户模式进入特权模式使用 enable 这个命令,从特权模式进入全局模式使用 configure terminal。交换机、路由器的终端很智能,可以使用 Tab 键自动补全命令与 Linux 终端一样,因为命令较长不容易记住所以可以使用命令的缩写。
例如 enable 命令可以直接写成 en 敲回车就可以了,比如说 configure terminal 可以直接缩写成 config t 就可以直接进入全局模式
如果想从这个模式退出返回至上个模式可以通过 exit 命令。若是想直接退出至初始模式可以直接使用 end 命令。
image.png
#进入特权模式的命令,以及缩写命令
enable
en
#进入全局模式
configure terminal
conf t
#interface +网口名(或者叫编号),在全局模式中配置某个接口(也就是网口)
interface e0/0
#忘记命令格式可以通过 命令 + ? 系统会给予提示
interface ?
#返回上个模式,到特权再返回就直接退出
exit
#从任何一个地方直接返回特权模式
end
并且可以使用上下箭头按键来翻阅历史命令。
为了安全,我们可以设置进入特权模式的密码,不仅是为了我们 Console 连接时的安全,也是为了在通过一台机器 Telnet 远程连接到其他机器时登陆安全(因为在实际的网络部署时,并不是所有的机器都会在一个地方,可能会放在其他楼的机房,或者是某一层的弱电室,若是要修改配置或者出问题不可能一一的跑到设备所在的物理位置去改,所以会用到 Telnet 远程连接到其他的设备)。
而在设置允许远程登陆前,我们要设置好 IP,不然如何远程登陆呢?现在我们将设置 Switch1 连接的端口 IP 是 192.168.1.1,与其相连接的 Switch2 连接的端口 IP 是 192.168.1.2
这是 Switch1 的所有配置代码(此处都用命令的全写):
image.png
#进入全局模式
Switch1#conf t
#设置设备名
Switch1(config)#hostname Switch1
#配置连接网线的接口
Switch1(config)#interface ethernet0/0
#因为我们用的是三层交互机,默认使用交换模式,要更改至路由模式,
#否则不能设置 IP 地址,因为这是网络层的功能
Switch1(config-if)#no switchport
#设置 IP 地址,命令+ IP + 子网掩码
Switch1(config-if)#ip address 192.168.1.1 255.255.255.0
#激活接口,此处默认都是打开的,但是真实机上不是如此,要有良好的习惯
Switch1(config-if)#no shutdown
#退出该接口的配置模式
Switch1(config-if)#exit
这是 Switch2 的所有配置代码(此处都用命令的缩写,命令的内容都一样,只有 IP 地址不同):
image.png
Switch2(config)#conf t
Switch2(config)#int e0/0
Switch2(config-if)#no switch
Switch2(config-if)#ip add 192.168.1.2 255.255.255.0
Switch2(config-if)#no sh
Switch2(config-if)#exit
如此便配置好了两个端口的 IP 地址,Switch1 用的全写,Switch2 用的缩写,其实他们的意思、作用都是一样的,只是平时用缩写效率较高一点。但是我们初学时还要保持良好的习惯,使用全写。
鼠标指向线路,右键,选择 start capture,会弹出窗口选择监听哪个端口的数据包,可以选择 Switch1 也可以选择 Switch2 的,当然如果你愿意两个都看也可以。
image.png
我们可以在特权模式中相互 ping 对方的 IP 地址,ping 通了表示配置无误。同时开启 Wireshark 抓取之间相互通信的数据包,看能否正常通信:
image.png
#退出全局模式到特权模式
Switch2(config)#exit
#ping Switch1 设备的 IP 地址
Switch2#ping 192.168.1.1
#ping 的结果显示,发送了 5 个数据包,4个通
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
.!!!!(感叹号表示通,点表示没通)
Success rate is 80 percent (4/5), round-trip min/avg/max = 4/4/5 ms
此时能够相互通信了,我们就可以为 Switch1 设置允许其他设备登陆,并且设置登陆的密码:
image.png
#进入全局模式
switch1#config terminal
#忘记参数,通过问号查看该命令的参数
switch1(config)#enable ?
#设置进入特权模式加密口令,就是在查看配置时密码是md5加密的
switch1(config)#enable secret shiyanlou(密码自定义)
#进入控制台口
switch1(config)#line console 0
#进入设备的虚拟终端
switch1(config-line)#line vty 0 4
#允许其他设备远程登录,否则是拒绝访问的
switch1(config-line)#login
#设置登录密码xx,不设置不允许登陆
switch1(config-line)#password xx
配置后我们需要测试是否成功实现功能,在登陆时是否需要密码与是否需要密码才能进入特权模式:
image.png
#使用 telnet 远程登陆命令
telnet 192.168.1.1
由此看出我们的配置无误,并且通过 Wireshark 也可以看到他们正常通信的数据包。
通过这样的小实验我们了解了 GNS3 仿真模拟工具与 Wireshark 抓包工具的简单使用,以及登陆交换机终端的一些简单操作与配置。
或许你还在疑惑 Ping 是什么、协议又是什么、IP 是什么、子网掩码是什么,甚至什么是网络?接下来就为大家一一解释。
网络的基本概念
计算机网络是现代的通信技术和计算机技术相结合的产物,随着其不断的发展,它影响着我们生活的各个方面。那么这个能让人与人之间的距离更近、给我们的带来共享资源的网络的本质是什么呢?既然称之为计算机网络,那么必定有计算机与网络的组成元素。
网络(network):是通过许多的结点(node)和连接这些结点的链路(link)而组成的。网络中的结点可以是计算机,集线器,交换机或者路由器等等的一些网络设备,而链路则是网线,无线信号等等这样的连接介质。
计算机网络:是把分散在不同地理位置的主机或者外部设备(如交换机,路由器等等)利用通信线路连接成一个规模大,功能强的网络系统,以实现数据通信和资源的共享。
网络中可以没有计算机,只有一些外部设备,但是这样的网络并没有任何的价值,而计算机网络则是必有计算机,这样对网络功能的合理利用。而文中后续提到的网络都是指的计算机网络。
image.png
很多情况下,我们用一朵云来表示一个网络,这样可以宏观的去看待一个网络,屏蔽掉一些我们不需要关心的一些细节问题。
有结点与链路便可形成一个网络,这样我们可以构建出无数个网络出来,而网络与网络之间还可以通过路由器互连起来,这样就可以构成一个覆盖范围更大的网络,也就是互联网。而大家所熟知的因特网(Internet)是世界上最大的互连网络。在初期,为了宏观的展示网络的结构,大家都习惯把连接在因特网上的计算机都称为主机(Host),并用一朵云来表示因特网。
由此我们对网络会有这样的一个认识:
计算机网络是许许多多的计算机和网络设备所构成的,而因特网则是由于许多小的网络(子网)互联而成的一个逻辑网构成的。
而这样的计算机网络主要会给我们带来最主要的两个功能:
数据通信:数据通信是计算机网络最基本的功能,是分布在不同地理为止的计算机用户相互通信、传递消息(声音,图像等等多媒体信息)。
资源共享:可以让硬件共享如打印机、服务器等等,可以让软件共享如数据库等等,可以让信息共享如代码、书籍等等。
拥有这么多功能的计算机网络,必定会被人们所不断挖掘,所以庞大的因特网是也是逐步逐步发展而来的:
1969年,美国国防部高级研究计划局(Advance Research Projects Agency,ARPA)开始建立一个命名为ARPANET 的网络。当时建立这个网络的目的是出于军事需要,计划建立一个计算机网络,当网络中的一部分被破坏时,其余网络部分会很快建立起新的联系。人们普遍认为这就是Internet的雏形。此时还是一个单独的网络。
美国国家科学基金会(National Science Foundation,NSF)在 1985 开始建立计算机网络 NSFNET。NSF 规划建立了 15 个超级计算机中心及国家教育科研网,用于支持科研和教育的全国性规模的 NSFNET,并以此作为基础,实现同其他网络的连接。NSFNET 成为 Internet 上主要用于科研和教育的主干部分,代替了 ARPANET 的骨干地位。1989 年 MILNET(由ARPANET分离出来)实现和 NSFNET 连接后,就开始采用 Internet 这个名称。自此以后,其他部门的计算机网络相继并入 Internet,ARPANET 就宣告解散了。由此开始网络间的相互连接
20世纪90年代初,商业机构开始进入 Internet,使 Internet 开始了商业化的新进程,成为 Internet 大发展的强大推动力。1995年,NSFNET 停止运作,Internet 已彻底商业化了。而提供这样网络服务的商业公司称之为 ISP(Internet Service Provider,因特网服务提供商)
ISP 可以从管理机构申请到许多的 IP 地址,并且拥有自己铺设好通信线路,而我们只需要缴纳费用就可以通过电话线把你的计算机或其他终端设备连入Internet,这样我们就可以上网了。
ISP 分为不同的层次:主干 ISP、地区 ISP和本地 ISP。随着因特网上数据流量的急剧增长,为了更有效率的利用网络资源,快速的转发分组,诞生了因特网交换点 IXP(Internet eXchange Point)。
image.png
在 1992 年因特网不再归美国政府管辖,因此一个国际性组织——因特网协会(Internet Society,简称 ISOC)成立了,以便对因特网在全世界的促进发展与使用。旗下有一个技术组织叫因特网体系结构委员会 IAB(Internet Architecture Board),负责因特网相关协议的开发,其下有两个工程部:
因特网工程部 IETF(Internet Engineering Task Force)主要针对协议的开发与标准化。
因特网研究部 IRTF(Internet Research Task Force)主要是进行理论方面的研究和探索一些长期需要考虑的问题。
所有的因特网标准都是以 RFC(Request For Comments:请求评论)的形式在因特网上发表的。
这便是网络的一些基本概念以及它的一些由来与发展。
网络分类与层次的划分
我们从上文了解到,因特网也是由网络与网络直接相互连接而形成的庞大网络,由此看出网络也有大小之分,如此看来网络应该有各种分类方式:
以网络的覆盖范围分为:
局域网(Local Area Network,LAN):覆盖在较小范围内的工作站或者校园等等,小于 1 km 的范围左右
城域网(Metropolitan Area Network,MAN):覆盖在一个城市范围左右的网络,大概的范围在5~50公里
广域网(Wide Area Network,WAN):覆盖一个国家或者是跨越国家的范围,通常为几十到几千公里的范围
以网络的传输介质分为:
有线网络
无线网络
以网络的使用者分为:
公用网(public network):就是所有愿意按相关公司的规定交纳费用的人都可以使用这种网络。因此公用网也可称为公众网,如CHINANET。
专用网(private network):是某个部门为本单位的特殊业务工作的需要而建造的网络。这种网络不向本单位以外的人提供服务。例如,军队、铁路、电力等系统均有本系统的专用网。
既然网络的大小有其划分的指标,那么计算机网络的性能也有其性能评价的指标:
速率:比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。速率便是指出其每个时间单位所能发出的数据,其单位是 b/s,或kb/s, Mb/s, Gb/s 等。
带宽:本来是指信号具有的频带宽度,现在带宽是数字信道所能传送的最高数据率。
吞吐量:表示在单位时间内通过某个网络(或信道、接口)的数据量。
时延:是指数据从网络的一端传输到另一端所需的延迟,总时延=发送时延+传播时延+处理时延+排队时延
时延带宽积:网络性能的两个度量:传播时延和带宽相乘,表示链路可以容纳多少个比特。
往返时间 RTT:往返时间RTT(Round-Trip Time)表示从发送方发送数据开始,到发送方收到来自接受方的确定(接受方收到数据后便立即发送确认),总共经历的时间。
利用率:分为
信道利用率:指出信道被利用的时间的百分比。
网络利用率:全网络的信道利用率的加权平均值。
通常以这样的 7 个性能指标来评定网络的性能,这只是初步的了解,若希望有更深入了解的同学请积极翻阅资料。
从网络的分类与其性能的指标我们可以看出一个网络可大可小,速度有高有低,那么一个网络的设计总得有规划与设计吧。为了更直观的看出网络的结构,出现了一种被称为拓扑图的新方式,它从图论演变而来的,是一种研究与大小形状无关的事物,以点、线为元素的方法。网络拓扑结构是指用传输介质互联各种设备的物理布局,以工作站,服务器等网络单元抽象为点,网络中的通信介质抽象为线。网络拓扑结构对整个网络的涉及、功能、可靠性和成本等等方面都有很大的影响。
而常见的计算机网络的拓扑结构有星型,环型、总线型、树型还有网状型,如下图所示:
image.png
星型拓扑网络(star):各节点通过点到点的链路与中央结点连接,星型拓扑的优点是很容易增加和移动结点。缺点是集中控制,一旦中央结点故障则整个网络瘫痪。
环型拓扑网络(ring):结点通过点到点的线路连成闭合环路。优点是延时确定,结构简单,缺点是环中某个结点出现故障就会造成网络瘫痪。
总线型拓扑网络(Bus):所有结点共享一条数据通道,优点是铺设的线缆短,成本低,某个结点故障并不会影响,所以它是用的最普遍的一种拓扑结构之一了,其缺点是实时性差,总线的故障会导致全网瘫痪
网状型拓扑网络(Fully Conneted):结点之间任意相互连接,没有规律,优点是可靠性高,但是结构较为复杂,路由的选择算法与流量控制的方法需要有所选择。广域网基本上都是采用的这样的拓扑结构。
这再次证明了计算机网络是一个非常复杂的系统,这是从宏观的角度来看,我们还可以从微观的角度来看,如两台计算机之间相互传输文件,除了有一条传输数据的线路,还需要判断通路是否能传输,告诉网络如何识别接收数据的计算机、文件内容的格式是否兼容等等一系列的潜在操作。
不仅仅是传输文件,其他工作也会如此,相互通信的两个计算机必须高度协调才行,而要做到这样高度协调需要许多复杂的操作,这样的操作通过通信协议(将在后面进行解释)来完成。
通常使用 实体 来表示:任何可发送或接收信息的硬件或程序。就如上文的例子,传输文件我们可以靠某个程序,而运行起来的某个程序在系统中我们称之为进程,每个进程就是一个实体。协议就是控制两个或者多个相同层次的实体进行通信的规则的一个集合。
无论从微观还是宏观的角度,我们都见识到了计算机网络是一个非常复杂的系统。计算机网络的涉及面极为的广泛,不仅涉及到网络硬件设备,还有各种各样的软件协调。为了计算机网络,在最初的 ARPANET 设计时就提出了分层的方法。分层可将庞大并且复杂的问题转化为若干小型的问题,这样小型的问题,更易于实现。(这也是编程中面向对象的思想)
为了让不同体系结构的网络也能够互连,国际标准化组织 ISO 站出来,在 1977 年成立了专门的机构研究。不久后便推出了一个标准框架:开放系统互连基本参考模型 OSI/RM(Open System Interconnection Reference Model),简称 OSI。只要遵循这个标准全世界的用户都可以相互通信。
而虽然在 1983 年推出了该标准化的文件,也就是 ISO 7498 国际标准,但是在该标准出来之前因特网已经全球广泛的流行起来了,而其使用的是 TCP/IP 协议簇,并非国际化标准的 OSI。
这些标准化的文件就像是法律的一条条法规,作为一种约束来使得网络易于管理,有秩序。法规是规范的准则,在有法可依的同时也需要有执法人员,协议便是这样的执法人员。
网络协议主要是由以下 3 个要素所组成的:
语法(syntax):对语句与信息的结构与格式的一个控制
语义(semantics):表示做出某种行为,举动的一个表达
同步(synchronization):是事件发生的先后顺序的详细说明
就像我们书写代码一般,需要遵循该语言的语法要求,按照其格式书写,如缩进,在语句之后需要分号或者是冒号或者什么都没有等等,而语义就是我书写的这代码的作用,我是要让他计算 1~10 的和还是排序等等的操作,同步也就是我们语句的执行顺序,只有先定义变量别且赋值了我们才能输出呀。
或者这样理解,我们去了西餐厅吃饭,我们需要一只手拿刀,一只手拿叉,不能一只手同时拿刀叉是吧,这样就没办法吃饭了,而我若是举手示意或者叫一声服务员,服务员就会过来询问响应我的请求这就是语义,也就是我做了某个动作之后就会有一定的效果。而只有我点菜了才会上菜,只有上菜了我才能吃,只有我吃完了才会去结账,这就是同步。每件事情都有其发展的顺序,不可能我先结帐了再点菜,不可能我先吃饭了再点菜对吧。
这就是协议,帮助我们实现,协调两个结点之间的相互通信。而上文也提到了两个结点之间的通信是相当复杂的一件事情,需要协调许多东西,我们不可能把所有的功能都放在一个协议中,或者几个协议中,因为若是这样的话,关联性太大,若是出现错误不利于问题的定位和修改,所以在上文也提到过,在网络的设计的时候便采用分层次的设计。
分层可以带来这样的好处:
很灵活:分解成相对独立的模块,易于实现,维护。并且在功能的修改,增加,减少的时候更加的方便,因为相对独立,牵扯不会太大,就像手机,其他的部件都是好的,就是电池坏了,因为它是独立的模块,所以我可以单独换掉电池手机就好了,但是若是它和手机是一个整体,我就只有换手机了,代价就太高了。
标准化:每一层都有明确的说明,什么样的功能,什么样的协议放在那一层就会非常的明确。
我们将这样的计算机网络的各层及其协议的集合称为网络的体系结构(architecture)。也就是说计算机网络的体系结构就是这个计算机网络及其构建所应完成功能的精确定义。
这就是协议,分层,标准。我们在实际生活中常常会提到三种标准,一种是国际法律所认可的 OSI 参考模型,一种是广大人民群众所适用的 TCP/IP 模型,还有一种就是我们认为弥补了 TCP/IP 的不足而产生的更合理的五层协议的体系结构。
image.png
OSI 的七层协议体系结构虽然它既复杂又不实用,但是其概念清楚,理论也比较的完善。
这七层模型主要分为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层,其中各层次的作用分别是:
应用层:应用层(Application Layer)为 OSI 参考模型的顶层,功能一般包括资源的可用性和同步通信的确定。
表示层:表示层(Presentation Layer)是 OSI 参考模型的第六层,表示层主要针对的是所传输的信息的语法与语义,独立的数据表示(例如,加密,解密,数据压缩,恢复等等),通过应用程序和网络格式之间的翻译,它有时也被称为语法层。
会话层:会话层(Session Layer)是 OSI 参考模型的第五层,会话层控制计算机之间的连接。它建立、管理和终止本地和远程应用程序之间的连接。它提供了全双工、半双工、单工的操作,并建立检查点,终止,重新启动程序等等。
传输层:传输层(Transport Layer)是 OSI 参考模型的第四层,传输层为上一层进行通信的两个进程之间提供一个可靠的端到端的服务,使得传输层以上的各层看不见传输层一下的数据通信细节。
网络层:网络层(Network Layer)是 OSI 参考模型的第三层,网络层提供传输可变长度的数据序列的功能(称为数据报)从一个结点到连接在同一网络的接收端。它将逻辑网络地址转换成物理机地址。
数据链路层:数据链路层(Data Link Layer)是 OSI 参考模型的第二层,数据链路层的主要任务是在两个相邻结点间的线路上无差错地传输以帧(Frame)为单位的数据,是数据链路层对网络层显现为一条无差错线路。
物理层:物理层(Physical Layer)是 OSI 参考模型的最底层,物理层主要是透明的传送二进制比特流。
这便是 OSI 的参考模型的层次划分与设计,而在 OSI 出来之前已经在世面上流行的 TCP/IP 模型并没有划分的这么细(或者说是这么繁复),TCP/IP 的体系结构只是因为 TCP 与 IP 协议的重要性,然后基于长期的实际经验而做出了这样的一个层次结构,并没有做过多的理论研究,所以它只有 4 层结构:应用层,传输层,网际层,网络接口层。
其中应用层与 OSI 参考模型的应用层项对应,而在 TCP/IP 中认为表示层与会话层对大多数应用程序并没有什么用处,完全可以归结于应用层中,所以并没有这两层的存在。而其传输层与 OSI 中相对应,网际层与网络层相对应,而网络接口层则与物理层和数据链路层相结合的一个对应。其实它只是一个接口并没有做明确的层次划分。
而在长期的实践中认为 OSI 的 7 层协议体系结构既复杂又不实用,但是其概念非常的清楚,而 TCP/IP 虽然得到了全世界的承认但是并没有一个完整的体系结构,因此在学习计算机网络的体系结构时可以采用一种折中的办法,就是把 OSI 的会话层与表示层去除,而保留其最底层的两层结构,从而形成一种原理体系结构,只有五层。
五层的体系结构是一种理论与实践并重的结构,逻辑清晰、结构简单并且相当实用。
这便是网络协议的层次结构,以及其简单的演变。