tryhackme-网络基础
你有没有想过,当你开机或连接新网络时,电脑是如何动态配置网络设置的?你是否曾想知道你的数据包在到达目的地前经过了多少设备和国家?你是否好奇,尽管你的ISP只给你一个IP地址,你的家庭设备是如何访问互联网的?
如果你想知道这些问题的答案,以及其他问题,这个房间就是为你准备的。
这个房间是关于计算机网络的四个房间中的第二个:
学习先修条件
为了充分利用这个房间,我们建议你了解以下内容:
- ISO OSI 模型与图层
- TCP/IP 模型与层
- 以太网、IP 和 TCP 协议
换句话说,建议在“网络概念”之后开始这个房间。
学习目标
本房间的目的是教你各种标准协议和技术,这些技术将这些内容粘合在一起:
- 动态主机配置协议(DHCP))
- 地址解析协议(ARP))
- 网络地址转换(NAT)
- 互联网控制消息协议(ICMP)
- 叮
- 追踪路线
你去了你最喜欢的咖啡店,拿了你最喜欢的热饮,打开了笔记本电脑。你的笔记本连接了店里的WiFi并自动配置了网络,这样你就可以在新的TryHackMe房间里工作了。你一个IP地址都没输入,但你的设备已经全部设置好了。让我们看看这是怎么发生的。
每当我们想要访问网络时,至少需要配置以下内容:
- IP地址及子网掩码
- 路由器(或网关)
- DNS服务器
每当我们将设备连接到新的网络时,上述配置必须根据新网络进行设置。手动配置这些设置是个不错的选择,尤其是服务器。服务器通常不会切换网络;你不会随身携带域控制器,然后连接到咖啡馆的WiFi。此外,其他设备需要连接到服务器,并期望在特定IP地址找到它们。
拥有自动化配置连接设备的方法有许多优势。首先,这样可以省去手动配置网络的麻烦;这对移动设备来说尤其重要。其次,它避免了地址冲突,即当两个设备配置相同的IP地址时。IP 地址冲突会阻止相关主机使用网络资源;这适用于本地资源和互联网。解决方案在于使用动态主机配置协议(DHCP)。DHCP是一种依赖UDP的应用级协议;服务器通过UDP端口67监听,客户端从UDP端口68发送。你的智能手机和笔记本电脑默认配置为使用 DHCP。
DHCP 遵循四个步骤:发现、提供、请求和确认(DORA):
- DHCP Discover:客户端广播 DHCPDISCOVER 消息,寻找本地 DHCP 服务器(如果存在的话)。
- DHCP Offer:服务器回复 DHCPOFFER 消息,并提供客户端可接受的 IP 地址。
- DHCP 请求:客户端回复 DHCPREQUEST 消息,表示已接受所提供的 IP。
- DHCP 确认:服务器会回复 DHCPACK 消息,确认该客户端已分配所提供的 IP 地址。

以下的数据包捕获展示了上述四个步骤。在这个例子中,客户端获得地址 。192.168.66.133
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tshark <span style="color:#f8f8f2">-r</span> DHCP-G5000.pcap <span style="color:#f8f8f2">-n</span>
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</code></span></span></span></span>
在DHCP分组交换中,我们可以注意到以下情况:
- 客户端开始时没有任何IP网络配置。它只有一个MAC地址。在第一个和第三个数据包DHCP发现和DHCP请求中,寻找DHCP服务器的客户端仍未设置IP网络配置,也未使用DHCP服务器提供的IP地址。因此,它会将数据包从IP地址发送到广播IP地址。
0.0.0.0255.255.255.255 - 至于链路层,在第一和第三个数据包中,客户端发送到广播MAC地址(上述输出未显示)。DHCP 服务器在 DHCP 方案中提供可用的 IP 地址和网络配置。它使用客户端的目标MAC地址。(它在本示例系统中使用了拟议的IP地址。)
ff:ff:ff:ff:ff:ff
DHCP流程结束时,我们的设备会获得访问网络甚至互联网所需的所有配置。特别是,我们期望DHCP服务器为我们提供了以下信息:
- 用于访问网络资源的租用IP地址
- 网关用来将数据包路由到局域外
- 一个用于解析域名的DNS服务器
当两台主机通过网络通信时,IP 数据包会被封装在数据链路框架中,并穿越第二层。请记住,我们常用的两个数据链路层是以太网(IEEE 802.3)和WiFi(IEEE 802.11)。每当一台主机需要在同一以太网或WiFi上与另一台主机通信时,必须在数据链路层帧内发送IP数据包。虽然它知道目标主机的IP地址,但需要查找目标主机的MAC地址,以便创建合适的数据链路头部。
正如你所记得的,MAC地址是一个48位数字,通常用十六进制表示;例如,和 是我网络上的两个MAC地址。7C:DF:A1:D3:8C:5C44:DF:65:D8:FE:6C
然而,同一以太网网络上的设备不必时刻知道彼此的MAC地址;他们只需在通信时知道彼此的MAC地址即可。一切都围绕着IP地址展开。考虑这样一个场景:你把设备连接到一个网络,如果网络有DHCP服务器,你的设备会自动配置使用特定的网关(路由器)和DNS服务器。因此,你的设备知道DNS服务器的IP地址,从而解析任何域名;此外,当路由器需要通过互联网发送数据包时,它还能知道路由器的IP地址。在所有这些情况下,不会透露任何MAC地址。然而,同一以太网上的两个设备在不了解彼此的MAC地址的情况下无法通信。
提醒一下,下面的截图中,我们看到一个以太网帧内的IP包。以太网帧头包含:
- 目的MAC地址
- 源MAC地址
- 类型(此处为IPv4)

地址解析协议(ARP)使得在以太网上找到另一设备的MAC地址成为可能。在下面的例子中,一个拥有 IP 地址的主机希望与另一个拥有 IP 地址的系统通信。它会发送一个ARP请求,要求拥有IP地址的主机响应。ARP请求从请求方的MAC地址发送到广播MAC地址,如第一个数据包所示。ARP回复很快到达,拥有IP地址的主机回复了它的MAC地址。从此,两台主机可以交换数据链路层帧。192.168.66.89192.168.66.1192.168.66.1ff:ff:ff:ff:ff:ff192.168.66.1
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tshark <span style="color:#f8f8f2">-r</span> arp.pcapng <span style="color:#f8f8f2">-Nn</span>
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</code></span></span></span></span>
如果我们使用 ,数据包的显示方式会不同。它使用了ARP请求和ARP回复这两个术语。供你参考,输出显示在下方的终端中。tcpdump
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> arp.pcapng <span style="color:#f8f8f2">-n</span> <span style="color:#f8f8f2">-v</span>
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</code></span></span></span></span>
ARP请求或ARP回复不会封装在UDP或IP包中;它直接封装在以太网帧中。以下ARP回复展示了这一点。

ARP被视为第二层,因为它处理MAC地址。也有人认为它是第三层的一部分,因为它支持IP作。关键是,ARP允许从第3层寻址转换为第2层寻址。
互联网控制消息协议(ICMP)主要用于网络诊断和错误报告。两个流行的命令依赖ICMP,它们在网络故障排除和网络安全中起着关键作用。命令如下:
ping:该命令使用ICMP测试与目标系统的连接性,并测量往返时间(RTT)。换句话说,它可以用来了解目标是否还活着,并且它的回复能够传达到我们的系统。traceroute: 该命令在 Linux 和类 UNIX 系统以及 MS Windows 系统上调用。它利用ICMP来发现从主机到目标的路由。traceroutetracert
你可能从未打过乒乓球(乒乓球);不过,多亏了ICMP,现在你可以用电脑玩了!该命令发送ICMP回声请求(ICMP类型)。下面的截图显示了IP包中的ICMP消息。ping8

接收端的计算机以ICMP回声回复(ICMP类型)进行响应。0

很多事情可能会阻碍我们得到回复。除了目标系统可能离线或关闭外,沿路径设置防火墙可能会阻断必要的数据包以实现工作。在下面的例子中,我们过去告诉命令发送四个包后停止。ping-c 4ping
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">ping</span> <span style="color:#ffaf00">192.168</span>.11.1 <span style="color:#f8f8f2">-c</span> <span style="color:#ffaf00">4</span>
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</code></span></span></span></span>
输出无丢包;此外,它还计算往返时间(RTT)的最小、平均、最大和标准差(mdev)。
追踪路线
我们如何让系统与目标系统之间的每个路由器都暴露自己?
互联网协议有一个称为“存活时间”(Time-to-Live,TTL)字段,表示数据包在丢弃前可通过的最大路由器数量。路由器在发送数据包之前,会将数据包的TTL减少1。当TTL归零时,路由器丢弃数据包并发送ICMP逾时消息(ICMP类型)。(在此语境中,“时间”是以路由器数量计量,而非秒数。)11
下面的终端输出显示了运行以发现我们系统与 之间路由器的结果。有些路由器没有响应;换句话说,它们丢弃数据包时不发送任何ICMP消息。属于我们ISP的路由器可能会响应,暴露他们的私有IP地址。此外,一些路由器会响应并显示其公共IP地址,这可以让我们查询它们的域名并发现它们的地理位置。最后,ICMP 逾时消息被阻断,始终无法送达我们。tracerouteexample.com
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">traceroute</span> 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</code></span></span></span></span>
经过的路线可能会在我们重启命令时发生变化。
请考虑下方所示的网络图。它只有三个网络;然而,互联网如何弄清楚如何将数据包从网络1传递到网络2或网络3呢?虽然这是一个过于简化的图,但我们需要某种算法来弄清楚如何将网络1连接到网络2和网络3,反之亦然。
让我们来看看一个更详细的图示。互联网将由数百万台路由器和数十亿台设备组成。下面的网络只是互联网的一个小子集。移动用户可以访问网页服务器;然而,要实现这一点,路径上的每个路由器都需要通过相应链路发送数据包。显然,连接移动用户和网页服务器之间存在不止一条路径,即路由。我们需要一个路由算法,让路由器确定使用哪条链路。
路由算法超出了本房间的范围;不过,我们将简要介绍几种路由协议,帮助您熟悉它们的名称:
- OSPF(开放最短路径优先):OSPF是一种路由协议,允许路由器共享网络拓扑信息并计算数据传输的最高效路径。它通过路由器交换其连接链路和网络状态的更新来实现这一点。这样,每个路由器都能拥有完整的网络地图,并能确定到达任何目的地的最佳路由。
- EIGRP(增强型内部网关路由协议):EIGRP是思科专有的路由协议,结合了不同路由算法的特点。它允许路由器共享他们可访问的网络信息以及这些路由相关的成本(如带宽或延迟)。路由器随后利用这些信息选择最高效的数据传输路径。
- BGP(边界网关协议):BGP是互联网上主要使用的路由协议。它允许不同的网络(如互联网服务提供商的网络)交换路由信息,并为这些网络之间的数据建立传输路径。BGP有助于确保数据能够高效地通过互联网路由,即使跨越多个网络。
- RIP(路由信息协议):RIP是一种简单的路由协议,常用于小型网络。运行RIP的路由器会共享它们能到达的网络信息以及到达该网络所需的跳数(路由器)。因此,每个路由器都会基于这些信息构建路由表,选择跳数最少的路由以到达每个目的地。
正如网络概念会议讨论的,我们计算出IPv4最多可支持40亿台设备。随着连接互联网的设备数量增加,从电脑、智能手机到监控摄像头和洗衣机,IPv4地址空间显然会迅速耗尽。解决地址耗尽的一个方法是网络地址转换(NAT)。
NAT的理念在于利用一个公共IP地址为多个私有IP地址提供互联网访问。换句话说,如果你连接一家拥有二十台计算机的公司,你可以通过使用一个公共IP地址而非二十个公共IP地址,为所有二十台计算机提供互联网接入。(注:从技术上讲,IP地址数量总是以二的幂来表示。技术上来说,NAT是保留两个公共IP地址,而不是三十二个。因此,你本可以节省三十个公共IP地址。)
与路由不同,路由是将数据包自然路由到目的主机的方式,支持NAT的路由器必须找到跟踪当前连接的方法。因此,支持NAT的路由器维护一个表,用于在内部和外部网络之间转换网络地址。通常,内部网络使用私有IP地址范围,而外部网络使用公共IP地址。
在下图中,多个设备通过支持NAT的路由器访问互联网。路由器维护一个表,将内部IP地址和端口号映射为外部IP地址和端口号。例如,笔记本电脑可能与某个网络服务器建立了连接。从笔记本的角度来看,连接是从其IP地址从TCP源端口号发起的;然而,Web服务器会将该连接视为从TCP端口号建立,如翻译表所示。路由器会无缝完成地址转换。192.168.0.12915401212.3.4.519273
更多推荐


所有评论(0)