网络通信入门
我们一直听说,要进行渗透测试,渗透测试人员必须了解基本的网络概念,如 IP 地址、有类子网划分、无类子网划分、端口和广播网络。第一个原因是,哪些主机在批准范围内处于活动状态,以及它们开放并响应哪些服务、端口和功能,这些活动将决定评估人员在渗透测试中要执行哪种活动。环境不断变化,系统经常重新分配。因此,旧的漏洞很可能会再次出现,如果没有良好的网络扫描知识,可能会发生必须重新进行初始扫描的情况。在后续章节中,我们将讨论网络通信的基础知识。
参考模型
参考模型提供了一种标准化方法,这种方法在全世界范围内都适用,因为使用计算机网络的人位于广泛的物理范围内,他们的网络设备可能具有异构架构。为了实现异构设备之间的通信,我们需要一个标准化模型,即参考模型,该模型将为我们提供这些设备通信的方式。
我们有两个参考模型,例如 OSI 模型和 TCP/IP 参考模型。但是,OSI 模型是假设的,而 TCP/IP 是实用的模型。
OSI 模型
开放系统接口由国际标准化组织 (ISO) 设计,因此也称为 ISO-OSI 模型。
OSI 模型由七层组成,如下图所示。每一层都有特定的功能,但每一层都为上一层提供服务。
物理层
物理层负责以下活动 −
激活、维护和停用物理连接。
定义传输所需的电压和数据速率。
将数字位转换为电信号。
确定连接是单工、半双工还是全双工。
数据链路层
数据链路层执行以下功能 −
执行对通过物理链路传输的信息进行同步和错误控制。
启用错误检测,并将错误检测位添加到要传输的数据中。
网络层
网络层执行以下功能 −
通过各种通道将信号路由到另一端。
通过决定数据应采用哪条路由来充当网络控制器。
将传出的消息分成数据包,并将传入的数据包组装成消息以供更高级别使用。
传输层
传输层执行以下功能 −
它决定数据传输是否应在并行路径或单路径上进行。
它执行多路复用,拆分数据。
它将数据组分解为更小的单元,以便网络层更有效地处理它们。
传输层保证从一端到另一端的数据传输。
会话层
会话层执行以下功能 −
管理消息并同步两个不同应用程序之间的对话。
它控制登录和注销、用户识别、计费和会话管理。
表示层
表示层执行以下功能 −
此层确保信息以接收系统能够理解和使用的形式传递。
应用层
应用层执行以下功能 −
它提供不同的服务,例如以多种方式处理信息、重新传输信息文件、分发结果等。
应用层还执行登录或密码检查等功能。
TCP/IP 模型
传输控制协议和 Internet 协议 (TCP/IP) 模型是一种实用模型,用于 Internet。
TCP/IP 模型将两层(物理层和数据链路层)合并为一层 - 主机到网络层。下图显示了 TCP/IP 模型的各个层 −
应用层
此层与 OSI 模型相同,并执行以下功能 −
它提供不同的服务,例如以多种方式处理信息、重新传输信息文件、分发结果等。
应用层还执行登录或密码检查等功能。
以下是应用层使用的不同协议 −
- TELNET
- FTP
- SMTP
- DN
- HTTP
- NNTP
传输层
它的功能与 OSI 模型中的传输层相同。考虑以下与传输层相关的要点 −
它使用 TCP 和 UDP 协议进行端到端传输。
TCP 是一种可靠且面向连接的协议。
TCP 还处理流量控制。
UDP 不可靠,无连接协议不执行流量控制。
此层采用 TCP/IP 和 UDP 协议。
Internet 层
此层的功能是允许主机将数据包插入网络,然后使它们独立传输到目的地。但是,接收数据包的顺序可能与发送数据包的顺序不同。
Internet 层采用 Internet 协议 (IP)。
主机到网络层
这是 TCP/IP 模型中的最低层。主机必须使用某种协议连接到网络,以便可以通过网络发送 IP 数据包。此协议因主机和网络而异。
此层使用的不同协议包括 −
- ARPANET
- SATNET
- LAN
- 分组无线电
有用的架构
以下是一些用于网络通信的有用架构 −
以太网帧架构
1973 年,一位名叫 Robert Metcalfe 的工程师首次发明了以太网,该网络根据 IEEE 标准 802.3 定义。它最初用于工作站和打印机之间的互连和发送数据。超过 80% 的 LAN 使用以太网标准,因为它速度快、成本低、安装方便。另一方面,如果我们谈论帧,那么数据以这种方式从主机传输到主机。帧由各种组件组成,例如 MAC 地址、IP 报头、开始和结束分隔符等。
以太网帧以前导码和 SFD 开头。以太网报头包含源 MAC 地址和目标 MAC 地址,之后是帧的有效载荷。最后一个字段是 CRC,用于检测错误。基本以太网帧结构在 IEEE 802.3 标准中定义,解释如下 −
以太网 (IEEE 802.3) 帧格式
以太网数据包将以太网帧作为其有效载荷进行传输。以下是以太网帧的图形表示以及每个字段的描述 −
字段名称 | 前导码 | SFD(帧起始分隔符) | 目标 MAC | 源 MAC | 类型 | 数据 | CRC |
---|---|---|---|---|---|---|---|
大小(以字节为单位) | 7 | 1 | 6 | 6 | 2 | 46-1500 | 4 |
前导码
以太网帧前面有一个 7 字节大小的前导码,用于通知接收系统帧即将开始,并允许发送方和接收方建立位同步。
SFD(帧起始分隔符)
这是一个 1 字节字段,用于表示目标 MAC 地址字段从下一个字节开始。有时,SFD 字段被视为前导码的一部分。这就是为什么前导码在许多地方被视为 8 个字节的原因。
目标 MAC − 这是一个 6 字节字段,其中有接收系统的地址。
源 MAC −这是一个 6 字节字段,其中有发送系统的地址。
类型 − 它定义帧内的协议类型。例如,IPv4 或 IPv6。其大小为 2 个字节。
数据 − 这也称为有效负载,实际数据插入此处。其长度必须在 46-1500 字节之间。如果长度小于 46 字节,则添加填充 0 以满足最小可能长度,即 46。
CRC(循环冗余校验) −这是一个包含 32 位 CRC 的 4 字节字段,可用于检测损坏的数据。
扩展以太网帧(以太网 II 帧)格式
以下是扩展以太网帧的图形表示,使用该帧我们可以获得大于 1500 字节的有效负载 −
字段名称 | 目标 MAC | 源 MAC | 类型 | DSAP | SSAP | Ctrl | 数据 | CRC |
---|---|---|---|---|---|---|---|---|
大小(以字节为单位) | 6 | 6 | 2 | 1 | 1 | 1 | >46 | 4 |
与 IEEE 802.3 以太网帧不同的字段描述如下 −
DSAP(目标服务访问点)
DSAP 是一个 1 字节长的字段,表示要接收消息的网络层实体的逻辑地址。
SSAP(源服务访问点)
SSAP 是一个 1 字节长的字段,表示创建消息的网络层实体的逻辑地址。
Ctrl
这是一个 1 字节的控制字段。
IP 数据包架构
Internet 协议是 TCP/IP 协议套件中的主要协议之一。该协议在 OSI 模型的网络层和 TCP/IP 模型的 Internet 层工作。因此,该协议负责根据主机的逻辑地址识别主机,并通过底层网络在主机之间路由数据。IP 提供了一种通过 IP 寻址方案唯一标识主机的机制。IP 使用尽力而为的交付方式,即它不保证数据包会被交付到目的地主机,但它会尽力到达目的地。
在后续章节中,我们将了解 IP 的两个不同版本。
IPv4
这是 Internet 协议版本 4,使用 32 位逻辑地址。以下是 IPv4 标头的图表以及字段 − 的描述
版本
这是使用的 Internet 协议的版本;例如 IPv4。
IHL
Internet 报头长度;整个 IP 报头的长度。
DSCP
差分服务代码点;这是服务类型。
ECN
显式拥塞通知;它携带有关路由中看到的拥塞的信息。
总长度
整个 IP 数据包的长度(包括 IP 报头和 IP 有效负载)。
标识
如果 IP 数据包在传输过程中被分段,则所有分段都包含相同的标识号。
标志
根据网络资源的要求,如果 IP 数据包太大而无法处理,这些"标志"会告诉它们是否可以分段。在此 3 位标志中,MSB 始终设置为"0"。
片段偏移
此偏移量指示片段在原始 IP 数据包中的确切位置。
生存时间
为了避免网络中出现循环,每个数据包在发送时都会设置一些 TTL 值,该值会告诉网络此数据包可以跨越多少个路由器(跳数)。在每一跳,其值都会减一,当值达到零时,数据包将被丢弃。
协议
告诉目标主机的网络层此数据包属于哪种协议,即下一级协议。例如,ICMP 的协议号为 1,TCP 为 6,UDP 为 17。
报头校验和
此字段用于保存整个报头的校验和值,然后用于检查数据包是否无错误接收。
源地址
数据包发送方(或源)的 32 位地址。
目标地址
数据包接收方(或目标)的 32 位地址。
选项
这是一个可选字段,如果 IHL 的值大于 5,则使用该字段。这些选项可能包含安全、记录路由、时间戳等选项的值。
如果您想详细研究 IPv4,请参考此链接 - www.tutorialspoint.com/ipv4/index.htm
IPv6
Internet 协议版本 6 是最新的通信协议,其前身 IPv4 工作在网络层(第 3 层)。除了提供大量逻辑地址空间外,该协议还具有充足的功能,可解决 IPv4 的缺点。以下是 IPv4 标头的图表以及字段的描述 −
版本(4 位)
它代表 Internet 协议的版本 — 0110。
流量类别(8 位)
这 8 位分为两部分。最高 6 位用于服务类型,让路由器知道应为该数据包提供哪些服务。最低 2 位用于显式拥塞通知 (ECN)。
流标签 (20 位)
此标签用于维护属于通信的数据包的顺序流。源标记序列以帮助路由器识别特定数据包属于特定信息流。此字段有助于避免数据包重新排序。它专为流媒体/实时媒体而设计。
有效载荷长度 (16 位)
此字段用于告诉路由器特定数据包的有效载荷中包含多少信息。有效载荷由扩展头和上层数据组成。使用 16 位,最多可以指示 65535 个字节;但如果扩展报头包含逐跳扩展报头,则有效负载可能超过 65535 字节,并且此字段设置为 0。
下一个报头(8 位)
此字段用于指示扩展报头的类型,或者如果扩展报头不存在,则指示上层 PDU。上层 PDU 类型的值与 IPv4 相同。
跳跃限制(8 位)
此字段用于阻止数据包在网络中无限循环。这与 IPv4 中的 TTL 相同。跳跃限制字段的值在通过链路(路由器/跳跃)时减 1。当该字段达到 0 时,数据包将被丢弃。
源地址(128 位)
此字段表示数据包的发起者的地址。
目标地址(128 位)
此字段提供数据包预期接收者的地址。
如果您想详细研究 IPv6,请参考此链接 — www.tutorialspoint.com/ipv6/index.htm
TCP(传输控制协议)报头架构
众所周知,TCP 是一种面向连接的协议,在开始通信之前,两个系统之间会建立会话。通信完成后,连接将关闭。TCP 使用三次握手技术在两个系统之间建立连接套接字。三次握手意味着在两个系统之间来回发送三条消息 — SYN、SYN-ACK 和 ACK。两个系统(发起系统和目标系统)之间的工作步骤如下 −
步骤 1 − 设置了 SYN 标志的数据包
首先,尝试发起连接的系统从设置了 SYN 标志的数据包开始。
步骤 2 −带有 SYN-ACK 标志设置的数据包
现在,在此步骤中,目标系统返回带有 SYN 和 ACK 标志设置的数据包。
步骤 3 − ACK 标志已设置的数据包
最后,发起系统将向原始目标系统返回一个设置了 ACK 标志的数据包。
以下是 TCP 标头的图表以及字段说明 −
源端口(16 位)
它标识发送设备上应用程序进程的源端口。
目标端口(16 位)
它标识接收设备上应用程序进程的目标端口。
序列号(32 位)
数据包中段的数据字节的序列号会话。
确认号(32 位)
当设置 ACK 标志时,此数字包含预期数据字节的下一个序列号,并作为对先前收到的数据的确认。
数据偏移量(4 位)
此字段表示 TCP 标头的大小(32 位字)和当前数据包中整个 TCP 段的数据偏移量。
保留(3 位)
保留以备将来使用,默认设置为零。
标志(每个 1 位)
NS −显式拥塞通知信令过程使用此 Nonce Sum 位。
CWR − 当主机接收到设置了 ECE 位的数据包时,它会设置拥塞窗口减少以确认已收到 ECE。
ECE − 它有两个含义 −
如果 SYN 位清除为 0,则 ECE 表示 IP 数据包已设置其 CE(拥塞体验)位。
如果 SYN 位设置为 1,则 ECE 表示设备具有 ECT 功能。
URG − 它表示紧急指针字段具有重要数据并且应该进行处理。
ACK −它表示确认字段有意义。如果 ACK 被清除为 0,则表示数据包不包含任何确认。
PSH − 设置时,它是对接收站的请求,要求将数据(一到达)推送到接收应用程序而不对其进行缓冲。
RST − 重置标志具有以下特点 −
它用于拒绝传入连接。
它用于拒绝一个段。
它用于重新启动连接。
SYN − 此标志用于在主机之间建立连接。
FIN − 此标志用于释放连接,此后不再交换数据。由于带有 SYN 和 FIN 标志的数据包具有序列号,因此它们将按正确的顺序进行处理。
Windows Size
此字段用于两个站之间的流量控制,并指示接收器为段分配的缓冲区量(以字节为单位),即接收器期望多少数据。
校验和 −此字段包含报头、数据和伪报头的校验和。
紧急指针 − 如果 URG 标志设置为 1,则指向紧急数据字节。
选项 − 它有助于提供常规报头未涵盖的附加选项。选项字段始终以 32 位字描述。如果此字段包含的数据少于 32 位,则使用填充来覆盖剩余位以达到 32 位边界。
如果您想详细研究 TCP,请参考此链接 — https://www.tutorialspoint.com/data_communication_computer_network/transmission_control_protocol.htm
UDP(用户数据报协议)报头架构
UDP 是一种简单的无连接协议,与面向连接的协议 TCP 不同。它涉及最少量的通信机制。在 UDP 中,接收方不会生成对已接收数据包的确认,反过来,发送方也不会等待对已发送数据包的任何确认。这个缺点使得该协议不可靠,但更易于处理。以下是UDP报头的图表以及字段说明 −
源端口
此16位信息用于标识数据包的源端口。
目标端口
此16位信息用于标识目标机器上的应用程序级服务。
长度
长度字段指定UDP数据包(包括报头)的整个长度。它是一个16位字段,最小值为8字节,即UDP报头本身的大小。
校验和
此字段存储发送方在发送前生成的校验和值。 IPv4 将此字段作为可选字段,因此当校验和字段不包含任何值时,它将被设为 0,并且其所有位都设置为零。
要详细研究 TCP,请参考此链接 — 用户数据报协议