常见概念
网络由 节点、节点之间的链路 和 管理节点间数据传输的协议 组成。
节点 node
节点指连接到网络的物理电子设备,比如电脑、打印机、路由器等,在网络上进行信息的收发,彼此连级。通常,路由器将网络连接到因特网,交换机运行在网络内部,促进内网通信。
链路 link
链路连接网络中的节点,可以是有线的(比如以太网),也可以是无线的(比如 WiFi),可以是一对一的(A-B),也可以是一对多的(A-B且A-C)。
协议 protocol
协议是一组互相商定的规则,规定了数据应该按照什么形式进行转换,以允许网络中的两个节点交换数据。
协议定义了管理通信过程中语法(可通信的内容)、语义(如何通信)以及同步(何时通信以及通信的速度)的规则。协议可以由硬件、软件或二者的组合实现。协议可以由任何人创建,但是最被广泛采纳的协议都是基于标准的。
拓扑 topology
拓扑(topology)描述的是节点和链路如何在网络配置中组合在一起,通常用图描述。
双工 duplex
大家都知道“双向”传输,及 A、B 之间的数据可以互相传递,但这不意味着两个过程可以同时进行。
“双工”是对双向的一个更具体的描述,进一步区分了双向传输的方式。主要分为以下两类:
- 半双工:允许在两个方向上进行传输,但不能同时进行
- 全双工:允许同时在两个方向上进行数据传输
网络层次划分
国际标准化组织(ISO)在1978年提出了”开放系统互联参考模型”,即著名的 OSI/RM模型(Open System Interconnection/Reference Model)。
它将计算机网络体系结构的通信协议划分为七层,目的是为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络
下面这张图可以简明地表示常见的三种网络层次划分之间的关系:
OSI七层模型
全称 Opne System Interconnection
,及开放式系统互联参考模型,是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互联为网络的标准框架。
OSI 是一种理论下的模型,引入了服务、接口、协议、分层的概念,这为 TCP/IP 协议的建立提供了参考。
自上而下分为以下七层,简单说说每一层的功能:
- 应用层 Application 🟦
为应用程序提供网络服务。它是计算机用户、以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。
协议:HTTP、TFTP、FTP、NFS、WAIS、SMTP…… - 表示层 Presentation 🟦
数据编码、转换、加密解密。它负责将应用处理的信息格式与适合网络传输的格式互相转换,同时消除不同设备之间固有数据格式的差异。
协议:Telent、Rlogin、SNMP、Gopher…… - 会话层 Session 🟦
创建、维护、管理会话连接。它负责建立和管理应用程序之间的通信。
协议:SMTP、DNS…… - 传输层 Transport 🟩
数据通信。它负责创建、维护、管理段到端的连接,监控数据传输服务的质量,保证报文的正确传输。
协议:TCP、UDP…… - 网络层 Network 🟩
IP 寻址和路由选择。通过路由选择算法,为报文或通信自王选择最适当的路径。
协议:IP、ICMP、ARP、RARP、AKP、UUCP…… - 数据链路层 Data Link 🟨
控制网络层与物理层之间的通信。它负责接受来自物理层的位流式数据,将其封装成帧,传输到网络层;或者将来自网络层的数据帧,拆装为位流式数据转发到物理层。
协议:FFDI、PDN、Arpanet…… - 物理层 Physical 🟥
比特流数据传输。
协议:IEEE 802.1A、IEEE 802.2……
以上七层,每一层都实现各自的功能和协议,并与相邻层的接口通信。
IP 地址
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址,是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
每个 IP 地址包括两部分:
- 网络号
用于在互联网中定位用户的网络,同一个物理网络上的所有主机都使用同一个网络号。对于网络号相同的设备,无论实际所处的物理位置如何,它们都处在同意网络中。 - 主机号
用于标识具体设备,网络中每一个主机号都对应一个主机(包括服务器、路由器等),同一网络上的设备都具有唯一的 IP 地址,只有 IP 地址唯一才能正常通信。
为什么要使用 IP 地址?
单个局域网网段中,我们可以使用 MAC 地址进行通信。但在路由式网络中,计算机之间不能使用 MAC 地址通信,这是因为 MAC 地址不能跨路由接口运行。
IP 地址分类
IP 地址根据 网络号 的不同分为 5 种类型:A 类地址、B 类地址、C 类地址、D 类地址和 E 类地址。A、B、C 三类常用于一般主机,D、E 两类有特殊用途。
- A 类地址
一个 A 类 IP 地址由 1 字节的网络地址和 3 字节主机地址组成。网络地址的最高位必须是0
,即第一段数字范围为 1~127。
每个 A 类地址理论上可连接 16777214 台主机,互联网中有 126 个可用的 A 类地址,用于政府机构、大型企业等。 - B 类地址
一个 B 类 IP 地址由 2 字节的网络地址和 2 个字节的主机地址组成。网络地址的最高位必须是10
,即第一段数字范围为 128~191。
每个 B 类网络可以容纳 65534 台主机,用于中等规模的网络,如学校、公司、机构等。 - C 类地址
一个 C 类 IP 地址由 3 字节的网络地址和 1 字节的主机地址组成,网络地址的最高位必须是110
,即第一段数字范围为 192~223。
每个 C 类网络最多只能包含 254 台计算机,用于小规模网络,如家庭、办公室、局域网等。 - D 类地址
D 类 IP 地址第一个字节以1110
开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。 - E 类地址
以11110
开始,为将来使用保留。240.0.0.0
到255.255.255.254
,255.255.255.255
用于广播地址。
IPv4 & IPv6
IPv4
和 IPv6
都是互联网协议,用于在网络中传输数据。它们之间主要的区别在于地址长度和可用地址数量。
IPv4
(Internet Protocol Version 4)是网络层协议的第四个修订版本,也是此协议第一个被广泛部署和使用的版本。IPv4 地址由 32 位(4字节)地址组成,因此地址空间中只有约四十亿(4,294,967,296,2^32)个地址。
IPv4 是一种无连接的协议,操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付数据包,意即它不保证任何数据包均能送达目的地,也不保证所有数据包均按照正确的顺序无重复地到达。
这些方面是由上层的传输协议(如传输控制协议)处理的¹。
IPv6(Internet Protocol Version 6),也被称为 IPng(IP Next Generation),是网络层协议的第二代标准协议。
IPv6 可以看作 IPv4 的升级版,它们之间最显著的区别是:IP 地址的长度从 32 比特增加到 128 比特,这意味着 IPv6 具有比 IPv4 大得多的编码地址空间。因此新增的地址空间支持 2^128 (约3.4×10^38)个位址。
有句话怎么说来着:IPv6 允许人们给地球上每粒沙子都分配一个 IP 地址。这也能体现出 IPv6 编码地址空间的庞大。
MAC地址
MAC地址
(Media Access Control)是网络设备的唯一标识,也被称为物理地址或硬件地址。它是由网卡生产厂家烧入网卡的 EPROM(一种闪存芯片),用来定义网络设备的位置。
广播地址
广播地址
(Broadcast Address)是一种特殊的 IP 地址,用于在网络中发送信息到所有设备。
广播地址专门用于同时向网络中(通常指同一子网)所有工作站发送数据的一个地址。
在使用 TCP/IP 协议的网络中,主机号为 255 的 IP 地址为广播地址,广播的分组传送给同一个子网的所有计算机。
例如,对于 10.1.1.0
(即 255.255.255.0)网段,其广播地址为 10.1.1.255
,当发出一个目的地址为 10.1.1.255
的数据包时,它将被分发给该网段上的所有计算机。
广播地址主要有两类:
- 受限广播
路由器不会转发受限广播的数据包,但同一个子网的所有主机都会接收到受限广播的数据包。IP 地址的网络号和主机号均为 255 就是受限广播地址255.255.255.255
。 - 直接广播/定向广播
直接广播可以被路由转发,发送到目标网络的所有主机。例如,IP 地址为192.168.2.1
的主机也可以发送广播到192.168.1.0
网络。IP 地址的网络字段定义这个网络,主机号通常为 255,如192.168.10.0/24
的直接广播地址为:192.168.10.255
。
组播地址
组播地址(Multicast Address)是用于一对多通信的一种特殊IP地址。它允许一个主机发送数据包到加入了特定组播组的所有主机。
环回地址
环回地址是一个特殊的 IP 地址,用于网络中的设备向自身发送通信。在 IPv4 中,回环地址的范围是 127.0.0.1
到 127.255.255.254
。
环回地址有以下几个主要用途:
- 测试网络配置
如果你能够成功地 ping 通127.0.0.1
,那就说明你的网络配置没有问题。 - 运行本地服务
有些服务器/客户端应用程序在运行时需要调用服务器上的资源。当这些程序需要在同一台机器上运行而没有其他服务器时,可以将服务器的资源装在本机,将服务器的IP地址设为127.0.0.1
。 - 路由器管理
在配置路由器时,通常会将环回地址作为管理地址。例如,我们可以通过 telnet IP 到你所要管理的那个路由器,这个 IP 就是你所设置的环回地址。
开发人员经常使用环回地址来测试网络应用。例如,如果你正在开发一个 Web 服务器,并且想要在本地测试它,你可以启动服务器并让它监听127.0.0.1 上的某个端口。然后,你可以打开浏览器并导航到http://127.0.0.1:port
(其中 port
是你的服务器正在监听的端口),以查看服务器的响应。
关于我们常用的localhost
和127.0.0.1
,二者可以互换使用,实际上我们在使用时也是这么做的。但二者还是存在区别的:
127.0.0.1
不需要解析,localhost
需要解析查找其对应的 IP 地址。- 依据上一条,
localhost
并不一定解析为127.0.0.1
,也可能解析为地址环回块中的其它地址。
私有地址
私有地址是指在互联网上不公开使用,而只在局域网内部使用的IP地址。私有地址的作用是节省公网IP地址的资源,同时也提高了网络安全性。私有地址有以下三个范围:
- A 类私有地址:
10.0.0.0
~10.255.255.255
,可以容纳约 1.6 亿个主机,适用于大型网络。 - B 类私有地址:
172.16.0.0
~172.31.255.255
,可以容纳约 100 万个主机,适用于中等规模的网络。 - C 类私有地址:
192.168.0.0
~192.168.255.255
,可以容纳约 65000 个主机,适用于小型网络。
私有地址不能直接访问互联网,需要通过网络地址转换(NAT)技术将其转换为公网IP地址才能与外部网络通信。
子网掩码
在了解“子网掩码”之前,你需要先知道 什么是“子网”
子网掩码(Subnet Mask)是一种用于指明一个 IP 地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。它是一个 32 位的二进制数,通常被分割为 4 个“8 位二进制数”,对应到常用的十进制就是 xxx.xxx.xxx.xxx
。子网掩码不能单独存在,它必须结合 IP 地址一起使用。
子网掩码的唯一作用是将某个 IP 地址划分成网络号和主机号两部分。这样做可以提高 IP 地址的分配效率,有效解决 IP 地址资源紧张的问题。同时,网路管理员也可以利用子网掩码,人为地将一个大型内网划分为更多个小规模的子网,再利用交换机的路由功能实现子网互联,从而有效解决了网络广播风暴和网络病毒等诸多网络管理方面的问题。
这里举个 Web 开发中使用子网掩码的例子:
假设我们有一个服务器,其 IP 地址为 192.168.1.1
,并且我们希望该服务器只能与同一子网内的其他设备进行通信。这时,我们可以将子网掩码设置为 255.255.255.0
,这样就只有 IP 地址在 192.168.1.0
到 192.168.1.255
范围内的设备才能与该服务器进行通信。
常用设备
集线器 hub
集线器充当网络中计算机和其他设备的连接点。
当集线器接收到来自某一端口的数据包后,它无法直接把数据包发送给目标节点,而是会采取“广播”的方式,把数据报发送给其他所有与集线器相连的端口。
所有与这个集线器相连的计算机都会接收到这个数据包,即使它们不是目标节点。
集线器有些缺点:以广播的方式传送数据不安全;数据包向所有节点同时发送可能造成网络堵塞,降低了网络执行效率;非双工传输的通信效率低……
但因为集线器便宜且易于设置使用,现实生活中集线器依然能够得到应用,比如家庭或小型企业的内部网络。但在注重效率和安全性的场合,会使用交换机代替集线器。
交换机 switch
交换机同样充当网络中计算机和其他设备的连接点。
交换机工作在模型的物理层和数据链路层,它通过自学习和维护 MAC 地址信息,对以太网帧进行高速而透明的交换转发。当接收到数据帧时,交换机会查找内存中的地址对照表以确定目的 MAC(网卡的硬件地址)的 NIC(网卡)挂接在哪个端口上。然后,通过内部交换矩阵迅速将数据包传送到目标端口,这种工作方式使得交换机具有更高的性能和安全性。
除此之外,相比于集线器,交换机有一些优点:
只有目标设备能看到数据包,这有效控制了网络流量,提高网络执行效率;
交换机能够实现全双工操作,这意味着交换机可以同时接收和发送数据,这种特性使得交换机在处理大量网络流量时具有很高的效率;
交换机可以使用 VLAN(虚拟局域网)技术来隔离广播,见效广播范围,进一步提高安全性和网络性能……
路由器 router
路由器是一种智能的网络设备,通常是一个专门设计用来理解、操作和指导流量的小型计算设备,提供了路由和转送两种机制。
它工作在 OSI 模型的网络层,通过运行路由协议(如 RIP、OSPF、BGP)来维护一张路由表。路由表记录了不同目的地网络的最佳路径。
路由器决定数据包从来源端到目的端所经过的路径,这个过程称为 路由;路由器将输入端的数据包移送至适当的路由器输出端,这称为 转送。
当接收到数据包时,路由器会查看数据包的目标 IP 地址,并根据路由表选择合适的出口接口转发数据包。
如果目标 IP 地址不在路由表中,路由器会将数据包发送到默认网关。
这种工作方式使得路由器具有以下优点:
- 路由器可以连接不同类型和规模的网络,如 LAN、WAN、MAN 等。
- 路由器可以根据网络拓扑和流量状况动态地调整最佳路径。
- 路由器可以过滤广播信息,减少网络拥塞。
- 路由器可以提供高级的安全功能,如防火墙、VPN、NAT 等。
路由器,也被称为三层网络设备。
网桥 bridge
网桥,也被称为桥接器,是一种用于连接两个局域网的存储/转发设备。它能将一个大的局域网分割为多个网段,或将两个以上的局域网互联为一个逻辑局域网,使局域网上的所有用户都可以访问服务器。
网桥工作在数据链路层,在不同或相同类型的 LAN 之间存储并转发数据帧,必要时进行链路层上的协议转换。可连接两个或多个网络,在其中传送信息包。
网关 gateway
网关,又叫网间连接器、协议转换器,作用是在传输层以上实现网络互连,但仅用于两个高层协议不同的网络互连。
在传统 TCP/IP 术语中,网络设备只分成两种:一种为网关,另一种为主机。网关能在网络间转递数据包,但主机不能转送数据包。在主机中,数据包需经过四层协议处理,但是在网关中只需要到达网络层,决定路径之后就可以转送。在当时,网关与路由器还没有区别。但在现代网络术语中,网关与路由器的定义不同:网关能在不同协议间移动资料,而路由器是在不同网络间移动资料。
网关既可以用于广域网互连,也可以用于局域网互连。
在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。
与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求,并提供一定的过滤以及安全防护功能。
常见协议
太常见的就不做记录了,比如 TCP/IP 和 HTTP,这种协议接触 Web 的时候就应该已经看了……
ARP/RARP
ARP 协议
(Address Resolution Protocol)是一个用于将 IP 地址解析为 MAC 地址的协议。
当主机或路由器有数据要发送给另一台主机或路由器时,需要知道对方的网络层地址(即 IP 地址)。
主机发送信息时将包含目标 IP 地址的 ARP 请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;
收到返回消息后,将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。
在实际开发中,ARP 协议主要用于在同一局域网内进行通信。
当一个设备需要向另一个设备发送数据时,它会首先查看自己的 ARP 缓存,看是否已经有了目标设备的 MAC 地址。如果没有,它就会发送一个 ARP 请求,询问目标设备的MAC 地址。
然后,目标设备会回应这个请求,提供它的 MAC 地址,发送设备则将这个 MAC 地址保存在它的ARP缓存中,以便将来使用。
RARP 协议
(Reverse Address Resolution Protocol)则是根据 MAC 地址来获取 IP 地址。
RARP 允许局域网的物理机器从网关服务器的 ARP 表或缓存上请求 IP 地址。
例如,局域网中有一台主机只知道自己的物理地址而不知道自己的 IP 地址,那么可以通过 RARP 协议发出征求自身 IP 地址的广播请求,然后由 RARP 服务器负责回答。
在实际开发中,RARP 协议已经被 DHCP 协议所取代。
DHCP
DHCP 协议
(Dynamic Host Configuration Protocol)是一种用于动态分配和配置网络参数(如 IP 地址、子网掩码、默认网关等)的协议。它可以简化网络管理,提高 IP 地址的利用率,避免 IP 地址冲突等问题。
DHCP 协议的工作原理主要包括四个步骤¹:
- 发现阶段
DHCP 客户端广播发送一个DHCP Discover
报文,以发现网络中的 DHCP 服务器。 - 提供阶段
所有收到 Discover 报文的 DHCP 服务器都会发送一个DHCP Offer
报文,告知用户本服务器可以为其提供IP地址。 - 请求阶段
DHCP 客户端选择一个 Offer 应答报文,并向该服务器发送一个广播的DHCP Request
请求报文,通告选择的服务器,希望获得所分配的 IP 地址。 - 确认阶段
当 DHCP 服务器收到 Request 请求报文后,发送一个DHCP ACK
应答报文,通知用户可以使用分配的 IP 地址。
在实际开发中,DHCP 协议主要用于在局域网内动态分配 IP 地址。当一个设备需要获取网络参数时,它会向 DHCP 服务器发送请求,然后服务器会从预定义的地址池中分配一个 IP 地址,并将这个 IP 地址和其他相关信息(如子网掩码、默认网关等)返回给设备。
这样,设备就可以自动获取并配置网络参数,无需手动设置。
至于前文为什么说 RARP 协议已经被 DHCP 协议所取代,主要是因为 RARP 协议只能提供 IP 地址,而不能提供其他网络参数(如子网掩码、默认网关等)。
而且,RARP 协议需要在每台主机上都设置一个 RARP 服务器,这在大型网络中是不现实的。
相比之下,DHCP 协议可以提供完整的网络配置信息,并且只需要在网络中设置一个或几个 DHCP 服务器即可。
你可以使用 dig
命令在 Linux 下使用 DHCP 协议获取指定域名所在主机的公网 IP 地址:
1 | dig +short ma5hr00m.top @resolver1.opendns.com |
这条命令会向 OpenDNS
的解析器发送一个 DNS 查询请求,查询 ma5hr00m.top
域名的记录。
OpenDNS 的解析器会返回发送请求的公网 IP 。
路由选择协议
路由选择协议是一种网络协议,它决定了数据包在网络中的传输路径。这些协议基于不同的网络性能参数(如带宽、延迟、跳数等)来确定最优路径。
RIP
RIP
(Routing Information Protocol)是一种基于距离向量的路由选择协议,最大的优点是简单。
RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(距离向量)。
RIP 认为一个好的路由就是它通过的路由器的数目少,即 距离短,它要求一条路径最多只能包含 15 个路由器。
由于存在路由环路、可拓展性差等问题,RIP 逐渐被 OSPF 替代。
OSPF
OSPF
(Open Shortest Path First)是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。
OSPF 支持区域的划分,区域内部的路由器使用 SPF 最短路径算法保证了区域内部的无环路。OSPF还利用区域间的连接规则保证了区域之间无路由环路。
在实际开发中,开发者通常需要配置网络设备(如路由器)以使用 OSPF 协议。
如果你想玩玩 OSPF 协议,可以参考这篇文章:Ubuntu20.04 利用 FRR 配置 OSPF 路由协议
DNS
关于 DNS 协议和 DNSSEC,可以看看这篇文章,写得更详细一些:DNSSEC协议