ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

网络安全学习笔记:从计算机网络协议到抓包实战,打好攻防地基

网络安全学习笔记:从计算机网络协议到抓包实战,打好攻防地基 经常有刚入门的朋友问我做网络安全是不是会跑几款扫描器、能在漏洞平台上提交几个漏洞就算入行了我的回答一直很直接——工具只是手指而计算机网络才是那双手。这篇笔记是“网络安全学习笔记”系列的第一篇我决定先把计算机网络这块地基掰开揉碎讲清楚。我见过太多人一上来就追着最新漏洞跑结果日志看不懂、流量看不懂、报错信息也看不懂最后卡在瓶颈期上不去。反过来那些网络基础扎实的人学渗透、学代码审计、学应急响应速度反而越来越快。这篇内容适合刚接触网络安全、准备走安全方向的朋友也适合正在复习计算机网络、想搞清楚“这东西到底和网络安全有什么关系”的同学。我会从为什么学、学什么框架、协议层怎么和安全挂钩、怎么实操练习这几个角度把计算机网络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是FTP22是SSH3306是MySQL这些背得滚瓜烂熟但问一句“SSH连接是怎么建立的”就答不上来。记住端口只是认识了一个门牌号你要知道门背后的房间里在干什么。第三个坑工具使用变成“脚本小子式操作”。扫描器跑完看结果就完事从不想为什么这个端口是open的、那个服务为什么能识别出来。工具输出的每一个判断背后都是一套协议逻辑多问“为什么”才是学习。第四个坑只看视频不动手。现在学习资源非常多很多人刷课刷得很爽但一上真机就懵。学习网络没有捷径动手抓包、动手配实验、动手看日志这些功夫省不掉。5.3 常见问题速查表最后分享一个排查速查表都是日常高频遇到的情况按“症状—可能原因—排查思路”来列方便你直接参考。症状可能原因排查思路能上微信但网页打不开DNS解析异常用nslookup看域名解析结果更换DNS服务器测试内网突然断断续续交换机端口问题、ARP欺骗抓包看是否有大量ARP应答检查交换机日志访问特定网站超时中间设备防火墙策略用traceroute定位阻塞点检查目标端口连通性端口扫描结果和预期不符防火墙过滤、服务未启动用nc逐个测试端口用netstat查看服务监听状态网页加载极慢且有大量重传网线/无线信号差、MTU设置问题抓包统计TCP重传数量检查物理链路质量服务器连接数爆满可能存在半连接攻击用ss -s查看socket状态统计SYN_RECV数量这张表不需要背等你遇到实际问题再回来翻效果反而更好。网络知识本来就是“用到时才知道哪里漏了”多踩几次坑你才能真正长记性。我在实际学习过程中的体会是计算机网络看起来是一堆协议的堆叠但真正学进去之后你会有一种“通透了”的感觉——因为所有攻防技术的底层都逃不开这些协议交互。学完这一篇你已经有网络基础的框架了后面再往协议安全、流量分析、内网攻防这些方向深入就有了可以扎根的土壤。最后送大家一个建议今天学到的知识打开Wireshark亲手验证一次比你看十遍文章都更有用。
返回列表