在开始之前放上一张本文章的核心图片,要一直记住图中的内容!!!
一、概念理解
首先我们知道分析网络的时候有两种模型,一种是OSI七层模型,另一种就是TCP/IP四层模型。一般来说,我们常用的就是TCP/IP四层模型,很少会使用OSI七层模型。而上面的图片中是五层是因为上面四层是TCP/IP模型,最下面的物理层只是方便我们理解概念用的,基本上也不会涉及,所以实际上的核心还是上面四层的TCP/IP模型。
一般来说我们常见的就是以下五种词汇:
1、IP (Internet Protocol)
IP(互联网协议)是用于在网络中传输数据包的一组规则或标准。它定义了如何将数据从一个设备发送到另一个设备。有两种主要版本的IP协议:IPv4 和 IPv6。IPv4 使用 32 位地址,而 IPv6 使用 128 位地址,以应对地址空间不足的问题。
2、MAC (Media Access Control) 地址
MAC 地址是一个硬件地址,用于标识网络上的物理设备。每个网络接口都有一个唯一的 MAC 地址,通常由 6 组两位十六进制数表示。MAC 地址用于局域网 (LAN) 中的数据链路层,例如以太网。
3、ARP (Address Resolution Protocol)
ARP 是一种用于将网络层地址(如 IP 地址)映射到数据链路层地址(如 MAC 地址)的协议。当一个设备想要向另一个设备发送数据但只知道其 IP 地址时,它会使用 ARP 发现该设备的 MAC 地址。
4、交换机 (Switch)
交换机是一种网络设备,用于连接多个设备形成局域网。它基于 MAC 地址来转发数据帧。现代交换机能够智能地学习连接到它的设备的 MAC 地址,并根据这些信息决定如何转发数据。这样可以提高网络效率,减少广播流量。
5、路由器 (Router)
路由器是一种网络设备,用于在不同网络之间转发数据包。它工作在网络层,通常使用 IP 地址进行路由决策。路由器可以根据不同的网络协议和子网掩码确定数据包的最佳路径,并将其发送到目的地。
二、从链路层开始分析(同一网段内)
2.1 通信过程(直连)
在链路层的时候,我们只知道有物理地址(即 MAC 地址),且每台设备的物理地址是唯一的。这意味着在同一个局域网内,不会有两台设备拥有相同的 MAC 地址。
首先在通信开始之前,我们知道是有一个人先发消息,一个人接收消息。其中这个发送消息的人的地址我们称为源MAC地址,而接收消息的人我们称为目的MAC地址。此时我们通过一根网线将两台电脑设备连接起来,这种方式我们称为直连。假设自己的IP是192.168.0.30,而隔壁老王的IP是192.168.0.100。当我们构建起连接的时候我们可以使用ping去检测我们是否正常连接。
现在我们已知的信息:自己的MAC地址和IP地址,老王的IP地址。
自己 | 隔壁老王 |
连接方式:直连 | |
发送消息 | 接收消息 |
源MAC地址 | 目的MAC地址 |
192.168.0.30 | 192.168.0.100 |
现在我们要怎么知道老王的MAC地址呢?
在这里就要引出ARP协议,通过这个协议我们就可以获得其他设备的MAC地址。那么他又是怎么实现的呢?其实原理就是我们用ARP协议去发了一个ARP请求的广播,所有设备都会收到我们的信息,而只有目标的IP会回复我们的信息,这时候我们就找到了老王的MAC地址。具体实现如下。
我们先构建一个ARP请求帧,其中包含了:
- 源MAC地址:我们自己的MAC地址。
- 目的MAC地址:通常使用FF:FF:FF:FF:FF:FF(全1广播地址),这样网络中的所有设备都会接收到这个帧。
- 请求信息:表明你在寻找哪个IP地址对应的MAC地址。
这个ARP请求帧会被作为一个广播帧发送到整个局域网内。所有的设备都会接收到这个帧,但只有拥有对应IP地址的设备会处理它。拥有对应IP地址的设备会查看ARP请求中的信息,确认这是在询问它的MAC地址。该设备会构建一个ARP响应帧,其中包含:
- 源MAC地址:该设备的MAC地址。
- 目的MAC地址:发起请求的设备的MAC地址。
- 响应信息:表明它就是请求中提到的IP地址的所有者,并提供了它的MAC地址。
之后老王的电脑就会发出这个ARP响应帧。 且ARP响应帧通常是以单播形式发送给发起请求的设备,而不是广播。我们接收到老王的ARP响应后,就可以将目标IP地址与MAC地址关联起来,存入本地的ARP缓存表中。之后,当需要与老王的IP地址通信时,可以直接使用对应的MAC地址构建链路层帧。
2.2 查询ARP缓存表
详细使用见:
[Windows CMD] 查看 IP和物理地址 arp-CSDN博客https://blog.csdn.net/m0_52980547/article/details/140434332?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172310387816800188590618%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172310387816800188590618&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-140434332-null-null.nonecase&utm_term=arp&spm=1018.2226.3001.4450 ARP缓存表是操作系统用来存储IP地址与MAC地址对应关系的地方,还可以查看记录的MAC地址有效期。在Windows系统中打开命令提示符(cmd.exe),输入 arp -a
命令来显示ARP缓存表的内容。在Linux系统中,打开终端,输入 arp -a
或 arp -n
命令来查看ARP缓存表,-a
显示所有条目,包括动态和静态条目;-n
则只显示动态学习的条目。
ARP缓存表中的MAC地址不是永久有效的,它们有一个有效期。操作系统通常会为ARP缓存表中的每个条目设置一个老化时间,默认通常是几分钟(例如10分钟或20分钟)。如果在这段时间内没有收到相关的ARP请求或响应,该条目就会从缓存中删除。如果在这段时间内仍然与该IP地址通信,每次通信都会刷新该条目的有效期,这样可以确保缓存中的信息保持最新。你也可以手动清除ARP缓存表中的条目。在Windows中,你可以使用 arp -d
命令来删除指定的条目或全部条目。在Linux和Mac OS X中,同样可以使用 arp -d
命令来删除缓存条目。
示例命令:
- 在Windows中清除ARP缓存表中的所有条目:
arp -d *
- 在Linux和Mac OS X中清除ARP缓存表中的所有条目:
arp -d
2.3 同一网段内
为什么同一网段内的设备可以互相通信:
1、相同的子网掩码:
- 同一网段内的所有设备都使用相同的子网掩码。子网掩码定义了IP地址中哪些部分代表网络部分,哪些部分代表主机部分。
- 例如,对于一个C类网络(如192.168.1.0),子网掩码通常是255.255.255.0,这意味着前三个八位组表示网络地址,最后一个八位组表示主机地址。
2、直接通信:
在同一网段内的设备可以直接通过链路层(数据链路层)相互通信。这意味着它们可以通过以太网或其他物理层技术直接发送和接收数据帧,不需要经过路由器或其他网络设备。
3、广播和多播:
同一网段内的设备可以利用广播或多播功能发送数据给所有设备或一组设备,而不必知道每个设备的具体IP地址。例如,ARP请求就是一个典型的广播消息,用于获取特定IP地址对应的MAC地址。
4、自动寻址:
设备通常会通过DHCP(Dynamic Host Configuration Protocol)从网络中的DHCP服务器自动获取IP地址和子网掩码。这样确保了同一网段内的设备具有相同或兼容的子网掩码。
5、MAC地址解析:
当一台设备需要与另一台设备通信时,它首先会查找ARP缓存表中是否有该IP地址对应的MAC地址。如果没有,它会发送一个ARP请求广播,询问该IP地址对应的MAC地址。一旦获取到了MAC地址,就可以直接通过链路层进行通信了。
6、路由无关:
同一网段内的设备之间的通信不需要考虑路由表,因为它们位于同一广播域内。这意味着数据包不需要经过路由器,而是直接在局域网上广播或直接发送到目的MAC地址。
总结:同一网段内的设备之所以可以互相通信,是因为它们共享相同的网络配置,包括子网掩码和广播域。这种配置使得设备可以直接通过链路层进行通信,无需经过路由器或其他网络设备。
2.4 通信过程(交换机)
刚刚我们两台设备之间是通过一根网线直连的方式进行连接,假设这时候我们多了一个朋友老李同志要一起通信,我们就要使用交换机进行连接。比如我刚和老王通信,老李看到也来了,我想一会和老王通信,一会和老李通信,我们的电脑就要通过一根网线接入同一个交换机的不同端口来进行通信。我们想知道交换机是怎么工作的呢?要怎么实现我一会要和老王对话,一会又要和老李对话,这样反复的通信?现在我们先手动配置IP地址,确保每台设备的IP地址都在同一网段内,且不冲突,配置好后的ip如下面表格所示。
自己 | 隔壁老王 | 老李同志 |
连接方式:交换机 | ||
发送消息 | 接收消息 | 接收消息 |
源MAC地址 | 目的MAC地址_1 | 目的MAC地址_2 |
192.168.0.30 | 192.168.0.100 | 192.168.0.20 |
那么交换机的工作原理是什么呢?
交换机是一种网络设备,它工作在网络的第一层(数据链路层),主要用于在局域网(LAN)中高效地转发数据帧。交换机的工作原理涉及到数据帧的接收、学习、转发和过滤等多个方面。数据帧的内容:
1、帧头:
- 源MAC地址:发送数据帧的设备的MAC地址。
- 目的MAC地址:接收数据帧的设备的MAC地址。
- 类型字段:指示高层协议类型,如IPv4或IPv6。
- 其他控制信息:可能还包括错误检测码(如CRC校验码)。
2、数据:
- 包含来自更高层协议(如IP协议)的数据。
3、帧尾:
- 通常包含结束标志或额外的错误检测码。
当我们把电脑接入交换机的一个端口的时候,电脑并不会立即发送数据帧给交换机。只有当我们尝试与其他设备通信的时候才开始发送数据帧。并且这个数据帧可能是一个广播帧(例如ARP请求),也可能是一个直接发往特定设备的数据帧。
当交换机接收到一个数据帧时,它会读取帧头中的源MAC地址,并记录该MAC地址与交换机端口之间的对应关系。其中这个对应关系表称为MAC地址表(也称作转发表或学习表),记录每个MAC地址与其所连接的端口之间的对应关系。这样,交换机就知道了哪个MAC地址连接到了哪个端口。
接着交换机会检查数据帧的目的MAC地址,如果目的MAC地址已经存在于MAC地址表中,交换机就会将数据帧直接转发到对应的端口。如果目的MAC地址不存在于MAC地址表中,交换机会将数据帧广播到所有端口(除了接收到该数据帧的端口)。当目的设备接收到数据帧后,它会发送一个响应帧,其中包含其MAC地址。交换机会学习这个MAC地址,并更新MAC地址表。
交换机通过学习MAC地址表这种方式来减少不必要的广播流量,还可以避免广播风暴的发生,提高网络效率。不仅如此,交换机还可以检查数据帧的完整性,例如通过CRC校验来确保数据帧在传输过程中没有损坏,如果检测到错误,交换机会丢弃该数据帧。
并且为了防止MAC地址表过时,交换机会对MAC地址条目设置一个老化时间(通常是几分钟)。如果在这个时间内没有收到某个MAC地址的任何通信,该条目就会从MAC地址表中删除,这样可以确保MAC地址表中的信息是最新的。
根据上面交换机的原理,现在我们来和老王与老李进行通信。
当我把电脑接入交换机的一个端口时(此时交换机尚未连接其他设备),我的电脑不会立即发送数据帧给交换机。然后等老王也将他的电脑接入了交换机的另一个端口,老王的电脑也不会立即发送数据帧给交换机。
当我尝试与老王的电脑通信时,我的电脑会构建一个数据帧,其中包括目的MAC地址(老王的电脑的MAC地址)。我的电脑发出数据帧后,交换机会学习源MAC地址(我的电脑),并将其与连接的端口关联起来。由于交换机尚未学习到老王的MAC地址,所以我的电脑会发送一个广播帧(例如ARP请求)来获取老王的MAC地址。老王的电脑接收到广播帧后,会回应一个带有自己MAC地址的帧(例如ARP响应)。这样交换机就会学习老王的电脑的MAC地址,并将其与接收到该数据帧的端口关联起来。
一旦交换机学习了老王的MAC地址,它就可以直接将数据帧转发到老王连接的端口。类似地,当你需要与老李通信时,交换机也会通过同样的方式学习和转发数据帧。
这样我们就可以轻松地在与老王和老李之间切换通信。当我想要与老王通信时,交换机会将数据帧转发到老王的端口;当我想要与老李通信时,交换机会将数据帧转发到老李的端口。
三、从网络层开始分析(不同网段内)