【总结】TCP/IP四层模型的理解

在开始之前放上一张本文章的核心图片,要一直记住图中的内容!!! 

一、概念理解

        首先我们知道分析网络的时候有两种模型,一种是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.30192.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博客icon-default.png?t=N7T8https://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.30192.168.0.100192.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地址,它就可以直接将数据帧转发到老王连接的端口。类似地,当你需要与老李通信时,交换机也会通过同样的方式学习和转发数据帧。

        这样我们就可以轻松地在与老王和老李之间切换通信。当我想要与老王通信时,交换机会将数据帧转发到老王的端口;当我想要与老李通信时,交换机会将数据帧转发到老李的端口。

2.5 查询交换机内MAC地址表

        查询交换机的MAC地址表通常是通过命令行界面(CLI)完成的。不同的交换机品牌和型号可能会有不同的命令,但大多数交换机都支持类似的命令来查看MAC地址表。

        对于Cisco交换机,查看MAC地址表。使用命令行工具(如PuTTY)连接到交换机的CLI,输入用户名和密码进行登录。输入命令 show mac address-table 或 show mac-address-table 来查看MAC地址表,这个命令会显示交换机当前学习到的所有MAC地址及其对应的端口信息。

        对于其他品牌的交换机查看MAC地址表,多数都支持以下这种类似的命令:

  • show mac-address-table
  • display mac-address
  • show mac-address

 假设你输入了 show mac address-table 命令,输出可能类似于这样:

Mac Address Table
-----------------
Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
  1     0000.1111.2222    dynamic     GigabitEthernet0/1
  1     0000.3333.4444    dynamic     GigabitEthernet0/2
  1     0000.5555.6666    dynamic     GigabitEthernet0/3

        在这个示例中,你可以看到每个MAC地址及其对应的端口号。这表明MAC地址 0000.1111.2222 与端口 GigabitEthernet0/1 关联,0000.3333.4444 与端口 GigabitEthernet0/2 关联,以此类推。 

        需要注意的是,交换机的MAC地址表通常有一个最大容量限制,这取决于交换机的型号和规格。例如,一些低端交换机可能只能存储几百个MAC地址,而高端交换机则可能支持几千甚至上万个MAC地址。交换机的MAC地址表是保持动态的,它会随着网络中的通信而自动更新。当交换机接收到一个新的MAC地址时,它会学习这个MAC地址并将其添加到MAC地址表中。并且为了防止MAC地址表过时,交换机会对MAC地址条目设置一个老化时间(通常是几分钟)。如果在这个时间内没有从某个MAC地址接收到任何数据帧,该MAC地址条目就会从MAC地址表中删除。这样可以确保MAC地址表中的信息是最新的,并且不会因过时的条目而变得臃肿。当然也可以手动清除MAC地址表中的条目。在某些交换机上,你可以使用命令如 clear mac-address-table 或 clear mac address-table 来清除所有动态学习的MAC地址条目。

三、从网络层开始分析(不同网段内)

3.1 局域网

       当我和老王的IP并不在同一个网段的时候,我们之间的通信就需要路由器来实现。这是因为不同的网段被视为不同的网络,而路由器的作用之一就是连接不同的网络并负责数据包的转发。

        有的同学可能会问,不同网段的时候为啥不能使用交换机,要使用路由器呢?

        这是因为交换机主要是用于同一局域网(LAN)内转发数据帧,它基于数据帧中的 MAC 地址来决定如何转发数据。交换机的工作层级主要在TCP/IP模型的第一层,数据链路层。

        那什么是局域网呢?它和同一网段又是什么关系?

         局域网(Local Area Network,简称 LAN)是一种用于连接位于相对较小地理区域内的计算机和其他设备的网络。局域网通常用于办公室、学校、家庭或小型企业等环境。它是一种网络配置,允许多台计算机或其他设备(如打印机、服务器等)在有限的地理范围内相互通信和共享资源。局域网通常由一个组织或个人管理和维护。

        同一网段内是指具有相同网络部分的 IP 地址集合。在 IP 地址中,一部分是网络部分,另一部分是主机部分。网络部分用来标识网络,而主机部分用来标识网络内的具体设备。同一网段内的设备具有相同的网络部分。

        在大多数情况下,局域网内的设备被配置为属于同一网段,这意味着它们具有相同的网络部分。这有助于简化网络配置和管理。虽然常见的情况是同一局域网内的设备属于同一网段,但也有可能将局域网划分为多个不同的网段,每个网段服务于不同的子网络或分组。如果局域网内的设备不属于同一网段,则需要路由器来实现这些设备之间的通信。路由器根据 IP 地址中的网络部分来决定数据包的转发方向。

 假设一个局域网内有两个不同的网段:192.168.1.0/24 和 192.168.2.0/24。

对于 IP 地址 192.168.1.0/24:

  • IP 地址:192.168.1.0
  • 子网掩码长度:24
  • 子网掩码:255.255.255.0(这是 /24 的十进制表示)
  • 网络部分:192.168.1(前三个八位字节)
  • 主机部分:.0(最后一个八位字节)
  • 可用的 IP 地址范围:192.168.1.1 到 192.168.1.254(通常保留 192.168.1.0 作为网络地址,192.168.1.255 作为广播地址)

 简单来说的话:

  • 在 IP 地址 192.168.1.0/24 中,192.168.1 表示网络部分,/24 表示子网掩码长度,即 255.255.255.0。
  • 在 IP 地址 192.168.2.0/24 中,192.168.2 表示网络部分,/24 表示子网掩码长度,即 255.255.255.0。

        那为啥要这样设计局域网呢?

        这是因为正是由于设备之间的距离较短,局域网内的数据传输延迟通常很低,其设计的初衷就是旨在支持高速的数据传输速率,以满足高效的数据交换需求。并且局域网通常提供较高的带宽,这意味着更多的数据可以在短时间内传输。除此以外,因为它通常局域网覆盖一个小的地理区域,就相对容易设置和管理,也更容易实施安全策略,保护网络免受外部威胁。当然局域网可以轻松扩展或重新配置来适应变化的需求。

3.2 通信过程(路由器) 

        现在我们清楚了,如果我和老王不在同一个网段的话,我一般得用路由器和他通信。那问题又来了,路由器是咋工作的?它的工作原理是什么?

        当路由器接收到一个数据包时,它会先检查数据包的头部信息,特别是目的IP地址。路由器使用内部的路由表来决定如何转发数据包。而路由表包含一系列规则,指示路由器如何根据目的IP地址选择最佳路径。路由器会考虑多种因素,如最短路径、带宽可用性、延迟等,以确定最优的下一跳地址。一旦确定了最佳路径,路由器就会将数据包转发到下一个路由器或直接转发到目的网络。如果目的网络与路由器直接相连,数据包会被直接发送到目的网络;否则,数据包会被发送到下一个路由器。

自己隔壁老王
连接方式:路由器
源MAC地址目的MAC地址
192.168.1.100192.168.2.100

         根据上面路由器的原理,现在我们来和老王进行通信。

        当我把电脑接入路由器的一个端口的时候(此时路由器尚未连接其他设备),我的电脑会发送一个DHCP请求,即我的电脑会构建一个数据帧,该数据帧包含了我的MAC地址,还会请求路由器分配一个IP地址。假设此时我获得了IP地址192.168.1.100。路由器接收到DHCP请求数据帧后,会学习我的电脑的MAC地址,并将其与连接的端口关联起来。

这个DHCP请求的数据帧结构如下:

1、以太网头部:

  • 源MAC地址:这是我的电脑的MAC地址。
  • 目的MAC地址:通常为广播地址(FF:FF:FF:FF:FF:FF),因为DHCP请求是广播给网络中的所有设备的。
  • 类型:通常为0x0800,表示IP数据包。

2、IP头部:

  • 源IP地址:通常为0.0.0.0,表示发送方没有已知的IP地址。
  • 目的IP地址:通常为255.255.255.255,表示广播地址。
  • 协议:通常为UDP。

3、UDP头部:

  • 源端口:通常为68,表示客户端的DHCP端口。
  • 目的端口:通常为67,表示DHCP服务器的端口。

4、DHCP报文:

  • 操作代码:通常为1,表示DHCP发现(DHCP Discover)。
  • 硬件类型:通常为1,表示以太网。
  • 硬件地址长度:通常为6字节,表示MAC地址的长度。
  • 客户端MAC地址:这是您的电脑的MAC地址。
  • 客户端IP地址:通常为0.0.0.0,表示发送方没有已知的IP地址。
  • 选项:可能包含DHCP客户端标识符、所需的租约时间等信息。

        然后老王也将他的电脑接入了路由器的另一个端口,同样的老王的电脑也会通过DHCP从路由器获取IP地址,假设他获得了IP地址192.168.2.100。老王的电脑就会自动发送数据帧给路由器,路由器会学习老王的电脑的MAC地址,并将其与连接的端口关联起来。

        现在我将尝试与老王进行通信,首先我会在本地的网络内发起一个ARP请求,试着这样去获取老王的MAC地址。当我发现无法通过ARP请求获得老王MAC地址的时候(因为我们不在同一个网段),我的电脑就会默认通信目标是位于不同的网络之中。那现在我要和跨网段的老王通信,我得先构建一个IP数据包,其中包括了:

  • 源IP地址:你自己的IP地址(192.168.1.100)。
  • 目的IP地址:老王的IP地址(192.168.2.100)。
  • 数据:实际要发送的信息。

         由于老王的IP地址不在我的网段内,我不能够直接发送数据包给他,我需要将数据包发送给我的默认网关的MAC地址,这是因为默认网关是我所在网段的出口点。那不了解的同学又会问了,网关是什么?详细说明见 3.3网关,那里有具体说明。

(未写完的地方)

你天天用的路由器是如何工作的?

3.3 网关

        网关是一种网络设备,用于连接两个或多个不同的网络,并负责在网络之间转发数据包。网关不仅可以在不同的网络层之间进行转换,还可以在不同的协议之间进行转换。例如,在IPv4和IPv6网络之间、局域网(LAN)和广域网(WAN)之间,或者在不同的局域网之间,网关都发挥着重要作用。

(未写完的地方)

3.4 路由表

 示例路由表

目的网络下一跳接口度量值路由来源
192.168.0.0/24直连eth00直连
192.168.1.0/24192.168.0.1eth01静态
192.168.2.0/24192.168.0.2eth10直连
10.0.0.0/8192.168.0.3eth12动态
0.0.0.0/0192.168.0.4eth01默认

 1、目的网络:目标网络的IP地址和子网掩码,表示要转发数据包的目标网络。

  • 192.168.0.0/24 表示目的网络为192.168.0.0,子网掩码为255.255.255.0。
  • 192.168.1.0/24 表示目的网络为192.168.1.0,子网掩码为255.255.255.0。
  • 192.168.2.0/24 表示目的网络为192.168.2.0,子网掩码为255.255.255.0。
  • 10.0.0.0/8 表示目的网络为10.0.0.0,子网掩码为255.0.0.0。
  • 0.0.0.0/0 是默认路由,用于转发到任何未在路由表中明确列出的目的地。

2、下一跳:表示通往目的网络的下一跳路由器的IP地址或直接连接的接口。

  • 直连 表示目的网络与当前路由器直接相连。
  • 其他条目中的IP地址表示下一跳路由器的地址。

 3、接口:表示路由器上用于转发数据包的物理或逻辑接口。

  • eth0 和 eth1 是示例中的两个物理接口。

 4、度量值:表示到达目的网络的成本或距离,用于确定最佳路径。

  • 0 表示直连网络,无需经过其他路由器。
  • 1 或 2 表示需要经过1个或2个跳数才能到达目的网络。

 5、路由来源:表示该路由条目的类型。

  • 直连 表示目的网络直接与路由器相连。
  • 静态 表示手动配置的路由条目。
  • 动态 表示通过动态路由协议(如OSPF或BGP)自动学习的路由条目。
  • 默认 表示默认路由条目,用于处理所有未知的目的地。
  • 34
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值