Featured image of post 网络基础知识

网络基础知识

常见的网络基础知识

DHCP:提供我的网络设置

你去了你最喜欢的咖啡店,拿了你最喜欢的热饮,打开了你的笔记本电脑。您的笔记本电脑连接到商店的 WiFi 并自动配置网络,因此您现在可以在新的 TryHackMe 房间工作。您没有输入单个 IP 地址,但您的设备已全部设置完毕。让我们看看这是怎么发生的。

每当我们想访问网络时,至少需要配置以下内容:

  • IP 地址和子网掩码
  • 路由器(或网关)
  • DNS 服务器

每当我们将设备连接到新网络时,都必须根据新网络设置上述配置。手动配置这些设置是一个不错的选择,尤其是对于服务器。服务器不需要切换网络;您无需携带域控制器并将其连接到咖啡店 WiFi。此外,其他设备需要连接到服务器,并希望在特定的 IP 地址找到它们。

拥有一种自动化的方式来配置连接的设备有很多好处。首先,它将使我们免于手动配置网络;这一点非常重要,尤其是对于移动设备。其次,它使我们免于地址冲突,即当两台设备配置相同的 IP 地址时。IP 地址冲突将阻止相关主机使用网络资源;这适用于本地资源和 Internet。解决方案在于使用动态主机配置协议 (DHCP)。DHCP 是依赖于 UDP应用程序级协议;服务器监听 UDP 端口 67,客户端从 UDP 端口 68 发送。默认情况下,您的智能手机和笔记本电脑配置为使用 DHCP。

image-20250408004116942

DHCP 遵循四个步骤:发现、提供、请求和确认 (DORA):

DHCP Discover :客户端广播 DHCPDISCOVER 消息,查找本地 DHCP 服务器(如果存在)。

DHCP Offer:服务器使用 DHCPOFFER 消息进行响应,其中包含可供客户端接受的 IP 地址。

DHCP Request:客户端使用 DHCPREQUEST 消息进行响应,以指示它已接受提供的 IP。

DHCP Acknowledge:服务器使用 DHCPACK 消息进行响应,以确认提供的 IP 地址现在已分配给此客户端。

image-20250408004231758

以下数据包捕获显示了上述四个步骤。在此示例中,客户端获取地址 192.168.66.133

1
2
3
4
5
user@TryHackMe$ tshark -r DHCP-G5000.pcap -n
    1   0.000000      0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0xfb92d53f
    2   0.013904 192.168.66.1 → 192.168.66.133 DHCP 376 DHCP Offer    - Transaction ID 0xfb92d53f
    3   4.115318      0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Request  - Transaction ID 0xfb92d53f
    4   4.228117 192.168.66.1 → 192.168.66.133 DHCP 376 DHCP ACK      - Transaction ID 0xfb92d53f

在 DHCP 数据包交换中,我们可以注意到以下内容:

  • 客户端在没有任何 IP 网络配置的情况下启动。它只有一个 MAC 地址。在第一个和第三个数据包 DHCP Discover 和 DHCP Request 中,搜索 DHCP 服务器的客户端仍然没有 IP 网络配置,并且尚未使用 DHCP 服务器提供的 IP 地址。因此,它将数据包从 IP 地址 0.0.0.0 发送到广播 IP 地址 255.255.255.255。
  • 至于链路层,在第一个和第三个数据包中,客户端发送到广播 MAC 地址 ff:ff:ff:ff:ff:ff( 在上面的输出中未显示)。DHCP 服务器在 DHCP 产品/服务中提供可用的 IP 地址以及网络配置。它使用客户端的目标 MAC 地址。(在此示例系统中,它使用了建议的 IP 地址。)

在 DHCP 进程结束时,我们的设备将收到访问网络甚至 Internet 所需的所有配置。特别是,我们希望 DHCP 服务器为我们提供了以下内容:

  • 用于访问网络资源的租用 IP 地址
  • 将数据包路由到本地网络外部的网关
  • 用于解析域名的 DNS 服务器(稍后会详细介绍)

ARP:第三层IP地址至第二层MAC地址转换

我们在网络概念室中指出,当两台主机通过网络进行通信时,IP 数据包在通过第 2 层传输时被封装在数据链路帧中。请记住,我们使用的两个常见数据链路层是以太网 (IEEE 802.3) 和 WiFi (IEEE 802.11)。每当一台主机需要与同一以太网或 WiFi 上的另一台主机通信时,它必须在数据链路层帧内发送 IP 数据包。尽管它知道目标主机的 IP 地址,但它需要查找目标的 MAC 地址,以便创建正确的数据链路标头。

如您所知,MAC 地址是一个 48 位数字,通常以十六进制表示法表示;例如,7C:DF:A1:D3:8C:5C44:DF:65:D8:FE:6C 是我网络上的两个 MAC 地址。

但是,同一以太网上的设备不需要一直知道彼此的 MAC 地址;他们只需要在通信时知道彼此的 MAC 地址。一切都围绕着 IP 地址。请考虑以下场景:您将设备连接到网络,如果该网络具有 DHCP 服务器,则设备会自动配置为使用特定网关(路由器)和 DNS 服务器。因此,您的设备知道 DNS 服务器的 IP 地址以解析任何域名;此外,当需要通过 Internet 发送数据包时,它知道路由器的 IP 地址。在所有这些场景中,不会显示 MAC 地址。但是,同一以太网上的两台设备在不知道彼此的 MAC 地址的情况下无法通信。

提醒一下,在下面的屏幕截图中,我们在以太网帧中看到一个 IP 数据包。以太网帧标头包含:

  • 目标 MAC 地址
  • 源 MAC 地址
  • 类型(在本例中为 IPv4)

image-20250408005456220

地址解析协议 (ARP) 可以在以太网上找到另一台设备的 MAC 地址。在下面的示例中,IP 地址为 192.168.66.89 的主机希望与 IP 地址为 192.168.66.1 的另一个系统通信。它发送一个 ARP 请求,要求 IP 地址为 192.168.66.1 的主机进行响应。ARP 请求从请求者的 MAC 地址发送到广播 MAC 地址 ff:ff:ff:ff:ff:ff:ff, 如第一个数据包所示。ARP 回复很快到达,IP 地址为 192.168.66.1 的主机使用其 MAC 地址进行响应。此时,两台主机可以交换数据链路层帧。

1
2
3
user@TryHackMe$ tshark -r arp.pcapng -Nn
    1 0.000000000 cc:5e:f8:02:21:a7 → ff:ff:ff:ff:ff:ff ARP 42 Who has 192.168.66.1? Tell 192.168.66.89
    2 0.003566632 44:df:65:d8:fe:6c → cc:5e:f8:02:21:a7 ARP 42 192.168.66.1 is at 44:df:65:d8:fe:6c

如果我们使用 tcpdump,数据包将以不同的方式显示。它使用术语 ARP 请求 和 ARP 回复 。供您参考,输出显示在下面的终端中。

1
2
3
user@TryHackMe$ tcpdump -r arp.pcapng -n -v
17:23:44.506615 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.66.1 tell 192.168.66.89, length 28
17:23:44.510182 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.66.1 is-at 44:df:65:d8:fe:6c, length 28

ARP 请求或 ARP 回复未封装在 UDP 甚至 IP 数据包中;它直接封装在以太网帧中。以下 ARP 回复显示了这一点。

image-20250408010149002

ARP 被视为第 2 层,因为它处理 MAC 地址。其他人会争辩说它是第 3 层的一部分,因为它支持 IP 作。必须了解的是,ARP 允许从第 3 层寻址转换为第 2 层寻址。

ICMP:网络故障排除

Internet Control Message Protocol (ICMP)主要用于网络诊断和错误报告。两个常用命令依赖于 ICMP,它们在网络故障排除和网络安全方面非常有用。这些命令是:

  • ping:此命令使用 ICMP 测试与目标系统的连接并测量往返时间 (RTT)。换句话说,它可以用来了解目标是活着的,并且它的回复可以到达我们的系统。
  • traceroute:此命令在 Linux 和类 UNIX 系统上称为 traceroute,在 MS Windows 系统上称为 tracert。它使用 ICMP 来发现从主机到目标的路由。

Ping

ping 命令发送 ICMP Echo 请求(ICMP 类型 8)。下面的屏幕截图显示了 IP 数据包中的 ICMP 消息。

image-20250408010535410

接收端的计算机以 ICMP Echo Reply (ICMP Type 0) 进行响应。

image-20250408010611795

许多事情可能会阻止我们得到回复。除了目标系统脱机或关闭的可能性之外,路径上的防火墙还可能会阻止 ping 工作所需的数据包。在下面的示例中,我们使用 -c 4 告诉 ping 命令在发送 4 个数据包后停止。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
user@TryHackMe$ ping 192.168.11.1 -c 4
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
64 bytes from 192.168.11.1: icmp_seq=1 ttl=63 time=11.2 ms
64 bytes from 192.168.11.1: icmp_seq=2 ttl=63 time=3.81 ms
64 bytes from 192.168.11.1: icmp_seq=3 ttl=63 time=3.99 ms
64 bytes from 192.168.11.1: icmp_seq=4 ttl=63 time=23.4 ms

--- 192.168.11.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 3.805/10.596/23.366/7.956 ms

输出显示没有数据包丢失;此外,它还计算往返时间 (RTT) 的最小值、平均值、最大值和标准差 (mDev)。

Traceroute

我们如何使我们的系统和目标系统之间的每个路由器都显露出来呢?

Internet 协议有一个称为Time-to-Live (TTL) 的字段,该字段指示数据包在被丢弃之前可以传输的最大路由器数。路由器在发送数据包之前将数据包的 TTL 递减 1。当 TTL 达到零时,路由器会丢弃数据包并发送 ICMP 超时消息(ICMP 类型 11)。(在这种情况下,“时间” 是以路由器的数量来衡量的,而不是秒数。

以下终端输出显示了运行 traceroute 命令探测本机与 example.com 之间路径上路由器的结果。部分路由器未响应(即丢弃数据包且不返回任何ICMP消息);属于我们ISP的路由器可能会响应,并暴露其私有IP地址。另一些路由器则会返回公有IP地址,从而允许我们通过域名查询推断其地理位置。此外,ICMP超时消息(Time Exceeded)可能被拦截,导致无法到达本机。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
user@TryHackMe$ traceroute example.com
traceroute to example.com (93.184.215.14), 30 hops max, 60 byte packets
 1  _gateway (192.168.66.1)  4.414 ms  4.342 ms  4.320 ms
 2  192.168.11.1 (192.168.11.1)  5.849 ms  5.830 ms  5.811 ms
 3  100.104.0.1 (100.104.0.1)  11.130 ms  11.111 ms  11.093 ms
 4  10.149.1.45 (10.149.1.45)  6.156 ms  6.138 ms  6.120 ms
 5  * * *
 6  * * *
 7  * * *
 8  172.16.48.1 (172.16.48.1)  5.667 ms  8.165 ms  6.861 ms
 9  ae81.edge4.Marseille1.Level3.net (212.73.201.45)  50.811 ms  52.857 ms 213.242.116.233 (213.242.116.233)  52.798 ms
10  NTT-level3-Marseille1.Level3.net (4.68.68.150)  93.351 ms  79.897 ms  79.804 ms
11  ae-9.r20.parsfr04.fr.bb.gin.ntt.net (129.250.3.38)  62.935 ms  62.908 ms  64.313 ms
12  ae-14.r21.nwrknj03.us.bb.gin.ntt.net (129.250.4.194)  141.816 ms  141.782 ms  141.757 ms
13  ae-1.a02.nycmny17.us.bb.gin.ntt.net (129.250.3.17)  145.786 ms ae-1.a03.nycmny17.us.bb.gin.ntt.net (129.250.3.128)  141.701 ms  147.586 ms
14  ce-0-3-0.a02.nycmny17.us.ce.gin.ntt.net (128.241.1.14)  148.692 ms ce-3-3-0.a03.nycmny17.us.ce.gin.ntt.net (128.241.1.90)  141.615 ms ce-0-3-0.a02.nycmny17.us.ce.gin.ntt.net (128.241.1.14)  148.168 ms
15  ae-66.core1.nyd.edgecastcdn.net (152.195.69.133)  141.100 ms ae-65.core1.nyd.edgecastcdn.net (152.195.68.133)  140.360 ms ae-66.core1.nyd.edgecastcdn.net (152.195.69.133)  140.638 ms
16  93.184.215.14 (93.184.215.14)  140.574 ms  140.543 ms  140.514 ms
17  93.184.215.14 (93.184.215.14)  140.488 ms  139.397 ms  141.854 ms

当我们重新运行命令时,遍历的路由可能会发生变化。

Routing 路由

考虑下面显示的网络图。它只有三个网络;但是,Internet 如何确定如何将数据包从网络 1 传送到网络 2 或网络 3?虽然这是一个过于简化的图表,但我们需要一些算法来弄清楚如何将网络 1 连接到网络 2 和网络 3,反之亦然。

image-20250408011337796

让我们考虑一个更详细的图表。互联网将是数百万台路由器和数十亿台设备。下面的网络是 Internet 的一小部分。移动用户可以访问 Web 服务器;但是,要实现此目的,路径上的每个路由器都需要通过适当的链路发送数据包。显然,连接移动用户和 Web 服务器的路径不止一条,即路由。我们需要一个路由算法,让路由器弄清楚要使用哪个链路。

image-20250408011415339

路由算法超出了这个房间的范围;但是,我们将简要介绍一些路由协议,以便您熟悉它们的名称:

  • **OSPF (Open Shortest Path First):**OSPF 是一种路由协议,允许路由器共享有关网络拓扑的信息并计算最有效的数据传输路径。它通过让路由器交换有关其连接的链接和网络状态的更新来实现这一点。这样,每个路由器都有一个完整的网络地图,并且可以确定到达任何目的地的最佳路线。
  • **EIGRP(增强型内部网关路由协议):**EIGRP 是 Cisco 专有的路由协议,它结合了不同路由算法的各个方面。它允许路由器共享有关它们可以访问的网络以及与这些路由相关的成本(如带宽或延迟)的信息。然后,路由器使用此信息来选择最有效的数据传输路径。
  • **BGP(边界网关协议):**BGP 是 Internet 上使用的主要路由协议。它允许不同的网络(如 Internet 服务提供商的网络)交换路由信息并建立数据在这些网络之间传输的路径。BGP 有助于确保数据可以通过 Internet 高效路由,即使在遍历多个网络时也是如此。
  • **RIP(路由信息协议):**RIP 是一种简单的路由协议,通常用于小型网络。运行 RIP 的路由器共享有关它们可以访问的网络以及到达该网络所需的跃点(路由器)数的信息。因此,每个路由器都会根据此信息构建一个路由表,选择跳数最少的路由来到达每个目的地。

NAT 网络地址转换

正如 Networking Concepts 会议室中所讨论的,我们计算出 IPv4 最多可以支持 40 亿台设备。随着连接到 Internet 的设备数量的增加,从计算机和智能手机到安全摄像头和洗衣机,很明显 IPv4 地址空间将很快耗尽。解决耗尽问题的一种解决方案是网络地址转换 (NAT)。

NAT(网络地址转换)的核心思想是通过一个公网IP地址为多个私有IP地址提供互联网访问能力。例如,若某公司有20台计算机需要联网,无需为每台设备分配一个公网IP地址(共20个),只需使用一个公网IP地址即可让所有设备接入互联网。(技术细节补充:严格来说,IP地址数量通常以2的幂次方为单位分配。因此,更准确的表述是——使用NAT时,您只需预留2个公网IP地址,而非原本所需的32个,从而节省了30个公网IP地址。)

与路由不同,路由是将数据包路由到目标主机的自然方式,支持 NAT 的路由器必须找到一种方法来跟踪正在进行的连接。因此,支持 NAT 的路由器维护一个表,用于在内部和外部网络之间转换网络地址。通常,内部网络将使用私有 IP 地址范围,而外部网络将使用公共 IP 地址。

在下图中,多个设备通过支持 NAT 的路由器访问 Internet。路由器维护一个表,该表将内部 IP 地址和端口号与其外部 IP 地址和端口号进行映射。例如,笔记本电脑可能会与某些 Web 服务器建立连接。从笔记本电脑的角度来看,连接是从其 IP 地址 192.168.0.129 从 TCP 源端口号 15401 发起的;但是,Web 服务器将看到与 212.3.4.5 和 TCP 端口号 19273 建立的连接相同的连接,如转换表中所示。路由器无缝地执行此地址转换。

image-20250408011744920

使用 Hugo 构建
主题 StackJimmy 设计