渗透基础

Docker操作

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一 个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现 虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口

Docker 环境安装与基本操作整理

1. 安装 Docker

  • 添加 Docker PGP key

    1
    curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
  • 配置 Docker APT repository

    1
    echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
  • 更新 APT 包列表

    1
    sudo apt update
  • 卸载旧版本 Docker

    1
    sudo apt remove docker docker-engine docker.io
  • 安装 Docker

    1
    sudo apt-get install docker-ce
  • 查看 Docker 状态

    1
    systemctl status docker
  • 启动 Docker

    1
    systemctl start docker
  • 设置 Docker 开机自动启动

    1
    systemctl enable docker

2. 安装 Docker Compose

  • 下载并安装 Docker Compose

    1
    2
    curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.0/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

3. Docker 镜像操作

  • 列出镜像

    1
    docker image ls -a
  • 拉取镜像

    1
    docker image pull hello-world
  • 删除镜像

    1
    2
    docker image rm 镜像名或镜像id
    docker rmi 镜像名或镜像id

4. Docker 容器操作

  • 创建容器

    1
    docker run [options] 镜像名 [命令]

    常用参数:

    • -i:以交互模式运行容器
    • -t:分配伪终端
    • --name:指定容器名称
    • -v:目录映射
    • -d:以守护模式运行容器
    • -p:端口映射
    • -e:设置环境变量
    • --network=host:将主机网络环境映射到容器
  • 创建交互式容器

    1
    docker run -it --name=mycentos centos /bin/bash

    在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。

  • 创建守护式容器

    1
    docker run -dit --name=mycentos2 centos

    如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。

  • 进入运行中的容器

    1
    docker exec -it 容器名或容器id /bin/bash
  • 查看容器

    • 查看正在运行的容器:

      1
      docker container ls
    • 查看所有容器(包括已停止的):

      1
      docker container ls --all
  • 停止和启动容器

    • 停止容器:

      1
      docker container stop 容器名或容器id
    • 启动容器:

      1
      docker container start 容器名或容器id
  • 强制停止容器(kill)

    1
    docker container kill 容器名或容器id
  • 删除容器

    1
    docker container rm 容器名或容器id

5. 容器保存为镜像

  • 保存容器为镜像

    1
    docker commit 容器名 镜像名

6. 镜像备份与迁移

  • 将镜像保存为文件

    1
    docker save -o ./镜像文件.tar 镜像名
  • 加载镜像文件

    1
    docker load -i ./镜像文件.tar

Docker 搭建漏洞靶场

1. VulHub

VulHub 提供了多个漏洞靶场的 Docker 镜像,涵盖了 Web 应用、网络服务等各种类型的漏洞。

使用方法:

  1. 拉取并启动所需漏洞靶场镜像
  2. 根据仓库中的文档配置并运行漏洞靶场。

2. VulApps

VulApps 是一个轻量级的漏洞靶场项目,包含一些经典的漏洞场景,适合初学者进行漏洞研究。

使用方法:

  1. 在 Docker 上启动 vulapps 镜像。
  2. 根据需求选择相应的漏洞场景。

3. VulFocus

VulFocus 是一个漏洞靶场平台,提供了一系列 Web 漏洞模拟环境。用户可以通过平台选择不同的漏洞类型和版本进行测试。

使用方法:

  1. 使用 Docker 启动不同的漏洞环境。
  2. 根据目标漏洞进行渗透测试。

如何使用这些漏洞靶场:

  1. 拉取镜像:根据 GitHub 或 Docker Hub 上的镜像名称使用 docker pull 命令来拉取漏洞靶场镜像。

    1
    docker pull vulhub/some-vulnerable-app
  2. 启动容器:使用 docker run 启动所需的漏洞容器,通常会有映射端口、环境变量等配置。

    1
    docker run -d -p 8080:80 vulhub/some-vulnerable-app
  3. 配置漏洞环境:根据具体的漏洞靶场需求,进行配置调整。大多数漏洞靶场会提供文档,指导如何操作。

内网靶场虚拟环境搭建

NAT 模式概述

  • NAT(Network Address Translation)模式允许虚拟机通过主机的网络连接上互联网。
  • 适合场景:当网络 IP 资源紧缺,但虚拟机需要访问外部网络时,NAT 模式是理想的选择。虚拟机的 IP 地址由虚拟 DHCP 服务器分配。

配置说明

  • VMware 网络适配器设置
    • vmnet0:桥接模式(自动连接)
    • vmnet1:仅主机模式(Host-only)
    • vmnet8:NAT 模式
  • NAT 模式架构
    • 虚拟 NAT 设备:负责将虚拟机的私有 IP 地址转换为主机的 IP 地址,从而通过主机访问外部网络。
    • 虚拟 DHCP 服务器:为虚拟机自动分配 IP 地址,通常为 192.168.62.x 的网段。

具体结构说明

  • 主机:主机网卡使用 NAT 模式,连接到 VMware Network Adapter VMnet8,IP 地址通常为 192.168.62.1
  • 虚拟交换机(Vmnet8):连接到主机的 VMware Network Adapter VMnet8,充当虚拟机与主机通信的桥梁。
  • 虚拟机:在 NAT 模式下,通过虚拟 NAT 设备和 DHCP 服务器获得 IP 地址(如 192.168.62.158),可以通过主机联网。

使用 NAT 模式的优点

  • 简单配置:无需在虚拟机上手动配置网络地址。
  • 资源节省:节省 IP 资源,适用于需要上网的测试环境。
  • 自动联网:虚拟机通过主机共享网络,无需额外网络配置

![已上传的图片](F:\new myblog\STUDY\source\img\file-GkHsOQkysjbvmkUUMkxtj9h2)

桥接模式概述

  • 桥接模式是指将虚拟机的虚拟网卡通过虚拟网桥与主机的物理网卡连接,使虚拟机直接连接到主机所在的物理网络中。
  • 适合场景:当虚拟机需要与主机及其他网络设备直接通信时(例如需要独立的 IP 地址,并与主机和局域网其他设备在同一网段中)。

配置说明

  • VMware 网络适配器设置
    • vmnet0:桥接模式,选择桥接到物理网卡(有线或无线网卡)。
    • vmnet1:NAT 模式。
    • vmnet8:仅主机模式(Host-only)。
  • 桥接模式架构
    • 虚拟网桥:将主机网卡与虚拟机的网卡相连,模拟一个交换机的功能。
    • 虚拟机网络配置:在桥接模式下,虚拟机需要与主机在同一网段,并且共享相同的网关和 DNS 配置。

具体结构说明

  • 主机:主机网卡通过桥接模式连接到虚拟网桥,获得与物理网络相同的 IP 地址。
  • 虚拟交换机(Vmnet0):充当虚拟机和主机之间的桥梁,允许所有桥接模式的虚拟机在同一个网络内相互通信。
  • 虚拟机:桥接模式下的虚拟机需要配置与主机相同的网关和 DNS 服务器,并获得与主机同一网段的 IP 地址(如图中虚拟机 IP 为 192.168.1.x 网段)。

使用桥接模式的优点

  • 直接访问局域网:虚拟机与主机在同一个局域网中,可以直接访问网络中的其他设备。
  • 独立 IP 地址:虚拟机可以使用独立的 IP 地址,与局域网设备直接通信。
  • 高效通信:适用于需要大量数据交互和相互访问的场景。

![已上传的图片](F:\new myblog\STUDY\source\img\file-iZ2TYgcVmqBMFnZPGRMx0RcS)

Host-Only 模式概述

  • Host-Only 模式(仅主机模式)使得虚拟机与主机之间能够互相通信,但虚拟机无法访问外部网络。
  • 适合场景:当虚拟机需要与主机直接通信,但不需要连接互联网或局域网时,这种模式非常适用。例如在测试环境中,仅需虚拟机和主机相互交互。

配置说明

  • VMware 网络适配器设置
    • vmnet1:Host-Only 模式,用于主机和虚拟机之间的通信。
  • Host-Only 模式架构
    • 虚拟交换机(Vmnet1):充当主机和虚拟机之间的通信桥梁。
    • 虚拟 DHCP 服务器:负责分配 IP 地址,使得主机和虚拟机处于同一网段,通常为 192.168.62.x

具体结构说明

  • 主机:主机的 VMware Network Adapter VMnet1 配置了 Host-Only 网络(IP 地址为 192.168.62.1)。
  • 虚拟交换机(Vmnet1):主机通过 VMnet1 虚拟交换机与虚拟机通信,形成一个封闭的网络。
  • 虚拟机:虚拟机获得虚拟 DHCP 服务器分配的 IP 地址(如 192.168.62.158),并与主机相互通信。

使用 Host-Only 模式的优点

  • 隔离性:虚拟机与外部网络完全隔离,形成一个独立的网络环境。
  • 安全性:只与主机通信,避免外部网络的安全威胁。
  • 独立测试环境:适用于测试需要主机和虚拟机交互的场景,无需联网。

![已上传的图片](F:\new myblog\STUDY\source\img\TNbA%3D)

网络协议分层

网络协议的五层分层结构

网络协议通常分为五层结构,分别是:应用层传输层网络层数据链路层物理层。每一层都有自己独立的功能,各层之间通过接口相互连接,保证了数据从发送方传输到接收方的完整性和正确性。


1. 应用层(Application Layer)

  • 作用:为用户提供网络应用服务,是直接与用户交互的层。
  • 最上层的,也是我们能直接接触到的就是应用层( Application Layer),我们电 脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信 的时候,应用就把应用数据传给下一层,也就是传输层。 所以,应用层只需要专注于为用户提供应用功能,不用去关心数据是如何传输的,就 类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不 需要关心快速是如何被运输的。 而且应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。
  • 特性:处理特定的应用数据,不需要关心数据如何传输。
  • 常见协议:HTTP、FTP、SMTP、DNS等。
  • 用户态:应用层运行在操作系统的用户态,提供各种应用程序接口,便于应用开发。

2. 传输层(Transport Layer)

  • 作用:提供端到端的通信服务,负责数据的传输管理。
  • 特性:将应用层的数据分割成小的段,提供错误检测、流量控制、重传等功能。
  • 常见协议:TCP(传输控制协议)、UDP(用户数据报协议)。
  • TCP 的全称叫传输层控制协议(Transmission Control Protocol),大部分应用使用 的正是 TCP 传输层协议,比如 HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比 如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对 方。 UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但 它实时性相对更好,传输效率也高。当然,UDP 也可以实现可靠传输,把 TCP 的特 性在应用层上实现就可以,不过要实现一个商用的可靠 UDP 传输协议,也不是一件 简单的事情。 应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据 包大小超过 MSS(TCP 最大报文段长度) ,就要将数据包分块,这样即使中途有一 个分块丢失或损坏了,只需要重新这一个分块,而不用重新发送整个数据包。在 TCP 协议中,我们把每个分块称为一个 TCP 段(TCP Segment)。当设备作为接收方时,传输层则要负责把数据包传给应用,但是一台设备上可能会有 很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是 端口。 比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于 浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配 临时的端口号。 由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用
  • 内核态:传输层运行在操作系统的内核态,直接与网络层交互,为数据提供可靠性。

3. 网络层(Network Layer)

  • 作用:负责路径选择和数据转发,实现跨网络的数据传输。
  • 特性:网络层使用逻辑地址(如IP地址)进行寻址,将数据发送到目标网络。
  • 常见协议:IP(互联网协议)、ICMP(互联网控制消息协议)、ARP(地址解析协议)。
  • 传输层可能大家刚接触的时候,会认为它负责将数据从一个设备传输到另一个设备, 事实上它并不负责。 实际场景中的网络环节是错综复杂的,中间有各种各样的线路和分叉路口,如果一个 设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,而传输 层的设计理念是简单、高效、专注,如果传输层还负责这一块功能就有点违背设计原 则了。 也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作 为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下 一层,也就是网络层(Internet Layer)。网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数 据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般 为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文
  • 网络层负责将数据从一个设备传输到另一个设备,实现主机与主机之间的通信,也叫点对点(end to end)通 信,世界上那么多设备,又该如何找到 对方呢?因此,网络层需要有区分设备的编号。 我们一般用 IP 地址给设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四 段,每段是 8 位。只有一个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特 别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然不科学。 因此,需要将 IP 地址分成两种意义: 一个是网络号,负责标识该 IP 地址是属于哪个子网的; 一个是主机号,负责标识同一子网下的不同主机; 怎么分的呢?这需要配合子网掩码才能算出 IP 地址 的网络号和主机号。那么在寻址 的过程中,先匹配到相同的网络号,才会去找对应的主机。 除了寻址能力, IP 协议还有另一个重要的能力就是路由。实际场景中,两台设备并 不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连 接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需 要通过算法决定下一步走哪条路径。 所以,IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是 根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘

![image-20241114203316631](F:\new myblog\STUDY\source\img\image-20241114203316631.png)

  • 功能:进行路由选择,决定数据通过哪条路径到达目的地。

![image-20241114203117316](F:\new myblog\STUDY\source\img\image-20241114203117316.png)


  • 作用:负责在同一网络内的节点之间传输数据,保证数据的可靠传输。
  • 特性:数据链路层使用物理地址(如MAC地址)来进行节点的寻址。
  • 实际场景中,网络并不是一个整体,比如你家和我家就不属于一个网络,所以数据不 仅可以在同一个网络中设备间进行传输,也可以跨网络进行传输。 一旦数据需要跨网络传输,就需要有一个设备同时在两个网络当中,这个设备一般是 路由器,路由器可以通过路由表计算出下一个要去的 IP 地址。 那问题来了,路由器怎么知道这个 IP 地址是哪个设备的呢? 于是,就需要有一个专门的层来标识网络中的设备,让数据在一个链路中传输,这就 是数据链路层(Data Link Layer),它主要为网络层提供链路级别传输的服务
  • 常见协议:以太网协议、PPP(点对点协议)、帧中继等。
  • 功能:提供错误检测、帧同步等功能。

5. 物理层(Physical Layer)

  • 作用:负责比特流的传输,即物理上将数据从一个节点传送到另一个节点。
  • 特性:直接与物理介质(如网线、光纤)相连,处理电信号或光信号的传输。
  • 当数据准备要从设备发送到网络时,需要把数据包转换成电信号,让其可以在物理介 质中传输,这一层就是物理层(Physical Layer),它主要是为数据链路层提供二进 制传输的服务
  • 功能:定义了物理介质的接口标准,如电压、频率、信道等。

![image-20241114203211430](F:\new myblog\STUDY\source\img\image-20241114203211430.png)

  1. 应用层:发送包裹
  • 应用层就像寄件人,我们想把包裹寄给远方的朋友。在这个阶段,我们关注的是寄什么(比如信件、包裹)和寄给谁
  • 应用层提供了各种“寄包裹”的方式,比如浏览网页、发送邮件、下载文件等。
  • 就像寄包裹时不关心快递公司怎么运送一样,应用层也不关心数据是如何传输的。
  1. 传输层:分包和贴上标签
  • 传输层负责把“大包裹”分成“多个小包裹”,并在每个包裹上贴上发件人和收件人的标签,以便快递公司能按顺序送达每个小包裹。
  • 有些包裹可能会丢失,传输层负责检查哪些包裹没送到,并让快递公司重新送。
  • 这就像快递公司贴上的快递单,确保每个包裹能被送到正确的收件人手中。
  1. 网络层:规划路线
  • 网络层负责选择“快递路线”,决定包裹从哪个仓库到哪个中转站,再到最终的配送站。
  • 它相当于一张地图,根据最优路径把包裹送到目标地点附近。
  • 就像地图指引快递员走哪条路,网络层用IP地址来找到去往收件人所在城市或小区的最佳路径。
  1. 数据链路层:本地配送
  • 数据链路层负责在“最后一公里”把包裹送到目的地附近的小区或大楼。
  • 它就像快递小哥在小区内挨家挨户地分发包裹。
  • 这层是最接近设备本地的,使用设备的“物理地址”(类似门牌号)来找到收件人。
  1. 物理层:传输包裹的车辆和道路
  • 物理层是最底层,负责实际把包裹从一个地方运输到另一个地方。
  • 它相当于快递公司使用的“快递车、火车或飞机”等工具,把包裹物理地移动。
  • 就像一辆辆装着包裹的快递车在路上行驶,物理层使用电缆、光纤等媒介传输数据,确保信号传到下一个节点。

总结一下

  • 应用层:决定要发什么东西(数据)和发给谁(目标)。
  • 传输层:把大件分成小件,每件都贴好收件人地址。
  • 网络层:规划路线,把小包裹送到正确的城市或小区。
  • 数据链路层:负责本地的配送,找到具体的楼层或门牌号。
  • 物理层:让快递车、火车等工具实际运输包裹。

通过这种层层协作,数据最终能准确地从一台设备传到另一台设备。

IP 和 MAC

  • IP 地址(网络层):IP 负责“跨区”传输数据,它像是我们出行时的行程表,定义了数据从源头到目的地的整体路径。IP 地址主要用于在不同网络之间传输数据,是一个全局的地址,标识每个设备在网络中的位置。
  • MAC 地址(数据链路层):MAC 负责“局部”传输数据,它像是我们乘坐交通工具的车票,限定了数据在一个特定网络区间内的传输。MAC 地址是设备的物理地址,标识了同一个网络区间(如局域网)内设备之间的通信。

关系

  • 当数据需要传输时,IP 地址会指定整个行程的起点和终点(源 IP 和目的 IP),确保数据能传递到目标设备所在的网络。
  • 在这个传输过程中,数据会经过多个网络区间,每经过一个新的网络区间,MAC 地址会指引数据在当前网络区间内的传输,确保数据从一个节点传递到另一个节点,直至抵达目标网络。

举例

小林的出行示例可以进一步理解这个过程:

举个生活的栗子,小林要去一个很远的地方旅行,制定了一个行程表,其间需先后乘 坐飞机、地铁、公交车才能抵达目的地,为此小林需要买飞机票,地铁票等。 飞机票和地铁票都是去往特定的地点的,每张票只能够在某一限定区间内移动,此处 的「区间内」就如同通信网络中数据链路。 在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点 好比源 MAC 地址,目标地点好比目的 MAC 地址。 整个旅游行程表就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行 程的终点好比目的 IP 地址。如果小林只有行程表而没有车票,就无法搭乘交通工具到达目的地。相反,如果除了 车票而没有行程表,恐怕也很难到达目的地。因为小林不知道该坐什么车,也不知道 该在哪里换乘。 因此,只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目 的地。与此类似,计算机网络中也需要「数据链路层」和「网络层」这个分层才能实 现向最终目标地址的通信。 还有重要一点,旅行途中我们虽然不断变化了交通工具,但是旅行行程的起始地址和 目的地址始终都没变。其实,在网络中数据包传输中也是如此,源IP地址和目标IP地 址在传输过程中是不会变化的,只有源 MAC 地址和目标 MAC 一直在变化

  • 行程表(IP 地址):小林知道出发点和终点在哪里,需要经过哪些城市或地点。这是网络层 IP 的作用——确保数据最终能跨越多个网络区间,到达目的网络。

  • 车票(MAC 地址):小林在每个特定的区间(如机场、地铁站、公交站)买票,从一个交通节点移动到下一个节点。这就是数据链路层 MAC 的作用——在局部的网络环境中,从一个设备传到另一个设备,逐步推进数据到目标。

    总结

    IP 地址是“全局路线图”,用于确定远距离的网络传输方向。MAC 地址是“局部导航”,负责在同一局域网内的数据传输。两者缺一不可,只有 IP 地址和 MAC 地址共同协作,才能让数据成功地从源头传递到目的地。

IP地址的基础知识 IP地址的定义 在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址, 否则无法实现正常的通信。 IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处 理的。 而人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制

![image-20241114203640359](F:\new myblog\STUDY\source\img\image-20241114203640359.png)

![image-20241114203659730](F:\new myblog\STUDY\source\img\image-20241114203659730.png)

在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址

主机号全为 1 指定某个网络下的所有主机,用于广播 主机号全为 0 指定某个网络。广播地址用于在同一个链路中相互连接的主机之间发送数据包

![image-20241114203803343](F:\new myblog\STUDY\source\img\image-20241114203803343.png)

学校班级中就有广播的例子,在准备上课的时候,通常班长会喊:“上课, 全体起 立!”,班里的同学听到这句话是不是全部都站起来了?这个句话就有广播的含义。 当主机号全为 1 时,就表示该网络的广播地址。例如把 172.20.0.0/16 用二进制表 示如下: 10101100.00010100.00000000.00000000 将这个地址的主机部分全部改为 1,则形成广播地址: 10101100.00010100.11111111.11111111 再将这个地址用十进制表示,则为 172.20.255.255。 广播地址可以分为本地广播和直接广播两种。

在本网络内广播的叫做本地广播。例如网络地址为 192.168.0.0/24 的情况下, 广播地址是 192.168.0.255 。因为这个广播地址的 IP 包会被路由器屏蔽,所以 不会到达 192.168.0.0/24 以外的其他链路上。

在不同网络之间的广播叫做直接广播。例如网络地址为 192.168.0.0/24 的主机 向 192.168.1.255/24 的目标地址发送 IP 包。收到这个包的路由器,将数据转发 给192.168.1.0/24,从而使得所有 192.168.1.1~192.168.1.254 的主机都能收到 这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转 发)

![image-20241114203856867](F:\new myblog\STUDY\source\img\image-20241114203856867.png)

D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用,不管是路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。 其余分类判断方式参考如下图

![image-20241114204000116](F:\new myblog\STUDY\source\img\image-20241114204000116.png)

公有IP与私有IP地址 在 A、B、C 分类地址,实际上有分公有 IP 地址和 私有 IP 地址

![image-20241114204019915](F:\new myblog\STUDY\source\img\image-20241114204019915.png)

平时我们办公室、家里、学校用的 IP 地址,一般都是私有 IP 地址。因为这些地址允 许组织内部的 IT 人员自己管理、自己分配,而且可以重复。因此,你学校的某个私 有 IP 地址和我学校的可以是一样的。

就像每个小区都有自己的楼编号和门牌号,你小区家可以叫 1 栋 101 号,我小区家 也可以叫 1 栋 101,没有任何问题。但一旦出了小区,就需要带上中山路 666 号 (公网 IP 地址),是国家统一分配的,不能两个小区都叫中山路 666。

所以,公有 IP 地址是有个组织统一分配的,假设你要开一个博客网站,那么你就需 要去申请购买一个公有 IP,这样全世界的人才能访问。并且公有 IP 地址基本上要在 整个互联网范围内保持唯一

IP 地址与路由控制

IP地址的网络地址这一部分是用于进行路由控制。 路由控制表中记录着网络地址与下一步应该发送至路由器的地址,在主机和路由器上 都会有各自的路由器控制表。 在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地 址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果 路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配

![image-20241114204120253](F:\new myblog\STUDY\source\img\image-20241114204120253.png)

传输过程详解

  1. 主机 A 发起 IP 包的传输
    • 源 IP 地址:10.1.1.30(主机 A 的 IP 地址)
    • 目标 IP 地址:10.1.2.10(目标主机的 IP 地址)
    • 当主机 A 要将 IP 包发送给目标地址 10.1.2.10 时,它首先会查找自己的路由表,查看是否有通往 10.1.2.10 的直接路径。
    • 查找路由表:由于主机 A 的路由表中没有匹配的条目,它将此包转发给默认网关,即 路由器 1
  2. 路由器 1 收到 IP 包
    • 路由器 1 接收到了主机 A 发来的 IP 包,开始查找自己的路由表,试图找到通向目标 IP 地址(10.1.2.10)的路由。
    • 匹配路由表:在路由表中,路由器 1 找到了一个匹配的条目,它知道可以通过将包发送给 路由器 2(IP 地址为 10.1.0.2)来达到目标网络。
    • 转发 IP 包:于是,路由器 1 将 IP 包转发给了 路由器 2
  3. 路由器 2 收到 IP 包
    • 路由器 2 接收到了从路由器 1 转发过来的 IP 包,同样会在自己的路由表中查找是否有通往目标地址 10.1.2.10 的路径。
    • 查找路由表:路由器 2 的路由表中发现了目标网络(10.1.2.0/24),并确定可以通过其接口 10.1.2.1 到达该网络。
    • 转发 IP 包:于是,路由器 2 将 IP 包通过其 10.1.2.1 接口转发出去。
  4. 经过交换机到达目标主机
    • 当 IP 包从路由器 2 的 10.1.2.1 接口发出后,进入到交换机。
    • 交换机会根据目标 MAC 地址,将 IP 包传递给在同一局域网中的目标主机 10.1.2.10。
    • 最终目的地:目标主机 10.1.2.10 收到了来自主机 A(10.1.1.30)的 IP 包。

路由器的作用:在网络中,不同网络之间的通信由路由器负责,路由器通过路由表来确定数据包的转发路径。

路由查找:每个路由器收到 IP 包后都会查找自己的路由表,找到通往目标地址的最佳路径,然后逐跳转发,直到包抵达目标网络。

逐跳转发:IP 包会经过多个路由器,每个路由器都会更新包的 MAC 地址(源 MAC 和目标 MAC),但源 IP 和目标 IP 始终不变

局域网内的传输:当 IP 包到达目标网络后,通常会通过交换机等局域网设备最终传递到目标主机。

环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。 计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址,与该地址具有相同意义的 是一个叫做 localhost 的主机名。 使用这个 IP 或主机名时,数据包不会流向网络

IP 协议相关技术

1. DNS(域名系统)

  • 作用:将人类易读的域名(如 www.example.com)转换为 IP 地址(如 192.168.1.1),因为人们更容易记住域名。
  • 域名层级:域名具有层级关系,从右到左依次为:根域、顶级域、次级域。
  • 层级关系示例
    • 根 DNS 服务器:位于层级的最顶层,负责管理顶级域的请求。
    • 顶级域 DNS 服务器:如 .com、.net、.org,管理该顶级域下的所有子域。
    • 权威 DNS 服务器:如 example.com 的 DNS 服务器,负责提供该域下具体主机的 IP 地址。
  • 解析过程:当你访问 www.example.com 时,DNS 系统会逐层解析,最终找到该域名的 IP 地址,完成域名到 IP 地址的转换。

2. ARP(地址解析协议)和 RARP(逆地址解析协议)

  • ARP(Address Resolution Protocol)

    用于将 IP 地址解析为 MAC 地址,确保在局域网内能够找到对应设备。

    • 工作过程:主机 A 想通过 IP 地址与局域网中的主机 B 通信,但需要知道主机 B 的 MAC 地址。ARP 广播请求后,主机 B 响应自己的 MAC 地址,主机 A 可以直接与主机 B 通信。
  • RARP(Reverse ARP):与 ARP 相反,RARP 是通过 MAC 地址来获取 IP 地址的协议,用于一些设备在启动时通过 MAC 地址获得 IP 地址(现在较少使用,DHCP 通常可以替代)。


3. DHCP(动态主机配置协议)

  • 作用:动态为设备分配 IP 地址、子网掩码、网关、DNS 服务器等网络参数,减少手动配置的麻烦。
  • 工作流程
    1. 请求:设备连接到网络时,发送 DHCP 请求。
    2. 提供:DHCP 服务器收到请求,分配一个未使用的 IP 地址,并将相关网络参数发送给设备。
    3. 确认:设备接受并确认使用该 IP 地址。
  • 优点:自动分配 IP 地址,避免了手动配置的错误,适用于动态变化的网络环境。

4. NAT(网络地址转换)

  • 作用:用于将私有 IP 地址转换为公有 IP 地址,通常用于内部网络访问外部网络(如互联网)。
  • 类型
    • 静态 NAT:将私有 IP 和公有 IP 一一映射。
    • 动态 NAT:根据需要动态分配公有 IP 地址。
    • PAT(端口地址转换):将多个私有 IP 地址映射到同一个公有 IP 地址,但使用不同的端口区分。
  • 优点:通过 NAT,可以节省公有 IP 地址,增强内部网络的安全性,因为外部网络无法直接访问私有 IP 地址。

5. ICMP(互联网控制报文协议)

  • 作用:用于发送控制消息,检测网络连接状况,通常用于诊断和故障排除。

  • 常见用途

    • Ping:测试目标主机是否可达,返回响应时间。
    • Traceroute:显示数据包从源到目标经过的每一跳的网络设备,帮助分析网络延迟和中断位置。
  • 功能:ICMP 不用于传输数据,而是提供网络故障信息、连接测试、路径追踪等工具。

  • DNS 解决了域名到 IP 的转换。

    ARP/RARP 实现了 IP 地址与 MAC 地址的对应。

    DHCP 动态分配 IP 地址,简化网络配置。

    NAT 进行地址转换,优化 IP 地址的使用。

    ICMP 则用于网络诊断和控制,确保网络运行正常。

DNS 域名解析

![image-20241114204250218](F:\new myblog\STUDY\source\img\image-20241114204250218.png)

DNS 域名解析流程

  1. 缓存检查
    • 浏览器会先查找自己的缓存,看看是否已有对应域名的 IP 地址。
    • 如果浏览器没有找到,则向操作系统的缓存查询。
    • 若操作系统的缓存中也没有,再查找本地的 hosts 文件。如果 hosts 文件中也没有对应的 IP 地址,则进行 DNS 查询。
  2. 向本地 DNS 服务器发起请求
    • 客户端向本地 DNS 服务器(通常是网络提供商的 DNS 服务器)发出请求,询问目标域名(如 www.server.com)的 IP 地址。
  3. 本地 DNS 查询缓存
    • 本地 DNS 服务器会先查询自己的缓存。如果缓存中已有该域名的 IP 地址,则直接返回结果。
    • 如果缓存中没有找到,则本地 DNS 会向根域名服务器发出请求。
  4. 根 DNS 指向顶级域 DNS
    • 根 DNS 服务器收到请求后,发现查询的是 .com 结尾的域名。于是,它告诉本地 DNS 去找负责 .com 域名的顶级域名服务器,并提供其地址。
  5. 顶级域 DNS 指向权威 DNS
    • 本地 DNS 服务器接到 .com 顶级域的地址后,向该顶级域名服务器询问 server.com 的 IP 地址。
    • 顶级域名服务器告诉本地 DNS 去找 server.com权威 DNS 服务器,并提供其地址。
  6. 权威 DNS 返回 IP 地址
    • 本地 DNS 服务器联系 server.com权威 DNS 服务器,询问 www.server.com 的 IP 地址。
    • 权威 DNS 服务器查询其数据库,找到 www.server.com 对应的 IP 地址(如 X.X.X.X),并将结果返回给本地 DNS。
  7. 返回 IP 给客户端
    • 本地 DNS 服务器将 www.server.com 的 IP 地址返回给客户端。
    • 客户端获得 IP 地址后,便可以直接与目标服务器建立连接,访问 www.server.com

![image-20241114204317144](F:\new myblog\STUDY\source\img\image-20241114204317144.png)

ARP 协议工作流程

ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的

  1. 准备 IP 数据包
    • 在传输一个 IP 数据包时,主机已经确定了源 IP 地址和目标 IP 地址。
    • 根据主机的路由表,主机可以找到 IP 包的下一跳,即数据包需要发送的下一个设备的 IP 地址(可能是目标设备,也可能是中间的路由器)。
  2. 获取 MAC 地址的需求
    • 网络层负责将数据包传递到目标 IP 地址或下一跳 IP 地址。
    • 但是,网络层的下一层是数据链路层,数据链路层需要通过 MAC 地址进行通信。因此,主机需要知道下一跳设备的 MAC 地址
  3. ARP 请求
    • 如果主机还不知道下一跳的 MAC 地址,它会发出一个ARP 请求
    • ARP 请求是一种广播包,包含请求方的 IP 地址、MAC 地址,以及目标 IP 地址(需要查询的 IP 地址)。
    • 由于是广播包,网络内的所有设备都能收到这个请求包。
  4. ARP 响应
    • 在网络中,每台设备收到 ARP 请求后,会检查请求中的目标 IP 地址是否与自身的 IP 地址匹配。
    • 如果匹配,目标设备会回复一个 ARP 响应,在响应包中包含自己的 MAC 地址。
    • ARP 响应是单播包,只发回给请求方。
  5. 更新 ARP 缓存
    • 请求方(发送 ARP 请求的主机)收到 ARP 响应后,会把目标 IP 地址和对应的 MAC 地址记录到ARP 缓存中。
    • 下次再需要发送给同一 IP 地址的数据包时,主机可以直接从缓存中获取 MAC 地址,而不需要再次发送 ARP 请求。
  6. 完成数据传输
    • 通过 ARP 获取到目标 MAC 地址后,主机可以在数据包的链路层帧头中添加正确的 MAC 地址。
    • 然后,数据包就可以发送到目标设备,完成这一跳的传输。

![image-20241114204327513](F:\new myblog\STUDY\source\img\image-20241114204327513.png)

主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。

当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。

不过,MAC 地址的缓存是有一定期限的,超过这个期限,缓存的内容将被清除。

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反。它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

通常这需要架设一台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接入到网络,接着:

该设备会发送一条「我的 MAC 地址是 XXXX,请告诉我,我的 IP 地址应该是什么」的请求信息。

RARP 服务器接到这个消息后返回「MAC 地址为 XXXX 的设备,IP 地址为 XXXX」的信息给这个设备。

最后,设备就根据从 RARP 服务器所收到的应答信息设置自己的 IP 地址。

![image-20241114204342956](F:\new myblog\STUDY\source\img\image-20241114204342956.png)

DHCP 动态获取 IP 地址

DHCP 在生活中非常常见。我们的电脑通常通过 DHCP 动态获取 IP 地址,这大大简化了手动配置 IP 信息的过程。

![image-20241114204358756](F:\new myblog\STUDY\source\img\image-20241114204358756.png)

DHCP 交互的 4 个步骤

  1. DHCP Discover(发现报文)
    • 客户端首先发起 DHCP 发现报文(DHCP DISCOVER),这是一个 IP 数据报。
    • 由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,因此使用 UDP 广播通信
    • 发现报文的目的地址是广播地址 255.255.255.255(端口 67),而源 IP 地址0.0.0.0(端口 68)。
    • 客户端将该数据报传递给链路层,链路层再将其广播到所有网络设备。
  2. DHCP Offer(提供报文)
    • DHCP 服务器收到发现报文后,会用 DHCP 提供报文(DHCP OFFER)向客户端响应。
    • 提供报文依然使用广播地址 255.255.255.255
    • 报文中包含了服务器提供的可租用 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址的租用期等配置信息。
  3. DHCP Request(请求报文)
    • 客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选定的服务器发送 DHCP 请求报文(DHCP REQUEST)。
    • 该请求报文回显了服务器提供的参数。
  4. DHCP ACK(确认报文)
    • 服务器收到 DHCP 请求报文后,使用 DHCP ACK 报文进行响应,确认所请求的参数。
    • 一旦客户端收到 DHCP ACK 报文,整个交互过程便完成,客户端即可在租用期内使用服务器分配的 IP 地址。

租约续约过程

  • 租期快到期时

    客户端会向服务器发送 DHCP 请求报文。

    • 如果服务器同意续约,会用 DHCP ACK 报文应答,客户端即可延长租期。
    • 如果服务器不同意续约,则会用 DHCP NACK 报文应答,客户端必须停止使用当前 IP 地址。

由于 DHCP 交互全程使用UDP 广播通信,如果 DHCP 服务器和客户端不在同一个局域网内,而路由器不会转发广播包,那么每个网络都需要一个 DHCP 服务器。

为了解决这个问题,出现了DHCP 中继代理。有了 DHCP 中继代理,不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一管理,简化了网络管理。

![image-20241114204414199](F:\new myblog\STUDY\source\img\image-20241114204414199.png)

DHCP 中继代理的工作流程

  1. DHCP 客户端向中继代理发送请求
    • DHCP 客户端会将 DHCP 请求包发送给DHCP 中继代理
    • DHCP 中继代理收到客户端的广播请求包后,将其转发给 DHCP 服务器,但这次是以单播的形式发出。
  2. DHCP 服务器响应中继代理
    • DHCP 服务器收到中继代理转发的请求包后,返回一个应答包给中继代理。
    • 这个应答包包含了分配给客户端的 IP 地址和其他网络配置信息。
  3. 中继代理转发应答给客户端
    • DHCP 中继代理收到服务器的应答包后,再将该包转发给 DHCP 客户端。

NAT 网络地址转换

Pv4 地址资源非常紧缺,尽管通过无分类地址(CIDR)可以减缓 IPv4 地址的耗尽速度,但随着互联网用户的快速增长,IPv4 地址依然面临耗尽的风险。

于是,提出了一种网络地址转换(NAT)的方法,再次缓解了 IPv4 地址耗尽的问题。

简单来说,NAT 是在同一公司、家庭或教室内的主机对外通信时,将私有 IP 地址转换成公有 IP 地址。这种转换使得多个内网设备可以共享一个公有 IP 地址,从而减少公有 IP 的需求。

然而,普通的 NAT 转换虽然可以节省 IP 地址,但在大量设备访问互联网的情况下依然不够用。

![image-20241114204426532](F:\new myblog\STUDY\source\img\image-20241114204426532.png)

![image-20241114204439369](F:\new myblog\STUDY\source\img\image-20241114204439369.png)

NAPT 路由器的转换

在网络地址和端口转换(NAPT)中,多个私有 IP 地址的客户端可以通过同一个公有 IP 地址访问同一台服务器,NAPT 使用端口号来区分每个连接。

示例场景

  • 两个客户端:192.168.1.10192.168.1.11,它们都在与服务器 183.232.231.172 进行通信。
  • 本地端口:这两个客户端的本地端口号都是 1025
  • 公有 IP 地址:NAPT 路由器为两个客户端提供一个相同的公有 IP 地址,如 120.229.175.121,并通过不同的端口号来区分连接。

NAPT 转换表

NAPT 路由器会为每个连接生成一个转换表,用于正确地转换 IP 地址和端口号的组合,以确保不同的客户端能够同时与服务器进行通信。
转换表的示例如下:

内部 IP 地址 内部端口 公有 IP 地址 公有端口
192.168.1.10 1025 120.229.175.121 30001
192.168.1.11 1025 120.229.175.121 30002
  • 客户端 A(192.168.1.10:1025)会被转换为 120.229.175.121:30001
  • 客户端 B(192.168.1.11:1025)会被转换为 120.229.175.121:30002

转换表的生成与删除

  • NAPT 转换表在建立连接时生成,例如在 TCP 连接首次握手时,SYN 包发出后就会生成表项。
  • 在连接关闭时(例如 TCP 的 FIN 包确认应答),对应的转换表项会被删除,从而释放资源。

ICMP 互联网控制报文协议

在复杂的网络传输环境中,网络包传输常常遇到各种问题。当问题发生时,计算机网络需要“告知”发送方,以便及时调整传输策略,从而控制整个网络的稳定性和可靠性

ICMP(互联网控制报文协议)主要用于报告网络传输中的问题并提供诊断信息,具体功能包括:

  • 确认 IP 包是否成功送达目标地址
  • 报告 IP 包在传输过程中被丢弃的原因
  • 帮助优化和改善网络设置

![image-20241114204450318](F:\new myblog\STUDY\source\img\image-20241114204450318.png)

在 IP 通信中,如果某个 IP 包未能成功到达目标地址,ICMP 负责通知发送方并提供具体的失败原因。例如:

  1. 通知过程
    • 主机 A 向主机 B 发送数据包,但由于某种原因,途中的路由器 2未能找到主机 B。
    • 路由器 2 会向主机 A 发送一个 ICMP 目标不可达消息,告知主机 A 目标主机 B 无法到达。
  2. 消息传递
    • ICMP 消息通过 IP 协议发送,按照正常的路由转发过程返回给发送方。
    • 路由器 2 发送的 ICMP 消息会先经过路由器 1,再转发给主机 A。
  3. 解析 ICMP 消息
    • 主机 A 接收到 ICMP 消息后,解析消息的首部和数据域,得知具体的问题原因。

您提到的 ICMP 的 “控制” 功能非常关键,以下是相关内容的整理版本:


ICMP:网络控制和诊断协议

在复杂的网络传输环境中,网络包传输常常遇到各种问题。当问题发生时,计算机网络需要“告知”发送方,以便及时调整传输策略,从而控制整个网络的稳定性和可靠性


ICMP 的主要功能

ICMP(互联网控制报文协议)主要用于报告网络传输中的问题并提供诊断信息,具体功能包括:

  • 确认 IP 包是否成功送达目标地址
  • 报告 IP 包在传输过程中被丢弃的原因
  • 帮助优化和改善网络设置

ICMP 报告问题的过程

在 IP 通信中,如果某个 IP 包未能成功到达目标地址,ICMP 负责通知发送方并提供具体的失败原因。例如:

  1. 通知过程

    • 主机 A 向主机 B 发送数据包,但由于某种原因,途中的路由器 2未能找到主机 B。
    • 路由器 2 会向主机 A 发送一个 ICMP 目标不可达消息,告知主机 A 目标主机 B 无法到达。
  2. 消息传递

    • ICMP 消息通过 IP 协议发送,按照正常的路由转发过程返回给发送方。
    • 路由器 2 发送的 ICMP 消息会先经过路由器 1,再转发给主机 A。
  3. 解析 ICMP 消息

    • 主机 A 接收到 ICMP 消息后,解析消息的首部和数据域,得知具体的问题原因。

ICMP 消息的分类

ICMP 消息分为两大类:

  1. 查询报文类型:用于诊断网络的健康状况,例如 pingtraceroute 工具的基础。

    • 例如 ping 命令就是发送 ICMP 回显请求报文,确认目标主机是否可达,并测量往返时间。
  2. 差错报文类型:用于报告传输错误原因,帮助发送方了解网络中的问题。

    • 例如,当路由器无法找到目标 IP 时,会返回“目标不可达”报文,指明数据包未送达的原因。

![image-20241114204501213](F:\new myblog\STUDY\source\img\image-20241114204501213.png)

HTTP

HTTP的名字「超文本协议传输」,它可以拆成三个部分: 超文本 传输 协议

  1. 协议 HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计 算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方 式(行为约定和规范)。

  2. 传输 就是把一堆东西从 A 点搬到 B 点,或者从 B 点 搬到 A 点。 HTTP 协议是一个双向协议。 HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。 我们在上网冲浪时,浏览器是请求方 A ,百度网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器, 最后由浏览器渲染在屏幕,就可以看到图片、视频了

  3. 超文本 HTTP 传输的内容是「超文本」 「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」。的涵义已经 可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算做「文本」。「超文本」,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最 关键有超链接,能从一个超文本跳转到另外一个超文本。 HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图 片、视频等的链接,在经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了

HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频 等「超文本」数据的「约定和规范」

URL(统一资源定位符):我们常说的网址,包含了用于查找资源的足够的信息,而 一个完整的URL包含下面几部分

protocol:[//[user[:password]@]host[:port]][/path][?query] [#fragment]

protocol:指定使用的传输协议,最常见的协议是 HTTP/HTTPS,用于定位网络资源。其他协议包括:

  • mailto: 打开邮箱客户端
  • ftp: 用于文件传输
  • file: 获取本地或共享文件

user用于在需要认证后才能访问的资源时提供账号和密码。

host:指定合法的互联网主机域名或 IP 地址,表示资源所在的服务器位置。

port:用于指定在传输层上用于信息交换的进程端口号,表示获取服务器资源的入口。

  • 不同协议有默认端口号,例如 HTTP 的默认端口是 80。若使用其他端口,则需要显式指定。

path:表示服务器上资源的具体路径,指明请求的资源位置。

?query:可选项,用于传递动态网页参数。

  • 多个参数之间用 “&” 隔开,每个参数的键值对之间用 “=” 隔开。

#fragment:信息片段字符串,用于指定资源中的某个部分。

  • 例如,在网页中可以用 fragment 直接定位到特定的段落或名词解释位置。

HTTP请求

HTTP请求由四个部分组成: 请求行 请求头部 空行 请求正

![image-20241114210646570](F:\new myblog\STUDY\source\img\image-20241114210646570.png)

![image-20241114210708742](F:\new myblog\STUDY\source\img\image-20241114210708742.png)

请求方法

HTTP 请求方法

  1. GET:获取由 Request-URI 所标识的资源。
  2. POST:在 Request-URI 所标识的资源后附加新的数据。
  3. HEAD:请求获取由 Request-URI 所标识的资源的响应消息报头,不返回主体内容。
  4. PUT:请求服务器存储一个资源,并使用 Request-URI 作为该资源的标识。
  5. DELETE:请求服务器删除 Request-URI 所标识的资源。
  6. TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。
  7. OPTIONS:请求查询服务器的性能,或者获取与资源相关的选项和需求。
  8. CONNECT:保留给将来使用,在 HTTP/1.1 协议中为代理服务器预留,以便能够将连接改为管道方式。
  9. PATCH:用于将局部修改应用到资源(由 RFC 5789 指定的方法)。

HTTP/1.0 定义了三种请求方法:GETPOSTHEAD

HTTP/1.1 新增了六种请求方法:OPTIONSPUTPATCHDELETETRACECONNECT

![image-20241114210859708](F:\new myblog\STUDY\source\img\image-20241114210859708.png)

状态码

以下是您关于 HTTP 状态码的内容排版整理:


HTTP 状态码详解

2xx:成功状态码

  • 200 OK:表示请求成功,一切正常。响应头包含 body 数据。
  • 204 No Content:请求成功,但响应头没有 body 数据。
  • 206 Partial Content:表示分块下载或断点续传,body 数据是资源的一部分,服务器处理成功。

3xx:重定向状态码

  • 301 Moved Permanently:永久重定向,资源已移动到新的 URL,客户端需使用新的 URL。
  • 302 Found(Moved Temporarily):临时重定向,资源暂时需要用另一个 URL 访问。
    • 301302 状态码的响应头中会使用 Location 字段指明跳转的 URL,浏览器会自动重定向。
  • 304 Not Modified:资源未修改,重定向到客户端已有的缓存文件,通常用于缓存控制。

4xx:客户端错误状态码

  • 400 Bad Request:请求的报文有错误,属于笼统的错误码。
  • 403 Forbidden:服务器禁止访问资源,与客户端请求无关。
  • 404 Not Found:请求的资源不存在或未找到,服务器无法提供资源。

5xx:服务器错误状态码

  • 500 Internal Server Error:服务器内部错误,属于笼统的通用错误码。
  • 501 Not Implemented:服务器不支持请求的功能,相当于“即将开业,敬请期待”。
  • 502 Bad Gateway:服务器作为网关或代理时访问后端服务器出错。
  • 503 Service Unavailable:服务器暂时无法响应请求,通常表示服务器繁忙,请稍后重试。

HTTP请求方法理解

GET

Get 方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图 片视频等

![image-20241114211249857](F:\new myblog\STUDY\source\img\image-20241114211249857.png)

POST

POST:向 Request-URI所标识的资源提交数据,数据就放在请求正文中 用于向指定资源发送数据,指定的资源会对数据进行处理,然后将处理结果返回给客 户端,一般用于表单提交、文件上传

![image-20241114211204865](F:\new myblog\STUDY\source\img\image-20241114211204865.png)

HEAD:请求获取由Request-URI所标识的资源的响应消息报头首部,不会返回报文 主体

![image-20241114211328505](F:\new myblog\STUDY\source\img\image-20241114211328505.png)

OPTIONS

OPTIONS:查询资源支持的方法

![image-20241114211353396](F:\new myblog\STUDY\source\img\image-20241114211353396.png)

PUT

PUT 请求用于向服务器存储一个资源,并使用 Request-URI 作为其标识。服务器会将请求主体的内容保存到 URL 指定的资源位置,包含以下两种情况:

  1. 资源不存在
    • 如果 URL 指定的资源不存在,服务器会新建一个文件,将请求主体中的内容保存到新建的文件中。
    • 响应码201 Created
  2. 资源已存在
    • 如果 URL 指定的资源已存在,服务器会用请求主体中的内容覆盖原文件内容
    • 响应码200 OK204 No Content

![image-20241114211421629](F:\new myblog\STUDY\source\img\image-20241114211421629.png)

DELETE

DELETE:请求服务器删除Request-URI所标识的资源

![image-20241114211431471](F:\new myblog\STUDY\source\img\image-20241114211431471.png)

TRACE

TRACE:路径追踪,请求服务器回送收到的请求信息,主要用于测试或诊断发送的请 求是否在客户端与服务端之间传送时被网关、防火墙、代理更改

HTTPS与HTTP

HTTP 与 HTTPS 的区别

  1. 传输安全性
    • HTTP:超文本传输协议,信息以明文形式传输,存在安全风险。
    • HTTPS:在 TCP 和 HTTP 网络层之间加入 SSL/TLS 安全协议,使得报文可以加密传输,解决了 HTTP 的不安全问题。
  2. 连接建立流程
    • HTTP:建立相对简单,经过 TCP 三次握手后即可传输 HTTP 报文。
    • HTTPS:在 TCP 三次握手之后,还需进行SSL/TLS 握手过程,才可进入加密的报文传输。
  3. 端口号
    • HTTP:默认端口号为 80。
    • HTTPS:默认端口号为 443。
  4. 证书验证
    • HTTPS:需要向 CA(证书权威机构) 申请数字证书,以保证服务器身份的可信度。

HTTPS 解决的问题

由于 HTTP 是明文传输,在安全性上存在以下三个主要风险:

  1. 窃听风险:第三方可以在通信链路中获取通信内容,导致用户隐私泄露。
  2. 篡改风险:第三方可以强制插入内容(如垃圾广告),影响用户体验和内容完整性。
  3. 冒充风险:第三方可以冒充合法网站(如银行或购物网站),引诱用户输入敏感信息,从而盗取用户财产。

![image-20241114211604169](F:\new myblog\STUDY\source\img\image-20241114211604169.png)

-

写电子笔记真是最傻逼的事情了,这种要记忆的用笔记啊


渗透基础
https://theganlove.github.io/2024/11/14/渗透基础/
作者
uert
发布于
2024年11月14日
许可协议