一些关于计网的知识
其实自接触Web安全以来,对计算机网络知识一点不了解那到不至于,只是说这学期开始系统性学习计算机网络,因此有了此文章,同时也供自己时常复习
IP协议基础
在OSI模型中,IP协议属于网络层。网络层的主要作用是负责数据包从源设备到目的设备的传递(P2P通信)。它通过路由选择和逻辑寻址来实现数据包的传输。
数据链路层与网络层
网络层主要负责选择数据包从源设备到目的设备的最佳路径,实现不同子网之间的通信;
数据链路层在物理层提供的服务基础上,负责将数据可靠地传输到相邻节点的目标机网络层;
因此,网络层依赖数据链路层来实现相邻设备之间的数据传输
IP寻址
在IP寻址中,设备通过IP地址来确定数据包的发送和接收。IP地址由网络部分和主机部分组成,网络部分用于路由控制,而主机部分则用于在同一网络内区分不同的设备。因此TCP/IP通信中所有主机或路由器必须设定自己的IP地址
路由控制
路由控制是指在网络中根据IP地址决定数据包的传输路径的过程
路由控制主要通过以下步骤实现:
- 路由表查找:当设备需要发送数据包时,它会根据目的IP地址在路由表中查找匹配的记录。路由表记录了网络地址与下一跳路由器的映射关系
- 路由选择:如果找到匹配的记录,数据包将被转发给相应的下一跳路由器。如果存在多条匹配记录,则选择最长匹配,即具有相同位数最多的网络地址
- 默认路由:如果路由表中没有找到匹配的记录,数据包将被发送到默认路由器(默认网关)进行进一步处理
抽象化
IP是实现多个数据链路之间通信的协议。根据刚才数据链路层与网络层的关系可知,不同数据链路有不同的最大传输单位,IP协议要通过分片处理来适应这些差异,即将大的IP包分成多个较小的IP包,当到目标地址后再被组合起来传给上一层。
无连接通信
IP协议是面向无连接的,这意味着在发送数据之前不需要建立连接。这种方式简化了通信过程,并提高了数据传输的效率。因此会出现丢包等可能性,而TCP才是面向连接的协议,确保对方主机能够收到信息
IP地址
IP地址(IPv4地址)由32位正整数来表示。IP地址在计算机内部以二进制方式被处理,但习惯将32位的IP地址以8位为一组,分成4组,每组以“.”隔开,转换成10进制来表示。
我们前面说过,IP地址由网络部分(网络号)和主机部分(主机号)组成,其中:
网络部分用于标识一个特定的网络或子网,它帮助路由器将数据包转发到正确的网络;
主机部分用于在同一网络内唯一标识一台设备或主机,它使得数据包能够准确地传递到网络内的特定设备。
二者通过子网掩码与IP地址进行逻辑与运算来确定网络部分
1 | IP地址:192.168.1.3 -> 11000000.10101000.00000001.00000011 |
IP地址的分类
A类IP地址:(0.0.0.0 - 127.255.255.255)
二进制表示的第一个八位的最高位不能为1,即00000000 ~ 01111111,十进制的取值范围为0~127;
A类IP地址由1字节的网络地址(地址块)和3字节的主机地址组成,网络地址的最高位必须为0
B类IP地址:(128.0.0.0 - 191.255.255.255)
二进制表示的第一个八位的取值范围为10000000 ~ 10111111,十进制的取值范围为128~191;
B类IP地址由2字节的网络地址和2字节的主机地址组成,网络地址的最高位必须为10
C类IP地址:(192.0.0.0 - 223.255.255.255)
二进制表示的第一个八位的取值范围为11000000 ~ 11011111,十进制的取值范围为192~223;
C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须为110
D类IP地址:(224.0.0.0 - 239.255.255.255)
二进制表示的第一个八位的取值范围为11100000 ~ 11101111,十进制的取值范围为224~239;
D类地址不区分网络地址和主机地址,而是用于标识特定的多播组(允许一个或多个发送者向多个接收者传送信息,常用于多媒体应用、实时数据传输和网络管理)
E类IP地址:(240.0.0.0 - 247.255.255.255)
二进制表示的第一个八位的取值范围为11110000 ~ 11111111,十进制的取值范围为240~255;
E类地址也不区分网络地址和主机地址,主要用于网络协议的测试和开发
特殊的IP地址
所有网络号为127的地址都称之为回路地址(回环地址),回路地址不等同于127.0.0.1
,它们是包含关系,即回路地址包含127.0.0.1
。实际上只要是127.0.0.1
到127.255.255.255
都是回环地址
0.0.0.0
是一个特殊的 IP 地址,通常用于表示一个未指定或未知的地址。它在不同的应用场景中有不同的含义:
- 表示未指定或任意IP地址:在某些情况下,
0.0.0.0
用于表示一个未指定或任意的IP地址 - 服务器监听所有IP地址:在服务器中,
0.0.0.0
表示监听所有可用的IP地址。如果一台服务器有多个IP地址,绑定到0.0.0.0
意味着通过任何一个IP地址都可以访问该服务 - 默认路由:在路由表中,
0.0.0.0
表示默认路由。当路由表中没有找到匹配的路由时,数据包将被发送到默认路由器 - 占位符地址:
0.0.0.0
也被用作占位符地址,在某些网络协议中不便使用具体IP地址时使用 - 局域网内广播源地址:在局域网内的IPv4广播中,
0.0.0.0
可能作为源地址
255.255.255.255
是一个广播地址,用于在局域网中向所有设备发送广播消息。在 IPv4 网络中,这个地址被称为广播地址,它是一个保留的地址,用于将数据包发送到同一网络中的所有设备。
内网保留地址
IPv4地址空间的一部份供专用地址使用,专用地址空间中的IPv4地址叫专用地址,这些地址永远不会被当做公用地址来分配,所以专用地址永远不会与公用地址重复
1 | # 私有地址范围 |
子网掩码
子网掩码是一个32位地址,用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。它结合IP地址一起使用,将某个IP地址划分成网络地址和主机地址两部分;同时也可以区分该IP地址是在局域网上,还是在广域网上
(如果两个设备的IP地址与子网掩码进行与运算后,得到的网络地址相同,则这两个设备在同一局域网中;反之,可能位于不同的广域网中)
子网掩码中的”1” 位表示网络部分,而”0” 位表示主机部分
默认子网掩码
1 | A类:255.0.0.0 |
子网掩码的表现形式
通常使用点分十进制表示,有时和IP地址写在一起,例如: 192.168.1.0/24
,则其中的 /24
表示子网掩码有 24 个 1,那么子网掩码就为 255.255.255.0
我们来看一个例子
1 | 192.168.3.200/25 |
/25
就是25个1,那么子网掩码就是255.255.255.128
通过与运算得到网络地址
1 | 192.168.3.200: 11000000.10101000.00000011.11001000 |
因此基于子网掩码11111111.11111111.11111111.10000000
,主机位全为0则是网络地址,全为1为广播地址
192.168.3.255
;可用地址要除去网络地址和广播地址,2 的主机次方 - 2,最终可用主机数为 126 个(192.168.3.129-192.168.3.254
)同时需要注意的是这只是其中一个子网,另一个子网的可用主机范围是192.168.3.1-192.168.3.127
。
因此192.168.3.0-192.168.3.255
的地址段被划分为两个子网,192.168.3.200属于第二个子网,两个子网中的主机是不能互相通信的,只能与同一子网内的设备通信
子网划分
让我们再来举一个更实际的例子,某公司获得了一个 IP 地址段为 172.16.24.0/23
的网络。该公司需要将这个网络划分为多个子网以满足不同的部门需求:
公司有三个部门,各部门所需最少子网地址数量,销售(60)、技术(10)、营销(129)。基于上述划分,确定每个子网的子网掩码、网络地址范围和广播地址
首先我们先看营销部门
n = 8,32 - 8 = 24
1 | 网络地址: 172.16.24.0 |
其次销售部门
n = 6,32 - 6 = 26
1 | 网络地址: 172.16.25.0 |
最后技术部门
n = 4,32 - 4 = 28
1 | 网络地址: 172.16.25.64 |
网关
网关(Gateway)是网络中的一个关键设备或节点,用于连接不同网络或子网,实现它们之间的通信。它可以是硬件设备(如路由器)或软件实现。
应用场景
局域网与互联网的连接:
家庭或企业网络中,路由器作为网关,连接内部网络和互联网
子网之间的连接:
在大型网络中,网关连接不同子网,实现跨子网通信
不同协议网络的连接:
例如,连接IPv4和IPv6网络时,网关进行协议转换
我们以刚才的子网之间的连接举个例子
现在我们的主机IP地址为:192.168.3.200/25
,这里被分为两个子网(只包含可用地址)
192.168.3.1-192.168.3.127
,网关可以设置为 192.168.3.1
;192.168.3.129-192.168.3.254
,网关可以设置为 192.168.3.129
1.现在我们在路由器上两个接口需要分别连接到这两个子网
接口1:192.168.3.1
(连接第一个子网);接口2:192.168.3.129
(连接第二个子网)
2.每个子网中的主机需要将默认网关设置为路由器在该子网中的接口地址
第一个子网中的主机,IP地址: 192.168.3.10
,默认网关:192.168.3.1
第二个子网中的主机,IP地址: 192.168.3.200
,默认网关:192.168.3.129
3.配置路由器的路由表
路由器需要知道如何转发数据包,对于这种简单场景,路由器通常会自动识别直连的子网
虚拟局域网(VLAN)
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。
广播帧
广播帧是网络中的一种特殊类型的数据帧,用于向网络中的所有设备发送消息,主要用于发现网络中的其他设备、请求服务、通告网络状态等
广播域
广播域(Broadcast Domain)是指网络中所有能接收到同一广播消息的设备集合。它是一个逻辑划分,定义了广播数据包可以传播到的范围。在传统的局域网中,所有连接到同一交换机或中继器的设备通常属于同一个广播域。
换个说法,广播域指的是广播帧所能传递的范围;但当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题
广播风暴
指在网络中,由于某个原因导致广播帧大量泛滥,最终导致网络资源被大量占用,严重影响网络的正常运行。广播风暴通常发生在局域网(LAN)中,特别是在交换机或集线器组成的网络环境中。
因此为了避免这种情况,解决办法的其中之一就是使用虚拟局域网,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,广播报文就被限制在一个VLAN内,同时由于相互隔离也增强了局域网的安全性。
VLAN标签
要使设备能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag)
VLAN Tag用于标识数据帧所属的VLAN,包含四个主要字段:TPID、PRI、CFI和VID
字段 | 作用 |
---|---|
TPID (标签协议标识符) |
标识数据帧是否携带VLAN Tag ;通常为0x8100 ,表示该帧包含802.1Q VLAN Tag |
PRI (优先级) |
用于标识数据帧的优先级,支持8个优先级(0-7),数值越大优先级越高;确保高优先级帧优先传输 |
CFI (规范格式指示符) |
指示MAC地址是否为规范格式 ,0 :表示规范格式(通常用于以太网); 1 :表示非规范格式(用于其他网络类型,如令牌环) |
VID (VLAN 标识符) |
标识数据帧所属的VLAN ,支持4096个VLAN (0-4095), 0 :表示帧不属于任何VLAN (优先级帧); 1 :默认VLAN ; 4095 :保留值,通常不使用 |
在一个VLAN交换网络中,以太网帧主要有以下两种格式:
- 有标记帧(Tagged帧):加入了4字节VLAN标签的帧
无标记帧(Untagged帧):原始的、未加入4字节VLAN标签的帧
用户主机、服务器、Hub只能收发Untagged帧
- 交换机、路由器和AC既能收发Tagged帧,也能收发Untagged帧
- 语音终端、AP等设备可以同时收发一个Tagged帧和一个Untagged帧
为了适应不同的连接和组网,设备定义了Access接口、Trunk接口和Hybrid接口3种接口类型,以及接入链路(Access Link)和干道链路(Trunk Link)两种链路类型
Access接口
Access接口用于连接终端设备(如PC、打印机、IP电话等),通常只允许一个VLAN的流量通过
接收数据帧时:如果帧不带VLAN Tag,则打上接口的PVID(Port VLAN ID),如果帧带VLAN Tag,则丢弃或根据配置处理
缺省VLAN
通常为
VLAN 1
,所有接口在未明确配置VLAN时,默认属于缺省VLAN;当设备接收到未标记(Untagged)的帧时,会将其归类到缺省VLAN中,如果接口配置为Access模式,未标记帧会被打上缺省VLAN的Tag
对于Trunk接口和Hybrid接口,一个接口可以允许多个VLAN通过,但是只能有一个缺省VLAN。接口的缺省VLAN和允许通过的VLAN需要分别配置,互不影响
发送数据帧时:移除VLAN Tag,将帧以普通以太网帧的形式发送
它只能收发Untagged帧,且只能为Untagged帧添加唯一VLAN的Tag
Trunk接口
Trunk接口用于连接交换机、路由器或其他网络设备,允许多个VLAN的流量通过
接收数据帧时:保留VLAN Tag,根据Tag中的VID将帧转发到对应的VLAN
发送数据帧时:保留VLAN Tag,确保接收设备能识别帧所属的VLAN
它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)
Hybrid接口
Hybrid接口是Access和Trunk接口的混合模式,可以灵活地配置某些VLAN带Tag转发,某些VLAN不带Tag转发
接收数据帧时:根据配置决定是否打上VLAN Tag
发送数据帧时:根据配置决定是否保留或移除VLAN Tag
Hybrid接口和Trunk接口在很多应用场景下可以通用,但在某些应用场景下,必须使用Hybrid接口。比如一个接口连接不同VLAN网段的场景中,因为一个接口需要给多个Untagged报文添加Tag,所以必须使用Hybrid接口
接入链路
接入链路只可以承载1个VLAN的数据帧,用于连接设备和用户终端(如用户主机、服务器等)。通常情况下,用户终端并不需要知道自己属于哪个VLAN,也不能识别带有Tag的帧,所以在接入链路上传输的帧都是Untagged帧
干道链路
干道链路可以承载多个不同VLAN的数据帧,用于设备间互连。为了保证其它网络设备能够正确识别数据帧中的VLAN信息,在干道链路上传输的数据帧必须都打上Tag