Lazy loaded image
技术分享
网络数通
Words 14134Read Time 36 min
2025-3-5
2025-3-5
type
status
date
slug
summary
tags
category
icon
password
本文介绍:简单介绍一些网络基础理论以及与网络相关的基本命令行工具的使用。
notion image

网络基础介绍

简介

本文将向初学者介绍关于网络的基本原理,网络是一个庞大的话题,所以此处只做一些简短的概述,仅提供一些有关Networking的基础知识介绍。
我们将讨论的主题是:
  • OSI模型
  • TCP/IP 模型
  • 介绍一些基本的网络工具

OSI模型:概述

OSI(开放系统互连)模型是一种标准化模型,我们一般用它来演示计算机网络背后的理论--所以该模型也被称为OSI参考模型。
OSI模型在现实网络中是一种比TCP/IP 模型更紧凑的分层体系结构模型,从许多方面来说,OSI 模型相比于TCP/IP 模型更容易理解。
OSI 模型由七层组成:
notion image
让我们简单了解一下OSI模型的每一层:
第 7 层——应用层(Application):
OSI 模型的应用层本质上是为计算机上运行的程序提供网络选项,应用层几乎只与应用程序一起工作,为它们提供一个接口来传输数据;当数据被提供给应用层后,这些数据接下来就会向下传递给表示层。
第 6 层——表示层(Presentation):
表示层从应用层接收数据,这些数据往往会采用本机中的应用程序可以理解的格式,但不一定采用接收方计算机中的应用层可以理解的标准化格式;表示层会将数据转换为标准化格式,并处理对数据的任何加密、压缩或其他转换过程,当表示层完成数据处理后,这些数据将向下传递到会话层。
第 5 层——会话层(Session):
当会话层从表示层接收到格式正确的数据时,它会查看是否可以通过网络与另一台计算机建立连接,如果不能,则它会发回一个错误,并且该过程不会继续进行;如果可以建立会话,那么会话层的工作就是维护所建立的会话,并与远程计算机的会话层合作以同步通信。
会话层特别重要,因为它创建的会话对于所讨论的通信是唯一的,这就能够允许你同时向不同端点发出多个请求而不会混淆所有数据(例子:同时在 Web 浏览器中打开两个选项卡而不会出现网页响应错误),当会话层成功建立主机和远程计算机之间的连接后,数据将向下传递到第 4 层--传输层。
第 4 层——传输层(Transport):
传输层是一个非常有趣的层,它提供了许多重要的功能,它的第一个目的是选择传输数据的协议,传输层最常见的两种协议是TCP(传输控制协议)和UDP(用户数据报协议); 使用 TCP协议时,传输是基于连接的,这意味着在请求期间要建立并维护计算机之间的连接,这允许进行可靠的传输,因为成功建立的连接可用于确保数据包全部到达正确的位置,TCP 连接允许两台计算机保持持续通信,以确保以可接受的速度发送数据,并能重新发送任何丢失的数据;而使用UDP传输,情况则正好相反,数据包基本上会被直接扔到接收方计算机上——如果接收方不能及时接收数据,那就是接收方的问题(这就是为什么如果网络连接不佳,进行类似 Skype 的视频传输时 可能会导致画面像素化)。
总而言之:TCP 通常会被选择用于传输精度高于速度的情况(例如文件传输或加载网页),而 UDP 将用于速度需求更重要的情况(例如视频流)。
选择了所使用的传输协议后,传输层会将数据传输分成小块进行(在 TCP 上称为数据段,在 UDP 上称为数据报),这使得成功传输消息变得更加容易。
第 3 层——网络层(Network):
网络层负责定位关于你的请求的目的地,互联网是一个巨大的网络,当你想从某个网页请求信息时,网络层则会获取相关页面的 IP 地址并找出最佳路由(进行逻辑寻址);在这个阶段,我们正在使用的仍然是由软件控制的所谓逻辑地址(即 IP 地址),逻辑地址可用于为网络提供秩序,它能对网络进行分类从而允许我们对它们进行适当的排序,目前最常见的逻辑地址形式是 IPV4 格式,你对此可能比较熟悉(如 192.168.1.1 是家用路由器的常用地址,192.168.1.1就是典型的IPV4格式)。
第 2 层——数据链路层(Data Link):
数据链路层侧重于传输过程中的物理寻址,它从网络层接收数据包(包括远程计算机的 IP 地址)并添加接收端点的物理 (MAC) 地址;每台启用网络的计算机内部都有一个网络接口卡 (NIC),它带有一个唯一的 MAC(媒体访问控制)地址以供识别;MAC 地址由制造商设置并直接烧入卡中,它们无法被更改——尽管它们可以被欺骗,当通过网络发送信息时,实际上是根据物理地址来确定将信息发送到哪里。
此外,以适合传输的格式呈现数据也是数据链路层的工作。
数据链路层在接收数据时也起着重要的作用,因为它会检查接收到的信息以确保它在传输过程中没有被破坏,这很可能发生在数据向第 1 层(物理层)传输时。
第 1 层——物理层(Physical):
物理层直接涉及到计算机的硬件,这一层是 在网络中传输的构成数据的电脉冲信号 被发送和接收的地方。
物理层的工作是将传输过程中的二进制数据转换为电信号并通过网络进行传输,以及接收传入的电信号并将其转换回二进制数据。
答题
tips:对于下面问题中涉及OSI层级的部分,请使用层数 (1-7) 回答。
notion image

数据封装

随着数据向下传递到模型的每一层,包含特定于相关层的详细信息的header会被添加到所传输的数据的开头部分。
例如,网络层添加的header将包括源和目标 IP 地址之类的内容,而传输层添加的header将包括(除其他事项外)特定于所使用的协议的信息。
数据链路层还会在所传输的数据末尾添加一部分内容(trailer),用于验证数据在传输时没有被破坏,这有增加安全性的额外好处,因为如果不破坏trailer就无法拦截和篡改数据。
以上整个过程被称为封装,在这个过程中:数据可以从一台计算机发送到另一台计算机。
notion image
请注意,封装的数据在以上流程的不同步骤中被赋予了不同的名称:在第 7,6 和 5 层中,数据被简称为data,在传输层中,封装的数据被称为数据段或数据报(取决于选择TCP 还是 UDP 作为传输协议),在网络层,数据被称为数据包,接着当数据包向下传递到数据链路层时,它就变成了一个数据帧,而当它通过网络传输时,数据帧会被分解成比特(bites)。
当第二台计算机接收到消息时,它会反转刚才的传输过程——从物理层开始,一直向上直到数据到达应用层,在传递过程中会剥离之前添加的信息,这个过程被称为解封装;因此,我们可以将 OSI 模型中的分层(Layers) 视为存在于每台具有网络功能的计算机中,虽然实际上这种说法并没有那么明确,但计算机都会遵循相同的封装过程来发送数据并将在接收数据时进行解封装。
数据的封装和解封装过程非常重要——这不仅因为它们的实际用途,还因为它们为我们提供了一种发送数据的标准化方法。所有数据传输将始终遵循相同的方法,允许任何启用网络的设备向任何其他可访问网络的设备 发送请求并确保请求会被理解——无论这些设备是否来自于同一制造商、是否使用相同的操作系统......
答题
notion image

TCP/IP模型

TCP/IP 模型在许多方面与 OSI 模型非常相似,是现实世界网络的基础。
TCP/IP 模型由四层组成——应用层(Application)、传输层(Transport)、网际层(Internet )和网络接口层(Network Interface),它们涵盖了与 OSI 七层模型相同的功能范围。
notion image
  • *注意:**一些资料会将 TCP/IP 模型分为五层——将上图中的网络接口层再分为数据链路层和物理层(与 OSI 模型中的数据链路层和物理层一样);TCP/IP五层模型也是公认的、众所周知的,但是,它没有被正式定义(与 RFC1122 中定义的原始四层模型不同);TCP/IP模型具体有几层,主要取决于你选择使用哪个版本——无论是四层TCP/IP模型 还是 五层TCP/IP模型,通常都被认为是有效的。
如果 OSI 模型实际上并未用于现实世界中的任何事物,那么你就有理由问我们为什么要费心使用 OSI 模型?这个问题的答案很简单:OSI 模型(由于比 TCP/IP 模型更精简和更严格)往往更容易让学习者学习网络的初始理论。
OSI模型与TCP/IP模型的匹配情况如下:
notion image
数据的封装和解封装过程在 TCP/IP 模型中的工作方式与在 OSI 模型中的工作方式完全相同,在 TCP/IP 模型的每一层,都会有一个报头在封装期间被添加,并在解封装期间被移除。
分层模型非常适合辅助教学,它向我们展示了如何封装数据并通过网络发送数据的一般过程,但这个过程实际上是如何发生的呢?
当我们谈论 TCP/IP 时,也许会想到一个包含四层的分层模型,但TCP/IP实际上也是一套协议——协议是定义如何执行操作的规则集。TCP/IP 的名称来源于两个重要的协议:一个是传输控制协议(我们之前在 OSI 模型中提到过),英文缩写为TCP,它用于控制两个端点之间的数据流;另外一个是 Internet 协议,英文缩写为IP,它控制数据包的寻址方式和发送方式。 构成 TCP/IP 套件的协议还有很多,我们将在后面继续介绍其中的一些内容。
接下来我们将介绍TCP,如前所述,TCP 是一种基于连接的协议,换句话说,在通过 TCP 发送任何数据之前,必须先在两台计算机之间建立稳定的连接,而形成这种连接的过程被称为TCP三次握手。
当你尝试建立连接时,你的计算机会首先向远程服务器发送一个特殊请求,表明它想要初始化一个连接,此请求包含了被称为 SYN位(SYN是“synchronise”的缩写,含义是:同步)的东西,这实际上是在开始建立连接过程时 所进行的第一次接触;然后服务器将响应一个包含 SYN 位的数据包,同时还包含了一个称为 ACK 的“acknowledgement(确认)”位;最后,你的计算机将继续发送一个包含 ACK 位的数据包,以确认连接已成功建立。随着TCP三次握手的成功完成,两台计算机之间就可以可靠地传输数据了,而且任何在传输过程中丢失或损坏的数据都会被重新发送,从而导致TCP连接看起来是无损的。
notion image
_注意:_本文不打算逐步深入探讨TCP是如何工作的,在本文中——我们知道在使用 TCP 建立连接之前必须执行三次握手就足够了。
_关于两种分层模型的历史:_准确理解最初创建 TCP/IP 模型 和 OSI 模型的原因很重要。一开始计算机界没有标准化模型——不同的制造商都遵循他们自己的方法来规划网络,因此不同制造商制造的系统在网络方面完全不兼容;为了解决网络不兼容的问题,美国国防部于 1982 年引入了TCP/IP 模型,以提供一个统一标准——供所有不同制造商共同遵循的标准;后来国际标准化组织(ISO)引入了OSI模型,但是,OSI模型主要用作一个更全面的学习指南,因此 TCP/IP 模型仍然是现代网络理论所基于的标准。
答题
notion image

网络工具-Ping

接下来我们将了解一些可以在实际应用中使用的命令行网络工具,这些工具也可以在其他操作系统上运行,但为了简单起见,此处以Linux操作系统环境为例。
我们要了解的第一个命令行工具是 ping
当我们想要测试是否可以连接到远程资源时,可以使用 ping 命令,这里的远程资源通常说的是 Internet 上的网站,但如果你想检查某些计算机是否配置正确,ping命令的目标也可以是你的家庭网络上的计算机。
ping命令将使用 ICMP 协议进行工作,这是前面提到的不太为人所知的 TCP/IP 协议之一,ICMP 协议在 OSI 模型的网络层中工作,也就是在 TCP/IP 模型的网际层工作。
ping 的基本语法是 ping <target>,在以下示例中,我们使用 ping 来测试是否可以连接到Google网站:
notion image
请注意,ping命令实际上返回了它所连接的 Google 服务器的 IP 地址,而不是所请求的 URL;ping命令是一个方便的辅助应用程序,因为它可以用于确定托管网站的服务器的 IP 地址,ping的另一优势是它对于任何支持网络的设备来说几乎都有效,所有操作系统开箱即用地支持它,甚至大多数嵌入式设备也可以使用 ping
答题
tips:任何关于语法的问题都可以使用 ping 的手册页来回答(在Linux 上输入 man ping)。
notion image
相关操作截图(在Linux 上输入 man ping):
notion image
notion image
notion image

网络工具-Traceroute

ping 命令的逻辑后续是“traceroute”,traceroute可用于映射 你的请求在前往目标机器时所采用的路径。
互联网由许许多多不同的服务器和端点组成,它们都相互联网,这意味着,为了获得你真正想要的内容,你首先需要通过一堆其他服务器;而traceroute将允许你查看你所经过的网络连接中的每一个点——它允许你查看你的计算机和你所请求的资源之间的每个中间连接步骤。
Linux 上 traceroute 的基本语法是:traceroute <destination>
在默认情况下,Windows系统上的 traceroute 实用程序 (在cmd中使用tracert) 与 ping命令都基于ICMP协议运行,而Unix系统上的traceroute等效程序则通过UDP协议运行;在两种情况下都可以使用参数开关修饰traceroute。(Linux是类Unix系统,在终端中使用 traceroute)
notion image
由上图可以看到:从本地的路由器 (\_gateway) 到达位于 216.58.205.46 的 Google 服务器需要 13 跳(hops)。
答题
tips:所有关于参数开关的问题都可以在 traceroute 的手册页中找到答案(在Linux 上输入man traceroute
notion image
相关操作截图(在Linux 上输入man traceroute):
notion image

网络工具-WHOIS

域名(Domain Names)——互联网的无名救世主,你能想象记住要访问的每个网站的 IP 地址是什么感觉吗? 这是一个可怕的想法,好在我们可以使用域名。
我们将在下一小节中更多地讨论域名是如何工作的,但在本节中我们知道域名能够转换为IP地址就足够了(例如,我们可以在浏览器中输入tryhackme.com去访问和此域名相关的网站,而不需要输入TryHackMe的具体IP地址);域名由被称为域名注册商的公司所出租,如果你想要得到一个域名,你可以去注册商处进行注册,然后就能租用该域名一段时间了。
我们可以使用whois 查询域名由谁注册,你可能会从whois查询中获得大量信息(由于个人信息可能会被隐藏处理,因此whois查询也可能会提供很少有效信息)。
如果你不喜欢使用命令行工具(whois),也可以选择使用在线whois工具:https://www.whois.com/whois/
  • *注意:**在使用whois前 你可能需要先进行工具安装,在基于 Debian 的系统上,这可以通过 sudo apt update && sudo apt-get install whois 完成。
Whois 查询非常容易执行,只需使用命令whois <domain>即可获取有关域名注册的可用信息列表:
notion image
观察上图:这是经常可以找到的相对非常少量的信息,我们已经获得了目标的域名、注册该域名的公司、上次续订时间、下一次到期时间,以及有关名称服务器的一些信息。
答题
notion image
操作截图(使用在线查询:https://www.whois.com/whois/
notion image
notion image
notion image
notion image
notion image

网络工具-Dig

我们在上一小节中谈到了域——现在让我们谈谈它们是如何工作的。
有没有想过如何将 URL 转换为你的计算机可以理解的 IP 地址? 答案是使用被称为 DNS(域名系统-Domain Name System)的 TCP/IP 协议。
简单地说,DNS 允许我们请求一个特殊的服务器 以此为我们提供 我们试图访问的网站的 IP 地址。例如,如果我们向 www.google.com 发出请求,我们的计算机会首先向一个特殊的 DNS 服务器发送请求(你的计算机知道如何找到它),然后DNS服务器会寻找到 Google 的 IP 地址并将其发回给我们,然后我们的计算机就可以将请求发送到 Google 服务器的 IP。
让我们对以上过程进行分解。
我们向目标网站发出请求,本地计算机所做的第一件事情是检查本地缓存,查看缓存中是否已经为目标网站存储了一个相关的 IP 地址;如果本地缓存中有目标IP,则可以直接将请求发送到目标ip,如果本地缓存中没有目标ip,则将进入流程的下一阶段。
假设在本地缓存中尚未找到目标ip地址,本地计算机将向所谓的递归(recursive) DNS 服务器发送请求,这些服务器自动为我们网络上的路由器所知,许多 Internet 服务提供商 (ISP) 都会维护自己的递归服务器,Google 和 OpenDNS 等公司也控制了一些递归服务器。本地计算机能够知道向何处发送信息请求:因为递归 DNS 服务器的详细信息已经存储在我们的路由器中。递归DNS服务器将维护流行域的结果缓存,但是,如果我们所请求的网站并没有存储在递归DNS服务器的缓存中,那么递归DNS服务器会将请求再传递给根名称DNS服务器。
2004 年之前,世界上正好有 13 个根名称 DNS 服务器,现在还有更多,但是,它们仍然可以使用 与分配给原始服务器相同的 13 个 IP 地址进行访问(为了保持平衡以便我们在发出请求时获得最近的服务器)。 根名称服务器会跟踪下一级的 DNS 服务器,然后选择一个合适的服务器并将我们的请求重定向到该服务器,这些相比于根名称服务器的较低级别的服务器被称为顶级域服务器。
顶级域 (TLD-Top-Level Domain) 服务器被拆分为多个扩展。例如,如果我们正在搜索 tryhackme.com,我们的请求将被重定向到处理.com域的 TLD 服务器;如果我们正在搜索 bbc.co.uk,我们的请求将被重定向到处理 .co.uk域的 TLD 服务器。与根名称服务器一样,TLD 服务器也会继续跟踪下一级:权威名称服务器(Authoritative name servers),当 TLD 服务器收到我们的信息请求时,服务器会将其传递给适当的权威名称服务器。
权威名称服务器用于直接存储域的 DNS 记录。换句话说,世界上的每个域都将其 DNS 记录存储在某个地方的权威名称服务器上,它们是信息的来源。当我们的请求到达我们正在查询的域的权威名称服务器时,它就会将相关信息发回给我们,从而允许我们的计算机连接到我们所请求的域对应的 IP 地址。
当我们在web浏览器中访问网站时,以上一切过程都会自动发生,但我们也可以使用名为dig 的工具来手动完成,与pingtraceroute一样,dig也可以在 Linux 系统上进行安装。
dig允许我们手动查询我们所选择的递归 DNS 服务器以获取有关域的信息:dig <domain> @<dns-server-ip>
这是一个非常有用的网络故障排除工具。
notion image
执行dig命令之后,我们得到了很多信息,我们发送了一个查询并成功(即无错误)收到了一个完整的答复——正如预期的那样,返回结果中会包含我们所查询的域名所对应的 IP 地址。
dig 能够提供给我们的另一个有趣信息是 查询到的 DNS 记录的 TTL(生存时间)。如前所述,当我们的计算机完成域名查询时,会将结果存储在本地缓存中,而DNS记录的 TTL 将告诉本地计算机何时停止将此DNS记录视为有效——即何时应该再次请求数据,而不是一直依赖于本地缓存的副本记录。
TTL 可以在dig返回结果中的“ANSWER section” 的第二列找到:
notion image
  • *tips:**重要的是要记住 TTL(在 DNS 缓存的上下文中)以秒为单位,因此上图示例中的DNS记录将在 2 分 37 秒后过期。
答案
notion image
操作截图:
notion image

OSI 模型

什么是OSI模型?

OSI模型(开放系统互连模型-Open Systems Interconnection Model)是网络中使用的绝对基本模型,这个关键模型提供了一个框架,规定了所有联网设备将如何发送、接收和解释数据。
OSI模型的主要好处之一是:当与其他设备进行通信时,网络上的设备可以具有不同的功能和设计,而且在遵循OSI模型一致性的网络上发送的数据也可以被其他设备理解。
OSI模型由七层组成,从第7层到第1层,每一层都有不同的职责。
数据传递在OSI的每一层都会发生特定的过程,OSI的每一层都会将部分信息添加到原数据中,这个过程被称为封装,下图为OSI模型示意图:
notion image
答题
notion image

Layer 7 - 应用层(Application)

notion image
OSI模型的应用层是你最熟悉的一层,这种熟悉程度是因为应用程序层是协议和规则所在的层,应用层用于确定用户应该如何与发送或接收的数据进行交互。
日常的应用程序,如电子邮件客户端、浏览器或文件服务器浏览软件(如FileZilla) 等,它们能够为用户提供一个友好的图形用户界面(GUI),这个GUI可用于用户与数据(发送的数据或接收的数据)进行交互;应用层中还包括了DNS协议(域名系统),DNS能将网站地址转换为IP地址。
notion image
答题
notion image

Layer 6 - 表示层(Presentation)

notion image
OSI模型的第6层是标准化开始发生的层。软件开发人员可以以不同的方式开发应用程序,例如电子邮件客户端等,而无论应用程序如何工作,数据仍然需要以相同的方式进行处理。
这一层能够充当数据与应用层(第7层)之间的翻译器。接收信息的计算机也能理解以一种格式发送到计算机的数据以另一种格式发送,例如:当你通过某种类型的电子邮件客户端发送电子邮件时,其他用户可能使用的是另一种电子邮件客户端来接收信息,但是电子邮件的内容仍然能够正常显示。
数据加密(如访问安全站点时使用HTTPS协议)等安全特性也将在表示层得到应用。
答题
notion image

Layer 5 - 会话层(Session)

notion image
一旦数据从表示层(第6层)正确地转换或格式化,会话层(第5层)将开始创建到数据目的地(另一台计算机)的连接。当连接建立后,将同时创建一个会话,并且当该连接处于活动状态时,对应的会话也将处于活动状态。
会话层(第5层)将使两台计算机同步,以确保它们在发送数据和接收数据之前处于同一页面上,一旦相关的检查到位,会话层将开始把要发送的数据分成更小的数据块,并开始一次一个地发送这些数据块(Packets-数据包);这种对数据分块处理的方式是有益的,因为如果连接发生丢失,则仅有尚未发送的部分数据块需要再次发送——而不需要重新发送全部数据块。
值得注意的是,会话是唯一的——这意味着数据不能在不同的会话之间传输,而只能在相同会话之间传输(一个会话将包含两端:发送数据端和接收数据端)。
答题
notion image

Layer 4 - 传输层(Transport)

notion image
OSI模型的第4层在通过网络传输数据方面起着至关重要的作用。当数据在设备之间发送时,它将遵循以下两种不同的协议之一:
  • TCP(传输控制协议)
  • UDP(用户数据报协议)
TCP协议
传输控制协议(TCP-Transmission Control Protocol)在设计时考虑到了数据传输的可靠性;并且TCP协议在发送数据和接收数据所需的时间内,将在两个设备之间保持恒定的连接——TCP协议是面向连接的。
不仅如此,TCP还在其设计中加入了错误检查,错误检查能够确认从会话层(第5层)发送的小块数据已经按顺序(按发送数据的顺序)被接收和重新组装。
让我们总结一下TCP的优点和缺点:
  • TCP的优点:能够保证数据的准确性;能够同步两个设备,以防止彼此被数据淹没;将执行更多流程,以确保数据传输的可靠性。
  • TCP的缺点:要求两台设备之间有可靠的连接,如果没有接收到一小块数据,则无法使用整个数据块;TCP的慢速连接可能会导致其他设备达到数据传输的瓶颈,因为在数据传输完毕之前——相关的TCP连接将一直保留在接收端计算机上;TCP 比 UDP 慢得多,因为使用此协议的设备必须完成更多工作。
TCP主要用于文件共享、互联网浏览或发送电子邮件等情况,因为这些服务要求数据是准确和完整的,而TCP协议的特性能够满足这些要求。
在下图的例子中,我们可以看到一张照片是如何被分解成来自“网络服务器”的小数据块(称为数据包),而接收数据的计算机会将照片重新按正确的顺序完成构建。
notion image
UDP协议
现在让我们介绍用户数据报协议(UDP-User Datagram Protocol)。UDP协议远不如TCP协议先进,它没有TCP所提供的多种特性,如错误检查和数据传输的可靠性。任何基于UDP协议发送的数据都无法确保不会发生数据丢失,UDP协议在进行数据传输时并没有实现设备的同步过程,UDP的特性是:无连接、不可靠、快速传输。
让我们总结一下UDP的优点和缺点:
  • UDP的优点:UDP比TCP快得多;UDP让应用层(用户软件)决定是否控制数据包的发送速度;UDP不像TCP那样在设备上保留连续连接。
  • UDP的缺点:UDP不关心发送的数据是否成功被接收,容易发生数据丢失;UDP这种不稳定的数据传输方式可能会给用户糟糕的体验。
我们使用与上面相同的例子,假设我们基于UDP协议传输数据,我们现在可以看到“接收数据的计算机”仅接收到数据包 #1 和 #3,这意味着图像发生了丢失。
notion image
UDP协议在需要发送小块数据的情况下很有用,例如,用于发现设备的协议(ARP协议和DHCP协议)或者视频流等更大的文件(视频的某些部分出现像素化是可允许的,像素化部分代表了对应数据的丢失)。
答题
notion image

Layer 3 - 网络层(Network)

notion image
OSI模型的第三层(网络层)是路由和重新组装数据之处,而路由能够确定发送数据块时应该选择的最优路径。
网络层的一些协议确切地确定了数据到达设备的“最佳”路径,这些协议包括了开放最短路径优先协议(OSPF-Open Shortest Path First)和路由信息协议(RIP-Routing Information Protocol);此外,路径的选择还由以下因素决定:
  • 哪条路径最短?也就是说,数据包需要通过的设备最少。
  • 哪条路径最可靠?例如,之前在该路径上丢失过数据包吗?
  • 哪条路径的物理连接更快?例如,一条路径是使用铜缆线连接(较慢)还是光纤连接(相当快)?
在这一层,一切都是通过IP地址(如192.168.1.100)进行处理的,能够使用IP地址发送数据包的路由器等设备也被称为第三层设备,因为它们能够在OSI模型的第三层工作。
notion image
答题
notion image

Layer 2 - 数据链路层(Data Link)

notion image
数据链路层着重于数据传输过程中的物理寻址。该层级将接收来自网络层的数据包(包括远程计算机的IP地址),并会在数据包中添加接收端点的物理MAC(媒体访问控制)地址。
在每一台联网计算机内部都有一个网络接口卡(NIC- Network Interface Card),它带有一个唯一的MAC(Media Access Control)地址作为标识;MAC地址由制造商设置,并刻入网络接口卡中,MAC地址不能被改变——尽管MAC地址可以被欺骗;当信息通过网络发送时,实际上是使用物理地址来确定将信息发送到哪里。此外,以适合传输的格式表示数据也是数据链路层的工作之一。
答题
notion image

Layer 1 - 物理层(Physical)

notion image
物理层包括了在网络中所使用的硬件的物理组件,是OSI模型的最低层,这些设备将使用电信号在二进制编号系统( 0 和 1 )中相互传输数据。
例如,以太网电缆连接设备:
notion image
答题
notion image

OSI实例练习

在和本文相关的TryHackMe实验房间中部署实验环境并回答问题。
答题
根据数据发送时在OSI七层中所经过的顺序完成模拟实验,并得到最后的flag。
tips:使用左、右方向键控制移动,使用空格键进行爬楼。
notion image
notion image
最后得到的flag是:THM{OSI\_DUNGEON\_ESCAPED} 。
notion image

包和帧(Packets & Frames)

本文相关内容:了解数据如何被分成更小的部分并通过网络传输到另一台设备。

什么是数据包和帧?

数据包和帧是小块的数据,当它们组合在一起时,就构成了更大的信息或消息;然而,数据包和帧在OSI模型中是两种不同的东西,帧位于OSI的第2层——数据链路层,这意味着帧不包含IP地址这样的信息。类比案例:你可以想象把一个信封放在另外一个信封里,然后邮寄完整的信封,此完整信封对应的是发送的数据包,一旦打开完整信封,里面仍然会存在并包含一些数据(也就是一个帧)。
数据包和帧的组合过程被称为封装,在这个阶段中,我们可以安全地假设:任何包含IP地址的信息指的都是数据包,而当封装好的信息被剥离时,我们谈论的信息则是帧本身。
数据包是跨网络设备传输数据的有效方式,由于这些数据是分小块传输的,所以此时在整个网络中发生数据传输阻塞的几率 比一次性发送大消息进而造成传输阻塞的几率要小。
当你从网站加载图像时,该图像不会作为一个整体发送到你的计算机,而是在你的计算机上由小块图像开始重建进而得到一个完整图像;下面的图片说明了以上过程,来自于网站的图像将被分成三个数据包,当数据包到达计算机时,图像就会开始重建,最终形成完整的图像。
notion image
数据包有不同的结构,这些结构取决于正在发送的数据包的类型,网络上充满了各种标准和协议,这些标准和协议充当了设备上如何处理数据包的一组规则。
使用了协议的数据包将有一组标头,其中包含跨网络发送的数据的附加信息。
一些值得注意的标头信息包括:
  • Time to Live(生存时间):该字段为数据包设置了一个过期计时器,即使数据包永远无法到达目标主机,这也不会阻塞你的网络。
  • Checksum(校验和):该字段能够为TCP/IP等协议提供完整性检查,如果数据被更改了,那么此时的Checksum值将变得与预期的Checksum值不同。
  • Source Address(源地址):该字段表示发送数据包的设备的IP地址,这样数据就知道该返回到哪里。
  • Destination Address(目标地址):数据包要发送到的设备的IP地址,以便数据知道下一步要传输到哪里。

答题

notion image

TCP/IP(三次握手)介绍

传输控制协议(TCP-Transmission Control Protocol)是在网络中使用的一个规则。
基于TCP/IP协议集的TCP/IP模型与OSI模型非常相似,TCP/IP模型由四层分级组成,可以说是OSI模型的一个简化版本,TCP/IP模型所包含的分层有:
  • Application(应用层)
  • Transport(传输层)
  • Internet(网际层)
  • Network Interface(网络接口层)
与OSI模型的工作原理非常相似,数据包在经过TCP/IP模型的每一层时都会被添加部分信息——这个过程被称为封装,而与此过程相反的是解封装。
关于TCP协议
TCP协议的一个定义特征是它是基于连接的,这意味着在发送数据之前,TCP必须在客户端和作为服务器的设备之间建立起一个持续的连接;因此,TCP能够保证发送的任何数据都会在另一端被正确地接收到,这个数据发送和接收过程被称为TCP/IP三次握手。
下面是关于TCP优点和缺点的比较:
  • TCP的优点:能够保证数据的准确性;能够同步两个设备,以防止彼此被数据淹没;将执行更多流程,以确保数据传输的可靠性。
  • TCP的缺点:要求两台设备之间有可靠的连接,如果没有接收到一小块数据,那么整个数据块就不能使用(必须重新发送);TCP的慢速连接可能会导致其他设备达到数据传输的瓶颈,因为在数据传输完毕之前——相关的TCP连接将一直保留在接收端计算机上;TCP 比 UDP 慢得多,因为使用此协议的设备必须完成更多的工作(计算)。
TCP数据包还将包含 在封装过程中所添加的被称为标头的信息部分,接下来让我们了解一些重要的TCP标头信息:
  • Source Port(源端口):发送方为发送TCP数据包而开放的端口,该值是随机选择的(从0-65535之间 选择尚未使用的端口)。
  • Destination Port(目标端口):远程主机(接收数据的主机)上运行的应用程序或服务的端口号,例如,默认运行 Web 服务器的端口 80;与源端口不同,目标端口号并不是随机选择的。
  • Source IP(源IP地址):这是发送数据包的设备的IP地址。
  • Destination IP(目标IP地址):这是数据包要到达的设备的IP地址。
  • Sequence Number(序列号):当TCP连接建立时,所传输的第一段数据将被赋予一个随机数。
  • Acknowledgement Number(确认号):在一段数据被赋予序列号之后,下一段数据的序列号值将会是序列号+ 1。
  • Checksum(校验和):这个值可用于对TCP数据包的完整性进行检查,如果校验和的值在数据传输过程中发生了变化,则说明数据已经被损坏。
  • Data(数据):这个标头是存储数据的地方,所存储的是正在传输的文件的字节。
  • Flag(标志):这个TCP标头决定了在三次握手过程中任一设备应该如何处理数据包,特定的标志将决定特定的行为。
TCP/IP三次握手
接下来,我们将讨论TCP/IP三次握手——这是用于在两个设备之间建立连接的过程的术语。
TCP/IP三次握手会使用一些特殊的信息进行交流,下面是一些主要的信息:
  • 1-SYN:SYN消息是客户端在握手过程中发送的初始数据包。这个包用于发起连接并同步两个设备。
  • 2-SYN/ACK:此数据包将由接收设备(服务器)发送,以确认来自客户端的同步尝试。
  • 3-ACK:客户端或服务器都可以使用确认数据包来确认已经成功接收了一系列消息/数据包。
  • 4-DATA:一旦两个设备建立了连接,数据(例如文件的字节)就会通过“DATA”消息发送。
  • 5-FIN:此数据包可用于在TCP连接完成后 干净地(正确地)关闭TCP连接。
  • RST:RST数据包能够立刻终止所有的TCP通信,如果使用了RST数据包则表明在TCP握手过程中存在一些问题——比如发生了服务或应用程序异常以及系统资源不足等故障。
下图显示了Alice和Bob之间正常的TCP三次握手过程,在现实生活中,这将发生在两个设备之间:
notion image
在TCP三次握手过程中,客户端所发送的数据将被赋予一个随机数序列,这个数字序列接下来将进行重构并递增1;两台计算机设备必须就相同的数字序列达成一致,才能以正确的顺序发送数据,这个顺序是在三个步骤中商定的(下面步骤中的序列号是随机值):
  • SYN-Client:客户端将设置用于同步的SYN标志位并生成一个随机初始序列号(ISN)——0 。
  • SYN/ACK-Server:服务器端将设置SYN标志位和ACK标志位并生成一个随机初始序列号(5000),并对客户端的初始序列号(0)进行确认(ACK=0+1)。
  • ACK-Client: 客户端设置ACK标志位,并对服务器端的初始序列号(5000)进行确认(ACK=5000+1)。
tips:SYNchronise-SYN(同步),ACKnowledge-ACK(确认),Initial Sequence Number-ISN(初始序列号);以上步骤的结果——客户端ISN+1,服务器端ISN+1。
notion image
TCP连接的关闭
接下来,让我们简单介绍一下TCP连接关闭背后的过程。
首先,一旦源设备确定目标设备成功接收了所有数据,那么TCP连接就将要被关闭;因为TCP会在设备上占用一些系统资源,所以最好在不需要的时候尽快关闭TCP连接。
为了启动TCP连接的关闭过程,设备将发送一个“FIN”数据包到另一个设备,当然,这仍基于TCP协议,其他设备也必须确认这个“FIN”数据包。
让我们像前文一样使用Alice和Bob来展示这个过程:
notion image
在上图中,我们可以看到Alice首先向Bob发送一个“FIN”包,当Bob收到这个消息之后,Bob会让Alice知道他已经收到消息(ACK),并且Bob将表示他也想要关闭连接(FIN),而Alice在收到来自于Bob的消息(ACK+FIN)之后,将进行最终的确认(ACK)——结果是TCP连接被成功关闭。

答题

notion image

关于三次握手的模拟练习

在和本文相关的TryHackMe实验房间中部署实验环境并回答问题。
tips:以正确的顺序重新组装TCP握手过程,以帮助 Alice 和 Bob 进行通信,在 Alice 与 Bob 的对话结束后会给出一个flag值。

答题

Part1:
notion image
Part2:
notion image
Part3:
notion image
Part4:
notion image
Part5:
notion image
Part6:
notion image
Part7:
notion image
Part8:
notion image
对话结束,得到一个flag:
notion image
最后得到的flag值为:THM{TCP\_CHATTER} 。
notion image

UDP/IP介绍

用户数据报协议(UDP-User Datagram Protocol)是另一种用于设备之间进行数据通信的协议。
与TCP不同,UDP是一种无状态协议,它不需要通过在两个设备之间保持恒定的连接来发送数据;UDP协议不会发生三次握手过程,两个互相通信的设备之间也不存在任何同步。
UDP主要用于应用程序可以容忍数据丢失的情况下(如视频流程序或语音聊天程序),下面是对UDP协议的优缺点比较:
  • UDP的优点:UDP比TCP快得多;UDP让应用层(用户软件)决定是否控制数据包的发送速度;UDP不像TCP那样在设备上保留连续连接。
  • UDP的缺点:UDP不关心发送的数据是否成功被接收,容易发生数据丢失;UDP这种不稳定的数据传输方式可能会给用户糟糕的体验。
如前所述,在两台设备之间建立UDP连接时不会发生任何过程,这意味着UDP不考虑数据是否被接收,也没有TCP所提供的保护措施(例如保护数据完整性)。
UDP数据包比TCP数据包简单得多,并且有更少的标头,然而,这两个协议也能共享一些标准的标头,如下所示:
  • Time to Live (TTL-生存时间):该字段为数据包设置了一个过期计时器,即使数据包永远无法到达目标主机,这也不会阻塞你的网络。
  • Source Address(源地址):发送数据包的设备的IP地址,以便数据知道返回到哪里。
  • Destination Address(目标地址):数据包要发送到的设备的IP地址,以便数据知道下一步要传输到哪里。
  • Source Port(源端口):此值是发送方为发送TCP数据包而打开的端口,该端口号的值是随机选择的(从0-65535之间 选择尚未被使用的端口)。
  • Destination Port(目标端口):远程主机(接收数据的主机)上运行的应用程序或服务的端口号,例如,默认运行 Web 服务器的端口 80;与源端口不同,目标端口号并不是随机选择的。
  • Data(数据):这个标头是存储数据的地方,所存储的是正在传输的文件的字节。
通过UDP通信与通过TCP通信的过程是不同的,我们应该记住UDP协议是无状态的,在UDP传输数据期间并不会发送确认数据包(ACK)
下图显示了Alice和Bob之间的正常UDP通信,在现实生活中,UDP通信过程将发生在两个设备之间。
notion image
答题
notion image

端口基础介绍&相关实例练习

端口基础介绍
Port(端口)是数据进行交换的关键点,Port也有港口的含义,此名称或许恰如其分;你可以想象在海边有一个又一个港口,所有想要靠岸停放的船舶都必须前往与船舶尺寸和船舶用途相匹配的港口,例如,一艘游轮不能停靠在为渔船而建造的港口处,反之亦然。
这些端口会规定什么服务才可以使用什么端口号——如果某个服务和某个端口不兼容,就不能为该服务分配此端口;网络设备在相互通信时也将使用端口来执行一些严格的规则,当两个设备建立起连接之后,设备所发送或接收的任何数据都将通过端口进行通信。
在计算机中,端口号所对应的是 0 到 65535 之间的数值。
由于端口的范围可以是0-65535之间的任何数值,因此很快就会出现难以跟踪哪个应用程序正在使用哪个端口的风险,值得庆幸的是,我们能够将应用程序、软件和行为与一组标准规则相关联;例如,通过强制任何web浏览器的数据都必须通过端口80发送,软件开发人员可以设计出多种使用80端口进行通信的web浏览器,如Chrome浏览器、Firefox浏览器等,而这些浏览器最终都能以相同的方式解释数据。
这意味着现在所有的浏览器都有一个共同的标准规则——通过80端口发送数据;但是浏览器的外观、使用感觉和易用性则取决于设计师或用户的个人选择。
除了web浏览器的标准规则是“使用端口80进行通信”之外,其他一些协议也已经分配了对应的标准规则,接下来我们将探讨 和一些其他协议相对应的标准规则:
tips:任何在 0 到 1024 之间的端口都被称为普通端口。
  • File Transfer Protocol (FTP协议):文件传输协议;默认使用21端口;此协议用于构建在客户机-服务器(C/S)模型上的文件共享应用程序,这意味着你可以从FTP服务器上下载文件。
  • Secure Shell (SSH协议):安全外壳协议;默认使用22端口;该协议可用于通过基于文本的管理界面安全地登录目标系统。
  • HyperText Transfer Protocol (HTTP协议):超文本传输协议;默认使用80端口;这个协议为万维网(WWW)提供了基础,你的浏览器能够使用该协议来访问或者下载网页上的文本、图像和视频等资源。
  • HyperText Transfer Protocol Secure (HTTPS协议):超文本传输安全协议;默认使用443端口;该协议与HTTP协议相同,但是另外还增加了安全加密特性。
  • Server Message Block (SMB协议):服务器消息块协议,是一种网络文件系统访问协议;默认使用445端口;该协议类似于文件传输协议(FTP),但是,除了文件之外,SMB协议还允许你共享打印机等设备。
  • Remote Desktop Protocol (RDP协议):远程桌面协议;默认使用3389端口;该协议是一种使用可视桌面界面登录目标系统的安全方法(与SSH协议基于文本界面的限制不同)。
我们在此只是简单地介绍了网络安全中的一些常见协议,你可以在以下链接中找到1024个常用端口列表:
http://www.vmaxx.net/techinfo/ports.htm
注意:上述这些协议只是默认会遵循标准规则来使用端口,也就是说,你其实可以在不同的端口上来管理与协议交互的应用程序,而不只是使用标准端口(比如在8080端口上而不是在80标准端口上运行web服务器);但是应用程序将假定遵循标准规则来使用端口,因此你在通过浏览器访问目标服务器时——必须在URL的最后提供冒号(:)并加上具体的端口号。
实例练习
在和本文相关的TryHackMe实验房间中部署实验环境并回答问题。
答题
tips:通过端口“1234”连接到目标IP地址“8.8.8.8”,最后将收到一个flag。
notion image
最后得到的flag是:THM{YOU\_CONNECTED\_TO\_A\_PORT} 。
notion image
 
上一篇
Linux
下一篇
Web