网络是网络安全这门手艺的第一块地基

抓包看不懂、扫描不知道扫的是什么、甚至登录一个网站都不清楚背后发生了什么,根子上往往都是网络基础没打牢。

本篇文章尝试用最通俗的方式,把自己学习网络基础时梳理过的知识重新整理一遍。

不堆术语,不抄课本,先把每一层到底在干什么讲清楚。

如果代码或文字显示不清,可以点击右下角齿轮切换显示模式。

学习过程中如果遇到问题,可以私聊我,也可以在文章底部留言交流。

为什么学网安要先学网络基础

很多人一开始学网安,上来就想打靶场、拿 Shell。

结果碰到第一道题就懵了:

为什么抓包抓到的是一堆看不懂的十六进制?
为什么扫出来的端口有的开放、有的关闭?
为什么注入要改 URL 里的参数,而不是直接改页面?

这些问题的答案,几乎都藏在网络基础里。

可以这么理解:

网络基础是地图,漏洞利用是武器。

没有地图,拿着武器也只能到处乱撞。

所以这一篇,我尽量把学习路上真正用得上的网络知识讲明白。

网络分层:把网络想象成寄快递

网络通信听起来很复杂,但本质上和我们寄快递是一模一样的流程。

你寄一个包裹:

  1. 先把东西打包
  2. 填上寄件人和收件人的信息
  3. 快递公司根据地址规划路线
  4. 包裹经过一个个驿站,最终送到收件人手里
  5. 收件人拆开包裹,拿到里面的东西

网络里传输的数据,就是包裹里的东西。

为了防止大家各说各话,网络通信被划分成了不同的,每一层只负责自己的事情。

OSI 七层与 TCP/IP 四层

教科书上通常先讲 OSI 七层模型

OSI 七层一句话理解
应用层你直接使用的软件(浏览器、微信)
表示层数据的格式转换、加密、压缩
会话层建立、管理、断开通信会话
传输层端到端传输,决定用 TCP 还是 UDP
网络层IP 寻址与路由,决定数据去哪台机器
数据链路层MAC 地址与局域网内传输
物理层网线、光纤、电信号等物理介质

但在实际生活中(尤其是网安学习中),我们更常接触的是简化后的 TCP/IP 四层模型

TCP/IP 四层对应 OSI 层常见协议 / 设备
应用层应用层、表示层、会话层HTTP、HTTPS、DNS、FTP、SSH
传输层传输层TCP、UDP
网络层网络层IP、ICMP,路由器
网络接口层数据链路层、物理层以太网、MAC 地址,交换机

对于网安新手来说,先记住 TCP/IP 四层就够了。

平时抓包、分析流量、看协议,遇到最多的是前三层:应用层、传输层、网络层

数据封装:包裹是怎么一层层包起来的

了解了分层,接下来就是网络通信中最核心的一个过程:封装

发送方把数据一层层“包”起来:

1
2
3
4
5
6
7
8
9
10
11
应用层:
"GET /index.html HTTP/1.1" ← 真实内容(数据)

传输层:
[TCP头:源端口 目标端口] + 数据 ← 告诉对方是哪个程序在处理

网络层:
[IP头:源IP 目标IP] + 数据 ← 告诉网络要去哪台机器

网络接口层:
[帧头:源MAC 目标MAC] + 数据 + 帧尾 ← 在局域网里找到具体设备

接收方收到后,再一层层拆开(解封装),直到取出最里面的原始数据。

整个过程就像套娃:

你写了一封信(数据),塞进信封(TCP),贴上地址(IP),再交给快递员(MAC)送出。

对方收到后,先看快递单(MAC),再看地址(IP),再拆信封(TCP),最后读到信(数据)。

安全视角

以后用 Wireshark 抓包时,你会发现一个数据包在软件里也是按层展开的:

  • Frame:物理层帧信息
  • Ethernet II:MAC 地址
  • Internet Protocol:IP 地址
  • TCP / UDP:端口号
  • HTTP / TLS 等:应用层数据

能看懂这个展开结构,流量分析题就成功了一半。

IP 地址与端口

IP 地址:机器的门牌号

每台接入网络的设备都有一个 IP 地址,相当于机器的门牌号。

我们最常用的是 IPv4,长这样:

1
192.168.1.100

四个数字段,每段范围是 0 ~ 255

IP 地址分为公网 IP私网 IP

类型范围说明
公网 IP全球唯一可以在互联网上直接访问
私网 IP10.0.0.0/8、172.16.0.0/12、192.168.0.0/16只在局域网内部使用

还有两个特殊的地址要记住:

  • 127.0.0.1回环地址,代表本机自己,也就是常说的 localhost
  • 0.0.0.0:代表本机的所有网卡,常用于服务器监听所有接口

在 Windows 上查看自己的 IP:

1
ipconfig

在 Linux / Kali 上查看:

1
2
3
ifconfig
# 或者
ip addr

安全视角: 内网渗透中,最常见的网段就是 192.168.x.x
拿到一个内网 IP,就等于拿到了目标的一扇门的位置。

端口:机器上的门

光有 IP 还不够。

一台服务器上可能同时跑着网站、数据库、SSH,如果只有一个 IP,数据该交给哪个程序?

这时候就轮到端口出场了。

IP 负责找到机器,端口负责找到机器上的程序。

端口范围是 0 ~ 65535,其中 0 ~ 1023 是知名端口,对应常见服务:

端口服务网安角度
21FTP 文件传输弱口令、匿名登录
22SSH 远程登录爆破常客
23Telnet 远程登录明文传输,极不安全
80HTTPWeb 服务
443HTTPSWeb 服务
3306MySQL / MariaDB数据库弱口令
6379Redis未授权访问
27017MongoDB未授权访问

在 Windows 上查看本机开放了哪些端口:

1
netstat -ano

会看到类似这样的输出:

1
2
3
TCP    0.0.0.0:80      0.0.0.0:0    LISTENING    1234
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 1234
TCP 127.0.0.1:3306 0.0.0.0:0 LISTENING 5678

最后面一列是进程 PID,可以在任务管理器里反查是哪个程序在监听。

安全视角: 渗透测试中的端口扫描,本质上就是挨个敲门,看哪些门开着。
工具比如 nmap,扫出来的开放端口,就是后续攻击面的入口。

DNS:网址背后的“通讯录”

人是记不住一堆 IP 的。

让你记住 142.250.72.14,远不如让你记住 www.google.com 舒服。

所以就有了 DNS(域名系统),它的作用一句话概括:

把人类好记的域名,翻译成机器能识别的 IP。

一次访问经历了什么

在浏览器输入 www.example.com 回车,背后大致是这样的流程:

1
2
3
4
5
6
7
8
浏览器

├─ 先查 hosts 文件
├─ 再查本地 DNS 缓存
├─ 再问本地 DNS 服务器
│ └─ 一级一级向上递归查询

└─ 最终拿到 IP,发起真正的请求

在 Windows 上手动查询域名解析:

1
nslookup www.example.com

输出类似:

1
2
3
4
5
服务器:  dns.google
Address: 8.8.8.8

名称: www.example.com
Address: 93.184.216.34

hosts 文件的位置:

  • Windows:C:\Windows\System32\drivers\etc\hosts
  • Linux:/etc/hosts

安全视角

DNS 相关的安全问题非常多:

  • DNS 劫持:把域名解析到攻击者的服务器,用户访问到的是钓鱼站
  • hosts 文件被篡改:内网渗透中常见手法之一
  • 钓鱼域名examp1e.com 冒充 example.com,不仔细看根本分辨不出来

所以拿到一台机器后,先看看它的 hosts 文件和 DNS 配置,是排查痕迹的必备动作。

TCP 与 UDP:可靠快递 vs 即时消息

传输层有两个核心协议:TCPUDP

TCP:可靠快递

TCP(传输控制协议)是面向连接、可靠的协议。

它保证数据不丢、不乱序,就像正规快递:签收确认,丢了重发。

三次握手

TCP 建立连接前,双方要先进行三次握手

1
2
3
4
5
6
7
客户端                          服务端
│ │
│────────── SYN ───────────────→│ 我要连接
│←───────── SYN+ACK ───────────│ 好的,我收到了,你呢?
│────────── ACK ──────────────→│ 我也收到了,开始通信
│ │
│════════ 连接建立 ════════════│

为什么必须三次,而不是两次?

因为三次握手能让双方都确认自己和对方都能正常收发数据

  1. 客户端发 SYN:确认自己能发
  2. 服务端回 SYN+ACK:确认自己收到了,也能发
  3. 客户端回 ACK:确认自己也收到了

安全视角: 如果攻击者伪造大量不完整的握手(只发 SYN 不回 ACK),服务端就会一直挂着半开连接等超时,耗尽资源,这就是著名的 SYN Flood 拒绝服务攻击

四次挥手

断开连接时,需要四次挥手

1
2
3
4
5
客户端                          服务端
│────────── FIN ──────────────→│ 我要关闭了
│←───────── ACK ──────────────│ 收到
│←───────── FIN ──────────────│ 我也要关闭了
│────────── ACK ──────────────→│ 收到

第一次挥手后,数据可能还没传完,所以服务端要先回 ACK 确认,再等自己处理完,才发 FIN。

这也是它比三次握手多一次的原因。

UDP:即时消息

UDP(用户数据报协议)是无连接、不可靠的协议。

它不握手、不确认、不重发,发出去就不管了。

就像发微信语音:你说完就完,对方听没听清,那是另一回事。

但正因为它简单,所以速度快、开销小,适合:

  • 视频通话
  • 在线游戏
  • DNS 查询
对比项TCPUDP
是否连接面向连接无连接
可靠性可靠不可靠
速度较慢较快
常见应用HTTP、HTTPS、SSH、FTPDNS、视频、语音、游戏

HTTP 与 HTTPS:浏览器和服务器说话的方式

HTTP 是什么

HTTP(超文本传输协议)是应用层协议,也是 Web 世界里最常被提到的协议。

它的工作模式是请求 - 响应

1
2
客户端发送请求 ──────────────→ 服务器
客户端接收响应 ←────────────── 服务器

一次 HTTP 请求长什么样

curl 直接发一个请求看响应头:

1
curl -I https://www.baidu.com

一个 HTTP 请求由三部分组成:

1
2
3
4
5
6
GET /index.html HTTP/1.1              ← 请求行:方法 + 路径 + 版本
Host: www.example.com ← 请求头:告诉服务器访问哪个域名
User-Agent: Mozilla/5.0 ← 请求头:我是谁(浏览器信息)
Cookie: session=abc123 ← 请求头:身份凭证
← 空行
← 请求体(GET 一般没有)

常见请求方法:

方法作用网安角度
GET获取资源参数通常在 URL 中,容易注入
POST提交数据数据在请求体中,登录、上传常见
PUT上传/替换资源配合文件上传漏洞
DELETE删除资源权限校验不当可被越权调用

状态码

服务器返回的响应中,第一行就是状态码,它告诉你请求的结果:

状态码含义网安角度
200请求成功正常
301 / 302重定向关注跳转到哪,防钓鱼
403禁止访问可能存在目录权限问题
404资源不存在也可能只是隐藏了真实页面
500服务器内部错误可能是代码/注入触发报错
502 / 503网关错误/服务不可用服务器配置或过载

渗透测试中,看到 403 不等于没戏,看到 500 反而可能意味着漏洞被触发了。

为什么必须要有 HTTPS

HTTP 最大的问题:明文传输

如果你在 HTTP 网站上输入账号密码,中间任何一个节点(路由器、WiFi 热点、攻击者抓包)都能直接看到明文:

1
2
3
4
POST /login HTTP/1.1
Host: www.example.com

username=admin&password=123456

所以出现了 HTTPS = HTTP + TLS

TLS 加密层主要解决三个问题:

  1. 加密:数据在路上是密文,被抓包也看不懂
  2. 身份验证:服务器出示证书(相当于身份证),防止假冒
  3. 完整性:数据有没有被篡改,可以校验出来

简化版 TLS 握手

1
2
3
4
5
6
客户端                        服务器
│──── ClientHello ─────────→│ 我支持这些加密算法
│←─── ServerHello+证书 ─────│ 这是我的证书,请验证
│ (验证证书、生成密钥) │
│──── 密钥交换 ────────────→│ 双方协商出会话密钥
│══════ 加密通信 ══════════│

浏览器地址栏的小锁,就代表这个连接经过 TLS 加密,并且证书验证通过。

安全视角: 攻击者想要窃听 HTTPS,通常用中间人攻击:给客户端伪造证书、给服务器伪造会话。
而钓鱼网站之所以危险,正是因为它们披着合法域名和 HTTPS 的外衣,伪造出“可信”的假象。

常用命令与工具

理论讲完,必须动手。

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 测试网络连通性
ping www.baidu.com

# 查看数据包经过的路由节点(Windows)
tracert www.baidu.com

# 查看本机网络配置
ipconfig /all

# 查看端口监听与连接
netstat -ano

# DNS 查询
nslookup www.baidu.com

# 直接发送 HTTP 请求
curl -v https://www.baidu.com

Linux / Kali 上对应的命令:

1
2
3
traceroute www.baidu.com
dig www.baidu.com
ss -tlnp

常用工具

工具作用阶段
Wireshark抓包、流量分析信息收集 / 流量分析
Burp SuiteHTTP 抓包改包、代理Web 渗透
nmap端口扫描、服务识别信息收集
curl命令行发送请求手工测试

工具只是加速器,看得懂工具输出的每一行,才叫真会

学完这些,能看懂什么

把这篇文章的内容消化掉,再回头看那些网安知识,会发现它们全都串起来了:

  • 抓包时,能分清 MAC、IP、端口、应用数据各在哪一层
  • 扫描时,知道开放端口意味着哪些服务、哪些攻击面
  • 做 Web 题时,能看懂请求和响应,知道参数从哪里进去
  • 学内网时,知道私网 IP、端口转发、DNS 这些概念从哪来

网络基础不是用来背的,而是用来理解后续一切攻击手段的地图

结语

这一篇只是网络基础的开胃菜。

后面还有路由与交换、子网划分、抓包实战、协议分析等内容,会陆续整理出来。

看完文章,建议立刻做两件事:

  1. 打开终端,把上面的命令挨个敲一遍
  2. 用 Wireshark 抓一次自己的浏览过程,看看每个包是怎么分层的

技术从来不是看会的,而是一遍又一遍实践出来的。

种一棵树最好的时间是十年前,其次是现在。

既然已经点开了这篇文章,那就从敲下第一条命令开始吧。