经常有刚入门的朋友问我:做网络安全,是不是会跑几款扫描器、能在漏洞平台上提交几个漏洞就算入行了?我的回答一直很直接——工具只是手指,而计算机网络才是那双手。这篇笔记是“网络安全学习笔记”系列的第一篇,我决定先把计算机网络这块地基掰开揉碎讲清楚。
我见过太多人一上来就追着最新漏洞跑,结果日志看不懂、流量看不懂、报错信息也看不懂,最后卡在瓶颈期上不去。反过来,那些网络基础扎实的人,学渗透、学代码审计、学应急响应,速度反而越来越快。这篇内容适合刚接触网络安全、准备走安全方向的朋友,也适合正在复习计算机网络、想搞清楚“这东西到底和网络安全有什么关系”的同学。我会从为什么学、学什么框架、协议层怎么和安全挂钩、怎么实操练习这几个角度,把计算机网络1这个主题讲透。
1. 为什么学网络安全必须先啃下计算机网络
1.1 网络是所有攻防动作的“战场地图”
网络安全的核心对象是“资产”,而资产在网络世界里通常表现为IP地址、端口、域名、服务。不夸张地说,每一次攻击的第一阶段都是信息收集,而信息收集的绝大部分动作都在做网络探测:这个IP开放了哪些端口,这些端口后面跑了什么服务,服务之间有什么依赖关系。
这就是为什么要学计算机网络。如果你不懂端口和协议之间的关系,扫描器给你吐出一份报告,你看到的只是一堆数字和字母,完全不知道下一步该从哪下手。反过来,你如果熟悉TCP/IP协议栈,看到“22端口开放”就知道大概率是SSH服务,会想到弱口令爆破、密钥泄露这些常见风险;看到“3306开放”就知道是MySQL,第一反应是检查是不是存在弱口令、是不是暴露在公网。
我经常把网络基础比作出警时用的地图。没有地图,你在城市里乱转,运气好能找到一两个目标,运气不好连自己在哪都不知道。有了地图,你才知道哪里是入口、哪里是死角、哪里可以迂回。攻防对抗,本质上就是在这张网络地图上展开的。
1.2 协议决定了攻击方式的边界
有人问,漏洞研究和计算机网络有什么关系?关系太大了。几乎所有漏洞的利用过程,最终都要落到一个具体的网络协议交互上。
举个最典型的例子:SQL注入发生在HTTP协议的请求参数里;XSS攻击要靠HTTP响应中的内容被浏览器解析执行;DNS隧道是把数据编码进DNS查询请求里,实现隐蔽通信;内网里的横向移动,往往要利用SMB、RDP这类协议的特性。你如果只把HTTP当作“网页传输协议”来背,永远理解不了为什么一个参数会导致数据库被拖走。
在学习计算机网络时,我建议大家把每一个协议都当成一种“语言”来看。攻击者就是在用这种语言和服务器对话,服务器会因为代码逻辑缺陷而做出危险回应。安全人员要做的事情,就是比攻击者更懂这种语言,从而在协议交互的各个节点上找到异常。你不懂协议,就算漏洞摆在面前,你可能都说不清它为什么能利用成功。
1.3 网络基本功是职业生涯里不容易贬值的资产
有不少人问过我这个行业是不是“吃青春饭”、是不是年纪大了就干不动。我的观察恰恰相反,像Web框架、组件工具这类东西更新换代很快,今天流行的明天可能就被替代了,但计算机网络里的分层模型、TCP/IP协议栈、路由与交换的基本原理,几十年下来依然是互联网的底座。
也就是说,你在计算机网络上的积累,是“长坡厚雪”式的。越往后,你的经验值越体现在快速定位问题、判断流量异常、分析攻击链路上,这些能力都建立在扎实的网络功底之上。所以无论你是奔着SRC挖洞去,还是打算毕业后做安全运维、安全开发、渗透测试,我都建议先沉下心把网络基础打牢。这个投入会一直跟着你走。
2. 计算机网络的整体框架:OSI与TCP/IP,一张图装进脑子
2.1 用“寄快递”把分层这件事想明白
很多人学计算机网络,一上来就背OSI七层模型,背到第四层就晕了。问题出在死记硬背上。我上课和带新人时,最喜欢用“寄快递”来类比分层:
你写了一封信,信的内容是你真正想表达的东西,对应应用层的数据。然后你找了一个信封把信装进去,写上收件人和寄件人,这是传输层的职责,它负责在两个通信实体之间建立端到端的传送逻辑。接着快递公司给这个包裹贴上面单,写上详细的地址和路由信息,这是网络层的活。最后包裹上路,经过各种运输车辆、分拣中心,这是链路层和物理层的事。
为什么要分层?因为每层只需要关心自己的事情,出了问题也好排查。信丢了可能是地址写错了(网络层),可能是运输途中出了问题(链路层),也可能是根本没人签收(应用层和传输层的连接状态问题)。你不需要让写这封信的人去操心快递车怎么走,也不需要让物流公司去理解你信里写的什么——这就是协议分层的意义。
2.2 两个模型对照着看,别孤立地背
实际做网络安全,聊得最多的是TCP/IP四层模型,但OSI七层模型能帮助你更细致地定位问题。我把两套模型的对应关系和安全关注点整理成了一张表:
| OSI七层 | TCP/IP四层 | 典型协议/设备 | 常见安全关注点 |
|---|---|---|---|
| 物理层 | 网络接口层 | 网线、无线信号、集线器 | 物理接入风险、信号窃听 |
| 数据链路层 | 网络接口层 | 交换机、ARP协议 | ARP欺骗、MAC泛洪、VLAN跳跃 |
| 网络层 | 网际层 | IP、ICMP、路由器 | IP欺骗、ICMP扫描、路由劫持 |
| 传输层 | 传输层 | TCP、UDP | 端口扫描、SYN Flood、UDP放大攻击 |
| 会话层 | 应用层 | 会话管理 | 会话固定、会话劫持 |
| 表示层 | 应用层 | 加密、编码 | 加解密漏洞、编码绕过 |
| 应用层 | 应用层 | HTTP、DNS、FTP等 | Web攻击、DNS劫持、文件传输泄露 |
注意看这张表,安全攻击几乎在每个层次都有对应形态。这就是为什么我说网络基础是安全的地基:你只有清楚每个层的职责和薄弱点,才知道攻击发生在哪里,防御该落在哪里。
2.3 把“层”和“数据包”对应起来,才算真正理解
很多书会讲“数据封装”和“解封装”,但光看文字真容易犯困。我建议直接打开抓包工具,你立刻就能“看见”分层。
在Wireshark里抓一个HTTP请求,你会看到每个数据包由外到内依次是:物理层的帧信息、数据链路层的Ethernet II头部、网络层的IP头部、传输层的TCP或UDP头部,最后才是应用层的HTTP数据。这个结构就是分层模型最直观的体现。
发送数据时,数据从应用层往下走,每一层都往上一个“标签”,也就是协议头;接收数据时从下往上,一层层撕掉标签,最后把原始数据交给应用。理解了这个过程,你再看“MTU”“分片”“TCP分段”这些概念就不会觉得抽象了——它们都是在不同层对数据做的加工动作。
我自己的经验是:把OSI模型当作一个“索引”,而不是背诵负担。遇到一个网络现象,先在脑子里定位“这是哪一层的问题”,然后去查对应层的协议细节,学习效率会高很多。
3. 每一层都在决定“安全水位”:核心协议与安全要点
3.1 应用层:攻击最密集的战场
如果你去看SRC漏洞报告、看渗透测试报告,会发现绝大多数漏洞都出现在应用层。为什么?因为应用层直接面对用户输入,代码是人写的,人的逻辑不可能永远滴水不漏。
以HTTP为例,一个HTTP请求包括请求行、请求头、请求体三部分。请求行里有方法(GET、POST这些)、URL、协议版本;请求头里有Host、User-Agent、Cookie这些字段;请求体则承载表单数据或JSON。SQL注入发生在参数里,XSS发生在响应内容和浏览器交互里,SSRF发生在服务端去请求用户可控的URL的场景里——这些本质上都是应用层对数据信任过度。
还有DNS,它是互联网的“电话簿”。如果DNS解析被篡改,用户访问正常域名时就会被带到钓鱼服务器上。DNS协议在设计时几乎没有考虑认证机制,所以出现了DNS劫持、DNS投毒、DNS Rebinding一类的攻击手法。再比如FTP,旧版本默认明文传输账号密码,抓包就能直接看到密码,这类协议放到今天已经明显不适合在高安全环境下使用。
我学应用层协议时有个习惯:每一个协议都问自己三个问题——它有没有认证机制?它的数据在传输过程中是否加密?它对异常输入有没有校验?三个问题想清楚了,这个协议的安全画像基本就出来了。
3.2 传输层:连接管理中的攻防博弈
传输层是TCP和UDP的主场,也是端口扫描和拒绝服务攻击最集中的层。
TCP的三次握手,本质上是让通信双方确认“你说话我听得到,我说话你听得到”。SYN Flood攻击恰恰就利用了这个机制:攻击者向服务器发送大量SYN请求包,但不完成第三次握手,让服务器一直保持半开连接,最终耗尽资源。你要理解SYN Flood为什么能生效,就必须先理解三次握手的半连接队列和全连接队列是怎么回事。
TCP的四次挥手也存在类似问题,比如连接关闭过程中TIME_WAIT状态过多会导致端口耗尽,这也是运维和安全经常遇见的场景。
UDP和TCP完全不同,它不需要连接,发出去就不管,所以性能高但可靠性低。攻击者会利用UDP的无状态特性做反射放大攻击:向开放的DNS服务器发送小体积的查询请求,伪造源IP为受害者IP,让服务器把大体积的响应数据发往受害者,实现“借刀杀人”。
实操里,我建议新手用nc和telnet这类工具手动发TCP数据,抓包观察握手过程。当你亲手把一个TCP连接从建立到关闭的全过程看了一遍,端口扫描的原理就不需要背了——你看到的每一个状态变化,都是扫描工具判断端口开放或关闭的依据。
3.3 网络层与链路层:数字世界的“交通”和“门牌”
网络层的核心是IP地址和路由。IP地址相当于门牌号,路由器根据这个门牌号把数据从一个网络转发到另一个网络。ICMP协议则负责传递控制信息,比如ping命令用的就是ICMP Echo请求和回应。
在网络层,你经常看到的安全操作是“存活探测”和“路径探测”。攻击者会用ping扫描发现内网里的存活主机,再用traceroute了解目标网络的路径结构。作为防御方,如果不想让内网设备被轻易探测到,就需要在防火墙上限制ICMP流量——但也要注意,完全禁用ICMP有时会影响MTU发现,造成大包传输问题,这就是一个典型的“安全与可用性平衡”场景。
再往下走是数据链路层,这里有个在真实内网里极其常见的攻击方式:ARP欺骗。ARP协议用于把IP地址解析成MAC地址,但它没有任何身份验证机制。攻击者在同一局域网里发送伪造的ARP应答,就能让受害者的数据包发往攻击者的机器,这就是中间人攻击的基础。我自己在虚拟环境里复现过ARP欺骗,抓包看到数据确实拐了个弯,那一刻才真正理解“同一个广播域里谁都不能信”这句话的含义。
3.4 实战案例:一次“网站打不开”的排查过程
理论讲多了容易飘,我分享一个真实的网络排查经历,把各层知识串起来。有一次我在测试环境访问一个内部系统,浏览器一直转圈但页面就是不出来。远程排查网络问题时,我的思路就是自下而上分层定位:
先用ping测网关,发现延迟正常但偶尔有丢包,说明链路层和网络层有不稳定迹象。再用traceroute看路径,发现前几跳都没问题,到达目标网段的最后一跳丢包明显,怀疑是目标服务器所在网络的问题。然后我用netstat看本机到目标服务器的TCP连接状态,发现大量连接卡在SYN_SENT,说明握手请求发出去后没有回包。最后在目标服务器上抓包,发现服务器收到了大量SYN请求,但回应的SYN-ACK好像没有被客户端收到——两边一对比,问题出在中间设备的防火墙策略上。
这个例子我想说明什么?如果我不理解数据链路层、网络层、传输层之间的分工,面对“网站打不开”这个问题,我只能瞎猜。但懂网络的人,只需要几分钟就能把问题范围从“整个网络”缩小到“某一层、某一个设备、某一条规则”上。这种能力在应急响应、故障排查、蓝队防守时,价值是不可替代的。
4. 实操驱动:我的抓包与网络排查工具箱
4.1 Wireshark入门:从眼花缭乱到顺手
学习计算机网络,最忌讳的是只看书不抓包。我的建议是,从第一天开始就装好Wireshark,边看边抓边验证。
Wireshark打开后的界面分三块:上边是数据包列表,中间是协议树,下面是原始字节。列表里每一行是一个数据包,点开后在中间能看到这个包从链路层到应用层的完整头部信息,这就是刚才说的“分层模型”的实物。
新手最容易卡住的是过滤语法。我常用的几个:
ip.addr == 192.168.1.10:只看这个IP相关的包。tcp.port == 80:只看80端口流量。http.request:只看HTTP请求。tcp.flags.syn == 1:只看TCP的SYN包,分析握手过程非常好用。
抓一次自己访问网页的流量,用“跟随TCP流”功能把整个HTTP请求和响应拼起来看,你会直观看到一次完整的协议交互,远比背一百遍报文格式更管用。
4.2 命令行网络工具,每个都是“探针”
除了Wireshark,一套趁手的命令行工具能帮你解决90%的网络定位问题。我把常用工具的用法整理成一张表,你可以直接抄:
| 工具 | 核心作用 | 安全场景示例 |
|---|---|---|
| ping | 测试主机连通性、丢包率 | 判断目标是否存活、网络是否稳定 |
| traceroute | 查看路由路径每一跳 | 定位故障节点、了解网络拓扑 |
| nslookup/dig | 查询DNS解析记录 | 判断域名解析是否被篡改 |
| curl | 发送HTTP请求、查看响应头 | 测试Web服务、修改请求头做验证 |
| netstat/ss | 查看端口监听和连接状态 | 排查可疑连接、确认端口开放情况 |
| nc | 手动建立TCP/UDP连接、发送数据 | 端口探测、测试服务是否响应 |
| tcpdump | 命令行抓包分析 | 无图形界面环境下的流量采集 |
举一个实际例子:你在内网做信息收集时,先用ping扫一次C段,再用nmap做端口探测,然后用curl访问某个Web服务看看响应头和首页内容,最后用nslookup查一下相关域名指向哪个IP。这一套流程走下来,你对目标资产的网络侧画像基本就出来了。
4.3 搭建一个能“随便折腾”的网络实验环境
我强烈建议每个学网络安全的人都自己搭一套实验环境,用虚拟机构建一个小型网络。我自己常用的方案是:一台虚拟机当攻击机,一台当靶机,一台当路由或防火墙,三台通过自定义虚拟网络连起来。靶机上装一个Nginx或一个存在漏洞的Web应用,攻击机上用工具和命令做各种探测。
在这个环境里,你可以合法合规地把学到的理论全部验证一遍:抓三次握手、模拟SYN Flood、观察ARP欺骗、测一测防火墙规则生效没有。为什么一定要自己搭?因为真实生产环境不敢随便折腾,而虚拟环境里你随便造,造完快照一恢复又是一条好汉。
更重要的是,只有亲手做完一遍“从发出请求到抓到响应”的全流程,你才会真正理解那些协议细节。很多知识点,你看书觉得懂了,一动手就会发现到处是盲区。实验环境就是用来把盲区照亮的地方。
5. 学习路线与常见问题避坑实录
5.1 一份可以直接照做的计算机网络学习路线
总有人求学习路线,其实路线不用复杂,关键是每一阶段做什么要清晰。我把它压缩成四步:
第一步,啃一本体系完整的教材。谢希仁的《计算机网络》适合系统性入门,思路清楚;《计算机网络:自顶向下方法》则适合从应用层往下走,和网络安全的学习路径很搭。如果你为考研408做准备,王道考研系列配套视频也讲得很细。B站上“湖科大教书匠”的计算机网络课也值得看,动画演示把很多抽象过程讲得非常好懂。
第二步,把教材里的重点协议用抓包工具验证一遍。TCP握手、HTTP交互、DNS解析,至少各抓一次,你自己能说清楚每个字段的意思,才算过关。
第三步,把协议和安全场景对应起来。学一个协议,就查一个利用该协议的攻击案例,比如学HTTP就去看SQL注入和XSS,学DNS就去看DNS劫持和隐蔽隧道,学ARP就去看内网欺骗。这一步是把“网络知识”转化为“安全能力”的关键。
第四步,参与SRC众测或CTF比赛,带着真实问题去补网络知识。你会发现很多漏洞看不懂,翻回去查,恰恰是某个协议细节没搞懂。这种“由问题驱动学习”的方式,比漫无目的地看书高效得多。
5.2 新手最常踩的坑
说几个我在带人过程中见得太多的坑,每一个都值得你记住:
第一个坑,背完七层模型就觉得自己懂网络了。实际上你随便抓个包,可能连哪部分是IP头都指不出来。解决办法只有一个:多抓包,把书本概念和真实报文对应起来。
第二个坑,只记端口号不记协议交互。20、21是FTP,22是SSH,3306是MySQL,这些背得滚瓜烂熟,但问一句“SSH连接是怎么建立的”就答不上来。记住端口只是认识了一个门牌号,你要知道门背后的房间里在干什么。
第三个坑,工具使用变成“脚本小子式操作”。扫描器跑完看结果就完事,从不想为什么这个端口是open的、那个服务为什么能识别出来。工具输出的每一个判断,背后都是一套协议逻辑,多问“为什么”才是学习。
第四个坑,只看视频不动手。现在学习资源非常多,很多人刷课刷得很爽,但一上真机就懵。学习网络没有捷径,动手抓包、动手配实验、动手看日志,这些功夫省不掉。
5.3 常见问题速查表
最后分享一个排查速查表,都是日常高频遇到的情况,按“症状—可能原因—排查思路”来列,方便你直接参考。
| 症状 | 可能原因 | 排查思路 |
|---|---|---|
| 能上微信但网页打不开 | DNS解析异常 | 用nslookup看域名解析结果,更换DNS服务器测试 |
| 内网突然断断续续 | 交换机端口问题、ARP欺骗 | 抓包看是否有大量ARP应答,检查交换机日志 |
| 访问特定网站超时 | 中间设备防火墙策略 | 用traceroute定位阻塞点,检查目标端口连通性 |
| 端口扫描结果和预期不符 | 防火墙过滤、服务未启动 | 用nc逐个测试端口,用netstat查看服务监听状态 |
| 网页加载极慢且有大量重传 | 网线/无线信号差、MTU设置问题 | 抓包统计TCP重传数量,检查物理链路质量 |
| 服务器连接数爆满 | 可能存在半连接攻击 | 用ss -s查看socket状态,统计SYN_RECV数量 |
这张表不需要背,等你遇到实际问题再回来翻,效果反而更好。网络知识本来就是“用到时才知道哪里漏了”,多踩几次坑,你才能真正长记性。
我在实际学习过程中的体会是,计算机网络看起来是一堆协议的堆叠,但真正学进去之后,你会有一种“通透了”的感觉——因为所有攻防技术的底层,都逃不开这些协议交互。学完这一篇,你已经有网络基础的框架了,后面再往协议安全、流量分析、内网攻防这些方向深入,就有了可以扎根的土壤。最后送大家一个建议:今天学到的知识,打开Wireshark亲手验证一次,比你看十遍文章都更有用。