主机枚举

推荐工具:nmap。强大的网络扫描和安全审计工具

常用命令

基本扫描

1
nmap 10.10.191.55	#对目标执行基本的扫描,扫描默认端口

扫描特定端口或端口范围

1
2
nmap -p 22,80 10.10.191.55
nmap -p 1-1000 10.10.191.55

扫描时确定主机状态(ping扫描)

1
nmap -sn 10.10.191.55	#仅确定主机是否在线,不扫描端口

扫描使用特定协议的端口

1
2
nmap -sU 10.10.191.55		#执行UDP端口扫描
nmap -sT 10.10.191.55 #执行TCP端口扫描

版本探测

1
nmap -sV 10.10.191.55	#探测端口上运行的服务的版本信息

操作系统探测

1
nmap -0 10.10.191.55	#尝试识别目标主机的操作系统

启动脚本扫描

1
nmap --script=[script] 10.10.191.55	#使用nmap脚本引擎执行特定Nmap脚本

使用特定扫描技术

1
2
nmap -sS 10.10.191.55	#进行SYN扫描(半开放扫描)
nmap -sF 10.10.191.55 #进行FIN扫描(针对某些系统的隐蔽扫描方式)

输出格式

1
2
nmap -oN out.txt 10.10.191.55	#将扫描结果以普通格式保存到out.txt
nmap -oX out.xml 10.10.191.55 #将扫描结果以XML格式保存到out.xml

聚合多种扫描选项

1
nmap -A 10.10.191.55	#启用操作系统探测、版本探测、脚本扫描和traceroute

扫描整个网络

1
nmap 192.168.1.0/24

快速扫描

1
nmap -T4 10.10.191.55

Web枚举

gobuster

目录枚举

1
gobuster dir -u 10.10.191.55 -w big.txt

DNS子域枚举

1
gobuster dns -d 10.10.191.55 -w big.txt

虚拟主机枚举

1
gobuster vhost -u 10.10.191.55 -w big.txt

dirsearch

扫描网站并查找具有特定扩展名的文件

1
python3 dirsearch.py -u 10.10.173.75 -e php,html,js

web开发

sqlmap

指定目标URL测试

1
python sqlmap.py -u "https://10.10.173.75/administrator.php"

对表单进行sql注入并且将数据库内容导出

1
python sqlmap.py -u http://10.10.173.75/administrator.php --forms --dump

网络

网络简单来说就是联系在一起的东西,在计算机领域就是多个连接的设备。

互联网

互联网是一个巨大的网络,由许多小网络组成。这些小网络杯称为专用网络,连接这些小网络的杯称为公共网络也就是Internet。计算机网络所以分为两种:

  • Private network(专用网络)
  • Public network(公共网络)

在网络上,计算机设备将使用一组标签来标识自己

1989年,蒂姆·伯纳斯·李 通过创建万维网(WWW-World Wide Web) 发明了我们现在所知道的互联网。互联网才开始被用作存储和共享信息的存储库

识别网络上的设备

在网络中计算机设备由两种被识别的方式:

  • IP地址
  • 媒体访问控制(MAC-Media Access Control)地址——类似序列号的地址

IP Addresses

IP地址(Internet协议)可以在一段时间内用作识别网络上主机的方式(一段时间是因为IP是可变的,当前一个设备使用时间过期后就可能会被其它设备使用)。

IP地址是根据IP寻址和子网划分技术计算得出的。

IP根据设备的位置分为两种类型:

  • 公共IP地址
  • 私有IP地址

img

这两台设备在同一私有网络中,所以他们之间相互通信时可以使用私有IP地址相互通信。但是这两台设备发送到Internet上的任何数据都会被相同的公共IP地址识别。

MAC Addresses

网络上的设备都有一个物理网络接口,和接口对应的是该设备主板上的一个微型芯片板;设备的物理网络接口会由制造芯片的工厂分配一个唯一的地址,此地址被称为MAC(媒体访问控制-Media Access Control)地址。

MAC地址的前六个字符(前三位MAC地址)代表制作物理网络接口的公司,MAC地址的后六个字符则是唯一的数字。

img

关于Ping(ICMP协议)

Ping使用ICMP (Internet Control Message Protocol)报文来判断设备之间连接的性能,例如连接是否存在或者连接是否可靠

局域网(LAN-Local Area Network)拓扑

  • Star Topology(星型拓扑)

img

特点:由一个中央网络设备单独连接,发送到设备的任何信息都需要通过中央网络设备之后再转发。

优点:更强的拓展性

缺点:维护成本高

  • Bus Topology(总线拓扑)

img

特点:

总线拓扑中的各个设备在连接时 依赖于主干电缆的单一连接,此类拓扑结构中的设备就类似于树的叶子,因为在某种意义上,设备(叶子)起源于主干电缆上的分支。

优点:容易配置并且成本低

缺点:由于所有属于都沿着同一条电缆,所以如果总线拓扑中的各个设备同时请求数据,就很容易让数据传输变得缓慢和阻塞。还有一个就是当发生故障时几乎没有冗余,当线路故障时,设备就不能再沿着总线接收或传输数据

  • Ring Topology(环形拓扑)

img

特点:环形拓扑(也称为令牌拓扑),在此拓扑中将由计算机等设备直接相互连接形成环路,这意味着几乎不需要电缆布线(只需要一点点电缆布线),也不太依赖于星型拓扑结构中的专用硬件。

优点:只有一个传输方向,很容易排除故障

缺点:单项传输并不是一种有效传输方式,数据可能会在传递过程中经过多个设备,可能会出现传输瓶颈。

  • 交换机

网络中的专用设备,被设计用于聚合多个其它设备。交换机上有多个端口,多部计算机可以连接对应的端口,这样当交换机接收到数据包时就会发送到对应的端口计算机。

  • 路由器

路由器的工作是连接网络并在网络之间传递数据。路由器就相当于将多个网络连接到一起从而构建出一条路。

子网划分

网络有各种各样各种形状的,子网划分就相当于将网络内部划分为更小的微型网络。

子网划分通过划分网络中可以容纳主机数量来实现,用一组子网掩码的数字来表示。

img

常见的子网掩码是255.255.255.0,前24位是用于标识在同一网络中,后8位是确定同一网络下的不用主机。

子网通过三种不同的方式使用IP地址:

  • 标识网络地址
  • 标识主机地址
  • 标识默认网关

img

默认网关是网络中的一个特殊设备,它能够向另一个网络上的设备发送信息。

子网划分的好处:

  • 效率
  • 安全
  • 完全控制

ARP协议

网络中的设备有两个标识符:MAC地址和IP地址。通过ARP协议可以允许设备在网络中识别自己,ARP协议即地址解析协议(Address Resolution Protocol )。

网络中的每个设备都有一个用于存储信息的分类账簿,被称为缓存,在ARP协议的上下文中,这个缓存会存储网络上其他设备的标识(即MAC地址和IP地址)。

为了将这两个标识符(IP地址和MAC地址)映射在一起,ARP协议会发送两种类型的消息:

  • ARP Request(ARP请求)
  • ARP Reply(ARP应答)

当发送ARP请求时,初始源设备会向网络上的其他设备广播一条消息,以询问其他设备的MAC地址是否与初始源设备所请求的IP地址相匹配;如果某个设备确实有初始源设备所请求的IP地址(此设备即为初始目标设备),则会向初始源设备返回一个ARP应答消息以进行确认,初始源设备随后将记住这一映射关系,并将其存储在初始源设备的缓存中(以一个ARP条目的形式存储)。

img

DHCP(动态主机配置协议)

自动分配IP地址最常见的是使用DHCP(动态主机配置协议)。当设备连接到网络上时,没有手动配置IP地址,则会发出一个DHCP Discover请求消息来查看网络上是否有任何DHCP服务器,然后 DHCP 服务器将回复一个包含原设备可用的 IP 地址信息的消息(DHCP Offer)给原设备,紧接着原设备将再发送一个请求消息(DHCP Request)以确认它需要这个被提供的 IP 地址,最后,DHCP服务器将会发送一个应答消息(DHCP ACK)以确认IP分配操作已经完成,此后原设备就可以开始使用由DHCP服务器所提供的 IP 地址。

img

OSI网络模型

OSI模型(开放系统互连模型-Open Systems Interconnection Model)是网络中使用的绝对基本模型,这个关键模型提供了一个框架,规定了所有联网设备将如何发送、接收和解释数据。

OSI模型的主要好处之一是:当与其他设备进行通信时,网络上的设备可以具有不同的功能和设计,而且在遵循OSI模型一致性的网络上发送的数据也可以被其他设备理解。

img

应用层(Application)

应用层用于确定用户应该如何与发送或接收的数据进行交互。

日常的应用程序,如电子邮件客户端、浏览器或文件服务器浏览软件(如FileZilla) 等,它们能够为用户提供一个友好的图形用户界面(GUI),这个GUI可用于用户与数据(发送的数据或接收的数据)进行交互;应用层中还包括了DNS协议(域名系统),DNS能将网站地址转换为IP地址。

表示层(Presentation)

是OSI模型标准化的开始。无论应用程序如何开发,数据仍以相同的方式处理。

这一层充当数据与应用层之间的翻译器。接收信息的计算机也能理解以一种格式发送到计算机的数据以另一种格式发送

数据加密(如访问安全站点时使用HTTPS协议)等安全特性也将在表示层得到应用。

会话层(Session)

当数据从表示层正确的转换格式,会话层将开始创建到数据目的地(另一台计算机)的连接。当连接建立后,将同时创建一个会话,使两台计算机同步,以确保他们在发送数据和接收数据之前处于同一页面上。

接着会话层将开始要发送的数据分成更小的数据块,并开始一次一个地发送这些数据块(packets-数据包)。这样可以防止,当有一部分数据传输失败后不用全部重新发送。

传输层(Transport)

当数据在设备之间发送时,将遵循以下两种不同的协议之一:

  • TCP(传输控制协议)
  • UDP(用户数据报协议)

TCP(传输控制)协议

传输控制协议(TCP-Transmission Control Protocol)在设计时考虑到了数据传输的可靠性;并且TCP协议在发送数据和接收数据所需的时间内,将在两个设备之间保持恒定的连接——TCP协议是面向连接的。

TCP还在其设计中加入了错误检查,错误检查能够确认从会话层(第5层)发送的小块数据已经按顺序(按发送数据的顺序)被接收和重新组装。

  • TCP优点:能够保证数据的准确性;能够同步两个设备,以防止彼此被数据淹没;将执行更多流程,以确保数据传输的可靠性。
  • TCP的缺点:要求两台设备之间有可靠的连接,如果没有接收到一小块数据,则无法使用整个数据块;TCP的慢速连接可能会导致其他设备达到数据传输的瓶颈,因为在数据传输完毕之前——相关的TCP连接将一直保留在接收端计算机上;TCP 比 UDP 慢得多,因为使用此协议的设备必须完成更多工作。

TCP主要用于文件共享、互联网浏览或发送电子邮件等情况,因为这些服务要求数据是准确和完整的,而TCP协议的特性能够满足这些要求。

UDP(用户数据报)协议

任何基于UDP协议发送的数据都无法确保不会发生数据丢失,UDP协议在进行数据传输时并没有实现设备的同步过程,UDP的特性是:无连接、不可靠、快速传输。

  • UDP的优点:UDP比TCP快得多;UDP让应用层(用户软件)决定是否控制数据包的发送速度;UDP不像TCP那样在设备上保留连续连接。
  • UDP的缺点:UDP不关心发送的数据是否成功被接收,容易发生数据丢失;UDP这种不稳定的数据传输方式可能会给用户糟糕的体验。

网络层(Network)

OSI模型的第三层(网络层)是路由和重新组装数据之处,而路由能够确定发送数据块时应该选择的最优路径。

网络层的一些协议确切地确定了数据到达设备的“最佳”路径,这些协议包括了开放最短路径优先协议(OSPF-Open Shortest Path First)和路由信息协议(RIP-Routing Information Protocol);此外,路径的选择还由以下因素决定:

  • 哪条路径最短?也就是说,数据包需要通过的设备最少。
  • 哪条路径最可靠?例如,之前在该路径上丢失过数据包吗?
  • 哪条路径的物理连接更快?例如,一条路径是使用铜缆线连接(较慢)还是光纤连接(相当快)?

在这一层,一切都是通过IP地址(如192.168.1.100)进行处理的,能够使用IP地址发送数据包的路由器等设备也被称为第三层设备,因为它们能够在OSI模型的第三层工作。

img

数据链路层着重于数据传输过程中的物理寻址。该层级将接收来自网络层的数据包(包括远程计算机的IP地址),并会在数据包中添加接收端点的物理MAC(媒体访问控制)地址。

在每一台联网计算机内部都有一个网络接口卡(NIC- Network Interface Card),它带有一个唯一的MAC(Media Access Control)地址作为标识;MAC地址是由制造商出厂时就自带的,不能被改变。

物理层(Physical)

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

数据包和帧

数据包和帧是小块的数据,组合在一起就是更大的信息或消息。

数据包和帧的组合过程被称为封装,在这个阶段中,我们可以安全地假设:任何包含IP地址的信息指的都是数据包,而当封装好的信息被剥离时,我们谈论的信息则是帧本身。

数据包是跨网络设备传输数据的有效方式,由于这些数据是分小块传输的,所以此时在整个网络中发生数据传输阻塞的几率 比一次性发送大消息进而造成传输阻塞的几率要小。

使用了协议的数据包将有一组标头,其中包含跨网络发送的数据的附加信息。

标头信息:

  • Time to live(生存时间):该字段为数据包设置了一个过期计时器,即使数据包永远无法到达目标主机,这也不会阻塞网络
  • Checknum(校验和):该字段能够为TCP/IP等协议提供完整性检查,如果数据被更改了,那么此时的Checksum值将会改变
  • Source Address(源地址):该字段表示发送数据包的设备的IP地址,这样数据就知道返回到哪里。
  • Destination Address(目标地址):数据包要发送到的设备的IP地址,以便数据知道下一步传输到哪里。

TCP/IP(三次握手)

TCP/IP模型分层:

  • Application(应用层)
  • Transport(传输层)
  • Internet(网际层)
  • Network Interface(网络接口层)

数据包在经过TCP/IP模型的每一层时都会被添加部分信息——这个过程被称为封装,而与此过程相反的是解封装。

关于TCP协议

TCP协议的定义特征是它是基于连接的,所以在发送数据之前,TCP必须在客户端和作为服务器的设备之间建立起一个持续的连接;所以TCP能够保证发送的任何数据都会被正确接收,这个过程称为TCP/IP三次握手。

TCP优点和缺点:

  • TCP的优点:能够保证数据的准确性;能够同步两个设备,以防止彼此被数据淹没;将执行更多流程,以确保数据传输的可靠性。
  • TCP的缺点:要求两台设备之间有可靠的连接,如果没有接收到一小块数据,那么整个数据块就不能使用(必须重新发送);TCP的慢速连接可能会导致其他设备达到数据传输的瓶颈,因为在数据传输完毕之前——相关的TCP连接将一直保留在接收端计算机上;TCP 比 UDP 慢得多,因为使用此协议的设备必须完成更多的工作(计算)。

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三次握手

用于在两个设备之间建立连接的过程。

  • 1-SYN:SYN消息是客户端在握手过程中发送的初始数据包。这个包用于发起连接并同步两个设备。
  • 2-SYN/ACK:此数据包将由接收设备(服务器)发送,以确认来自客户端的同步尝试。
  • 3-ACK:客户端或服务器都可以使用确认数据包来确认已经成功接收了一系列消息/数据包。
  • 4-DATA:一旦两个设备建立了连接,数据(例如文件的字节)就会通过“DATA”消息发送。
  • 5-FIN:此数据包可用于在TCP连接完成后 干净地(正确地)关闭TCP连接。
  • RST:RST数据包能够立刻终止所有的TCP通信,如果使用了RST数据包则表明在TCP握手过程中存在一些问题——比如发生了服务或应用程序异常以及系统资源不足等故障。

img

在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。

img

TCP连接的关闭

img

UDP/IP

用户数据报协议(UDP-User Datagram Protocol)是另一种用于设备之间进行数据通信的协议。

与TCP不同,UDP是一种无状态协议,它不需要通过在两个设备之间保持恒定的连接来发送数据;UDP协议不会发生三次握手过程,两个互相通信的设备之间也不存在任何同步。

UDP主要用于应用程序可以容忍数据丢失的情况下(如视频流程序或语音聊天程序),UDP协议的优缺点:

  • UDP的优点:UDP比TCP快得多;UDP让应用层(用户软件)决定是否控制数据包的发送速度;UDP不像TCP那样在设备上保留连续连接。
  • UDP的缺点:UDP不关心发送的数据是否成功被接收,容易发生数据丢失;UDP这种不稳定的数据传输方式可能会给用户糟糕的体验。

UDP标头

  • Time to Live (TTL-生存时间):该字段为数据包设置了一个过期计时器,即使数据包永远无法到达目标主机,这也不会阻塞你的网络。
  • Source Address(源地址):发送数据包的设备的IP地址,以便数据知道返回到哪里。
  • Destination Address(目标地址):数据包要发送到的设备的IP地址,以便数据知道下一步要传输到哪里。
  • Source Port(源端口):此值是发送方为发送TCP数据包而打开的端口,该端口号的值是随机选择的(从0-65535之间 选择尚未被使用的端口)。
  • Destination Port(目标端口):远程主机(接收数据的主机)上运行的应用程序或服务的端口号,例如,默认运行 Web 服务器的端口 80;与源端口不同,目标端口号并不是随机选择的。
  • Data(数据):这个标头是存储数据的地方,所存储的是正在传输的文件的字节。

UDP协议是无状态的,在UDP传输数据期间并不会发送确认数据包(ACK)

img

端口基础

端口会规定什么服务才可以使用什么端口号——如果某个服务和某个端口不兼容,就不能为该服务分配此端口;网络设备在相互通信时也将使用端口来执行一些严格的规则,当两个设备建立起连接之后,设备所发送或接收的任何数据都将通过端口进行通信。

在计算机中,端口号所对应的是 0 到 65535 之间的数值。

任何在 0 到 1024 之间的端口都被称为普通端口。

  • FTP协议:21端口
  • SSH协议:22端口
  • HTTP协议:80端口
  • HTTPS协议:443端口
  • SMB协议(服务器消息快协议):类似于FTP协议,445端口
  • RDP协议(远程桌面协议):3389端口

端口转发

端口转发的目的是将某一网络中的服务能够让其它网络通过公网访问。

img

防火墙

防火墙是网络中的一种设备,它负责确定允许哪些流量进入网络和退出网络,防火墙可以被视为网络的边界安全。

  • 流量从哪里来? (防火墙是否被告知:接受/拒绝来自特定网络的流量?)
  • 流量要往哪里去? (防火墙是否被告知:接受/拒绝发往特定网络的流量?)
  • 流量流向哪个端口? (防火墙是否被告知:仅接受/拒绝发往端口 80 的流量?)
  • 流量使用什么协议? (防火墙是否被告知:接受/拒绝 UDP、TCP 或两者的流量?)

防火墙将通过执行数据包检查来确定以上问题

主要介绍两种类型的防火墙:

  • Stateful(有状态):这种类型的防火墙将使用来自连接的全部信息,这种防火墙不是基于单个数据包检查,而是基于整个连接来确定设备的行为;与无状态防火墙相比,有状态防火墙会消耗很多资源,因为相关的流量决策是动态的,例如,有状态防火墙可以让TCP三次握手过程中的第一部分执行失败;如果来自主机的连接不正常,这将阻塞整个设备。
  • Stateless(无状态):这种类型的防火墙将使用一组静态规则来确定单个数据包是否可接受,例如,某设备发送了一个坏数据包并不意味着此设备随后都将会被阻塞;虽然无状态防火墙比其他防火墙使用更少的资源,但无状态防火墙的表现也更笨,例如,无状态防火墙只有在定义了规则时才有效,如果规则没有完全匹配,那么此规则实际上将是无用的;当从一组主机接收大量流量时(例如发生了分布式拒绝服务攻击-DDoS攻击),无状态防火墙将变得非常有用。

VPN基础

虚拟专用网络(VPN-Virtual Private Network)是一种允许不同网络上的设备通过在Internet(互联网公网)上彼此之间创建专用路径(称为隧道)进行安全通信的技术,在此隧道内连接的多个设备将形成它们自己的专用网络。

img

连接在Network3上的设备仍然是Network1和Network2的一部分,但这些设备同时也形成了一个私有网络(Network3),只有通过相关的VPN连接的设备才能在这个专用网络(Network3)上进行通信。

VPN的一些好出:

  • 允许不同地理位置的网络进行连接:例如,拥有多个办公室网络的企业会发现VPN是有益的,因为这意味着可以从办公室网络 直接访问远程服务器或基础设施等资源。
  • 提供隐秘性:VPN使用了加密技术来保护数据,这意味着数据包只能在发送它的设备和目的地之间被理解,这些数据不容易被嗅探;VPN加密技术在有公共WiFi的地方可能很有用处,因为普通的公共WiFi网络并不提供加密;你可以使用VPN来保护你所使用的流量不被其他人查看。
  • 提供匿名性:记者和其他活动人士可以依靠VPN技术 在言论自由受到控制的国家安全地报道全球问题;通常,你所使用的流量可以被你的ISP和其他中介机构查看,并能因此被跟踪,而VPN所提供的匿名级别也仅仅与网络上的其他设备如何尊重隐私有关,例如,使用一个会记录所有数据或者历史的VPN 本质上与不使用VPN的效果是一样的。

现有的一些VPN技术:

  • PPP:PPP是指点对点协议,它能提供加密以及数字验证功能,使用了PPP技术的VPN会通过私钥和公共证书(类似于SSH)来工作,如果要成功建立VPN连接,那么私钥和证书就必须完成匹配,但是,基于PPP技术进行传输的数据 并不能单独离开网络(即不可路由);此外,PPTP将使用PPP技术来进行身份验证并提供数据加密。
  • PPTP:点对点隧道协议(PPTP-Point-to-Point Tunneling Protocol)是一种“允许PPP数据在网络中传输并离开网络”的技术,PPTP协议非常容易设置,大多数设备都支持它,然而,与其他VPN方案相比,PPTP是弱加密的。
  • IPSec:IPsec (Internet Protocol Security)将使用现有的IP (Internet Protocol)框架对数据进行加密,与其他VPN方案相比,IPSec更难建立,但只要建立完成,IPSec就能使用强大的加密功能,并且IPSec技术在许多设备上都能得到支持。

DNS

DNS指的是Domain Name System,即域名系统。DNS可以帮助我们没必要记住复杂的IP地址。比如说:baidu.com,我们只需要记住域名而不用记住类似104.26.11.229这样的地址。

域层次结构

img

  • Top-Level Domain(TLD-顶级域):例如baidu.com的顶级域名是.com;TLD有两种类型,包括gTLD(通用顶级域)和ccTLD(国家代码顶级域)。
  • Second-Level Domain(二级域):例如baidu.com,baidu就是二级域名。二级域名限制63个字符。
  • Subdomain(子域):位于二级域的左边。例如blog.example.com中的blog;

域名的整体长度必须控制在253个字符以内。

DNS记录类型

  • A记录:DNS记录将被解析为IPV4地址

  • AAAA记录:DNS记录将被解析为IPV6地址

  • CHAME记录:DNS记录将被解析到另一个域名。

  • MX记录:DNS记录被解析为处理正在查询的域的电子邮件服务器地址。这类记录还会带有一个优先级值,此值将告诉客户端以什么顺序来尝试访问电子邮件服务器,如果主电子邮件服务器宕机,则可以将电子邮件发送到备份电子邮件服务器。

  • TXT记录:自由文本字段,任何基于文本的数据都可以存储在其中。

发出DNS请求

img

  1. 当你请求一个域名时,你的计算机首先会检查它自身的本地缓存,看看你最近是否查询过这个地址(即查看缓存中是否已经为目标网站存储了一个相关的 IP 地址),如果发现本地缓存中无相关记录,你的计算机则将向递归(recursive)DNS服务器发送DNS请求。
  2. 递归DNS服务器通常会由你的Internet 服务提供商(即ISP,在中国是移动、联通等)提供,但你也可以选择一些其他的递归DNS服务器。递归DNS服务器会带有一个关于“最近查找过的域名”的本地缓存,如果在此缓存中找到结果,则相关的信息将被发送回你的计算机,你的DNS请求也会在这里结束(这种域名请求情况对于谷歌、Facebook、Twitter等受欢迎以及域名请求频率很高的网站服务来说很常见)。如果在递归DNS服务器的本地缓存中无法找到域名请求的结果,接下来就会开始从互联网的根DNS服务器尝试寻找关于域名请求的正确答案。
  3. 根DNS服务器是互联网的DNS主干,它们的工作是将域名请求重定向到正确的顶级域服务器,重定向的结果取决于你的域名请求内容:例如,如果你请求 www.tryhackme.com ,那么根DNS服务器将识别到.com的顶级域名,并会将你指向处理.com地址的正确TLD(顶级域)服务器。
  4. TLD服务器会保存“在哪里能找到响应DNS请求的权威服务器”的记录。权威服务器通常也被称为域的名称服务器,例如 www.tryhackme.com 的名称服务器是kip.ns.cloudflare.comuma.ns.cloudflare.com,一个域名可能会有多个域名服务器,这是为了形成备份以防宕机。(简而言之:当 TLD 服务器收到我们的域名请求时,TLD服务器会将域名请求信息传递给适当的权威名称服务器,而权威名称服务器主要用于直接存储域的 DNS 记录)
  5. 权威DNS服务器是负责存储特定域名的DNS记录的服务器,并且能对所存储的DNS记录进行及时更新。基于DNS记录的不同类型会有多条DNS记录内容,而这些与你的域名请求相关的DNS记录都存储在权威DNS服务器中,当域名请求到达权威DNS服务器之后,权威DNS服务器会将这些与你的域名请求相关的DNS记录 发送回递归DNS服务器,递归DNS服务器将会为这些DNS记录缓存一个本地副本 以备将来的请求所需,然后这些DNS记录将被转发回 发出域名请求的原始客户端机器。

每个DNS记录都会带有一个TTL(Time To Live-生存时间)值,这个值是一个以秒表示的数字,所有不超过TTL时间的DNS记录都会持续存储在计算机的本地缓存中,如果本地缓存中的DNS记录过期,那么在下次请求域名时,你可能需要再次获取相关的DNS记录(这将重复上述过程)。通过使用计算机本地缓存中的DNS记录——可以节省每次与目标服务器进行通信时 所消耗的DNS请求响应时间。

HTTP(S)

HTTP(HyperText Transfer protocol-超文本传输协议)HTTP 是用于与web服务器进行通信以便传输网页数据的一组规则,这些网页数据包括 HTML、图像、视频等。

HTTPS是HTTP的安全版本。HTTPS的数据经过了加密处理。

请求和响应

访问网站时,浏览器需要向一个Web服务器发出请求来获得HTML,图像等资源。

URL:

img

  • Scheme:说明使用什么协议来访问资源,如HTTP、HTTPS、FTP(文件传输协议)
  • User:有些服务需要认证以完成登录,可以在URL中输入用户名和密码进登录。
  • Host/Domain:希望访问的服务器的域名或IP地址.
  • Port:要连接的端口,例如http对应的是80端口,https对应的443端口
  • Path:访问的资源的文件名或位置
  • Query String:可以发送到请求路径的额外信息位。简单来说就是参数
  • Fragment:对所请求的实际页面上的位置的引用。

更详细请看

https://zhuyuan1213.top/2023/09/18/网络协议基础02/

Cookies

Cookie是存储在计算机上的一小段数据。 当从web服务器收到“Set-Cookie”标头时,对应的Cookie信息将被浏览器保存,然后,发出的每一个进一步请求,都会将 Cookie 数据发送回web服务器。 由于 HTTP 是无状态的(不跟踪你之前的请求),所以 Cookie 可用于提醒web服务器你的身份、网站的一些个人设置或者你以前是否访问过该网站。

img

Web服务的其它组件

请求某个网站时,计算机需要知道它需要与之通信的服务器的 IP 地址;为此,它使用 DNS。然后,计算机使用一组称为 HTTP 协议的特殊命令与 Web 服务器进行对话;然后,网络服务器返回 HTML、JavaScript、CSS、图像等,然后浏览器将使用它们来正确格式化并显示网站。

  • Load Balancers负载均衡器:负载均衡器能提供两个主要功能:确保高流量网站可以处理负载(load);在服务器变得无响应时提供故障转移功能。

    负载均衡器会使用不同的算法来帮助决定哪台服务器最适合处理请求消息,这些算法的两个例子是:轮询(round-robin)和加权(weighted)——前者会依次将请求发送到每个服务器,后者会检查服务器当前正在处理多少请求,再将请求发送到最不繁忙的服务器。

    负载均衡器还会对每个服务器执行定期检查,以确保它们能够正常运行,这被称为健康检查(health check);如果服务器没有正确响应或无响应,负载均衡器将停止向服务器发送流量,直到服务器再次正确响应为止。

  • CDN (Content Delivery Networks):它可以帮助降低“繁忙网站”的流量压力。

    CND允许网站管理者托管网站的一些静态文件,如JavaScript, CSS,图像,视频等,使用CDN能将网站静态文件托管在世界各地的数千台服务器上。

    每当用户请求一个被托管的文件时,CDN就会计算出最近的服务器的物理位置,并将用户的请求发送到那里,而不是发送到遥远的世界另一端。

  • 数据库(Databases):每个网站通常都需要一种为用户存储信息的方法,这就需要使用数据库。

    web服务器可以与数据库进行通信,从而能将数据存储到数据库中以及能从数据库中提取数据。

    数据库可以是简单的纯文本文件,也可以是 由能够提供速度和弹性的多台服务器组成的复杂集群,一些常见的数据库有:MySQL,MSSQL,MongoDB,GraphQL,Postgres等,每一种数据库都有其具体的特性。

  • WAF (Web Application Firewall)

  • Web应用程序防火墙(WAF-Web Application Firewall)位于你的web请求和web服务器之间,它的主要目的是保护web服务器免受黑客攻击或拒绝服务(DoS)攻击。

    WAF能够分析带有常见攻击技术的恶意web请求,无论这些恶意请求是来自何处;WAF还会利用速率限制来检查是否有过多的网络请求正在被发送,这将只允许一个IP每秒发送一定数量的请求消息。

    如果一个请求被认为是潜在的攻击载荷,那么此请求将被WAF拦截以及丢弃,这意味着此请求将永远不会被发送到web服务器。

img

Web服务器

web服务器是一种软件,它会监听传入的请求连接,然后利用HTTP协议将web内容传递给客户端浏览器。

常见的web服务器软件有:Apache,Nginx,IIS,NodeJS等。Web服务器将从根目录下(在服务器软件的设置中定义)开始传输文件,例如,Nginx和Apache在Linux操作系统中有相同的默认根目录路径/var/www/html,而IIS在Windows操作系统中的默认根目录路径是C:\inetpub\wwwroot

如果向web服务器请求文件- http://www.example.com/picture.jpg ,web服务器将从它的本地硬盘驱动器中发送文件/var/www/html/picture.jpg

Virtual Hosts(虚拟主机)

eb服务器可以托管多个具有不同域名的网站,为了实现这一点,Web服务器需要使用虚拟主机。web服务器软件会检查HTTP请求头中的主机名,并将其与虚拟主机进行匹配(虚拟主机只是基于文本的配置文件)。如果HTTP请求中的主机名和虚拟主机成功匹配,web服务器就会向浏览器用户提供一个正确的网站;如果没有找到匹配项,则将提供一个默认网站给浏览器用户。

虚拟主机可以将其根目录映射到web服务器的硬盘驱动器上的不同位置:

  • one.com可能被映射到web服务器中的/var/www/website_one
  • two.com可能被映射到web服务器中的/var/www/website_two

可以在一台虚拟主机上托管多个web服务(网站)