网络安全入门第一课:用Wireshark吃透网络协议与TCP握手
如果让我给零基础打算入网络安全的人一句最实在的建议我会说别急着去碰扫描器、漏洞库和那些炫酷的攻击演示先把计算机网络这门课老老实实啃下来。网络安全的第一阶段说白了就是先弄清数据在网络上到底怎么流动、从哪里来、要到哪里去。网络层的路由、传输层的连接、应用层的协议这些都是后面搞渗透测试、搞日志分析、搞应急响应时天天要打交道的东西。这篇笔记是我自己走过弯路之后重新梳理的东西不是教科书摘要而是把“为什么学、学到什么程度、怎么动手验证”一次讲清楚。这个阶段适合的人很明确刚入行、想转行做安全的同学以及已经会写几段代码但从来没看过网络包长什么样的人。学完你可能还不会“攻击”但你能看懂抓包文件里的每一次握手和挥手能定位一个连接为什么建立失败能判断一个异常流量是有意为之还是网络故障——这些正是安全从业者最基础的肌肉记忆。1. 为什么网络安全的第一站必须是计算机网络1.1 攻防双方都在同一张网上博弈很多人对网络安全的想象是“破解密码、拿下权限”但真正干这行的人都知道几乎所有攻防动作都要依赖网络协议来完成。攻击者要找到目标靠的是IP寻址和路由要建立连接靠的是TCP握手要把恶意载荷送进去靠的是应用层的HTTP、DNS、SMB这些协议。防御者要做流量分析、入侵检测、日志溯源看到的同样是这些协议产生的数据。我刚开始学的时候犯过一个典型错误直接去看某些漏洞利用演示结果完全看不懂为什么一个请求就能打穿服务器因为中间链路里的每一步我都不知道。后来把网络基础补上再回头看那些东西很多原理立刻清晰了。所以我的看法是网络安全不是“绕过网络”而是“利用网络”你不懂网络就既不懂攻击也不懂防御。1.2 这个阶段到底要学到什么程度学习最怕没有边界尤其自学的时候容易陷入“越学越焦虑”。我给这个阶段划了几条硬性目标全部达成才算过关能画出OSI七层模型和TCP/IP四层模型的对应关系知道每个层常见的协议、端口和设备。能解释IP地址、子网掩码、默认网关、DNS服务器分别扮演什么角色能自己算子网。能说出TCP三次握手和四次挥手的完整过程能结合抓包文件指出每个包的标志位。会用抓包工具过滤出指定协议和指定主机的流量能看懂HTTP请求和响应的关键字段。理解ARP协议的原理以及它在局域网里的地位清楚中间人攻击为什么能成立也知道最基本的防范手段。理解NAT、VLAN、防火墙规则这些网络边界概念能说清它们在安全体系里起什么作用。这些目标有一个共同点全部可以动手验证。我强烈建议不要只背书每个知识点都配合抓包和命令去看一眼。1.3 学习顺序和时间安排建议我给身边人规划的路线是“三层递进”总周期大约三到四周每天投入两小时左右第一周分层模型IP地址与子网划分重点是看懂网络“地图”。第二周ARP、TCP、UDP、ICMP这些核心协议配合抓包工具逐个验证。第三周DNS、HTTP/HTTPS等应用层协议用浏览器开发者工具和Wireshark对照观察。第四周VLAN、NAT、防火墙基础拿虚拟机搭一个小型组网环境做实验。这个顺序不是我拍脑袋定的而是按照数据的实际流转路径来的先知道数据要在哪些层次上处理再往上叠加协议细节最后才看边界设备如何管控。跳过前两步直接学防火墙策略你只会死记规则不会debug。2. 从分层模型开始别背协议先懂架构2.1 为什么要有“分层”这种设计很多初学者看到OSI七层直接崩溃觉得七层太多了。但我换一个类比你就懂了网络分层就像寄快递。你寄一个包裹时不需要关心货物被装在哪个车厢、走高速还是铁路只需要写清收件人信息剩下的由物流体系分头负责。每一层都只跟自己上下相邻的层打交道各干各的出了问题也好定位——是地址写错了网络层问题还是快递箱破了传输层问题还是收件人拒收应用层问题。安全人员也必须习惯“分层思维”。别人发来一个恶意访问记录你首先要判断它是在哪一层暴露的如果是目标端口扫描那是网络层和传输层的事情如果是SQL注入那是应用层的事。分析问题的位置不对后面的结论就全跑偏了。我排查问题永远先问一句这是哪一层的事这一句话能省半天时间。2.2 从OSI七层到TCP/IP四层OSI七层模型是理论参考实际互联网用的是TCP/IP四层模型。这四层分别对应我们日常工作里的具体对象网络接口层对应网卡、MAC地址、以太网帧负责物理介质上的传输。网际层对应IP、ICMP、ARP负责跨越多个网络找到终点地址。传输层对应TCP、UDP负责端到端的连接管理和数据可靠性。应用层对应HTTP、DNS、FTP、SSH等负责具体的业务语义。这里有一个常见的困惑ARP到底属于哪一层很多教材把它算作网络层但它实际上工作在本地链路范围内靠MAC地址做广播。我的建议是不用太纠结你考试时的答案关键是要知道ARP解决的是“同一个局域网里如何找到对方网卡”这个问题它没有跨网络路由能力。后面讲中间人攻击的时候这个点很重要。2.3 一张图对照清楚协议清单我用下面这张表做记忆锚点把它存成笔记学协议时随时回来对照层次代表性协议常见设备/工具安全视角关注点应用层HTTP、HTTPS、DNS、SSH、FTP、SMTP浏览器、Web服务器、数据库注入、越权、恶意文件上传传输层TCP、UDP防火墙、负载均衡端口扫描、连接耗尽、畸形包网际层IP、ICMP、ARP路由器、三层交换机扫描探测、ARP欺骗、ICMP隧道网络接口层以太网、Wi-Fi交换机、无线APMAC泛洪、无线欺骗你不需要一开始就把每个协议都吃透比如你暂时不用研究FTP的命令细节只要知道它是干嘛的、跑在21端口抓包时能认出来就行。协议会越用越熟靠一次性记忆根本不现实。3. 核心协议逐个击破会看包才算会网络3.1 数据链路层的ARP局域网怎么找到邻居ARPAddress Resolution Protocol地址解析协议解决的问题很朴素我知道对方的IP但我怎么知道它的网卡MAC地址在同一个局域网里主机会发送一个广播谁的IP是192.168.1.10请把你的MAC地址告诉我。目标主机收到后回复自己的MAC地址请求方把它写进ARP缓存表。安全上关注ARP是因为它默认不验证应答的真实性。任何一台主机都可以主动发送“我是192.168.1.1我的MAC是XX”其他主机就会把这条伪造映射写进缓存。这就是中间人攻击能成立的根本原因。后面我会演示在自建虚拟环境里复现这个过程你在真实网络上千万不要照做。验证方法也很简单在Windows上执行 arp -aLinux上执行 arp -n就能看到本机缓存的IP-MAC映射。抓包时过滤 arp 协议可以看到请求包是广播应答包是单播。这一步能让你真正理解“广播”和“单播”的差异。3.2 网络层的IP和路由数据怎么跨网段IP地址是互联网世界的门牌号但它不是唯一的寻址要素。同一网络内靠交换机转发跨网络必须靠路由器。路由器的核心动作就是“查路由表决定下一跳”。这也是为什么每台主机要配置默认网关——你发数据给别的网段先交给网关由网关帮你继续问路。学习网络层的实操建议是玩通三个命令ping、ipconfig/ifconfig、traceroute/tracert。traceroute尤其适合理解路由跳数它通过不断递增TTL让每个路由器回一个ICMP超时消息把路径上的节点逐个暴露出来。安全人员分析攻击溯源时也常看这一条路径虽然攻击者可以伪造源IP但中间链路设备的痕迹很难完全抹掉。3.3 传输层TCP为什么连接要“三次”握手TCP是可靠传输所谓“可靠”靠的不是魔法而是一堆状态确认机制。三次握手是建立连接时双方确认收发能力的过程客户端发送SYN包序列号seqx表示我要建立连接。服务端回复SYNACK包seqyackx1表示我收到你的请求并且我也准备好。客户端再发ACK包acky1表示双方确认完毕进入数据传输阶段。我听过一个很贴切的比喻你想约人谈事发消息问“在吗”SYN对方回“在方便谈吗”SYNACK你再回“好那我们开始谈”ACK。三次交互缺一不可少了任何一次有一方都无法确认对方确实准备好了。网络安全和排查里经常遇到“三次握手只进行了一半”的情况比如只看到SYN没有SYNACK那就说明服务端没有正常监听或者被防火墙拦了。TCP状态机也是必考内容但我不建议死背。你只要在实际抓包里看到连接从建立到关闭的状态变化自然就记住了。断开连接的四次挥手是FIN、ACK、FIN、ACK其中主动关闭方最后要停留2MSL的TIME_WAIT状态这是为了保证最后的ACK对方能收到。3.4 应用层的DNS和HTTP日常流量长什么样DNS负责把人类记忆的域名解析成IP。抓包时你会看到DNS查询使用UDP的53端口过程很短问“example.com是多少”答“93.184.216.34”。为什么安全人员关心DNS因为很多恶意程序会用DNS做隐蔽通信或者把自己连的服务器域名藏在大量解析记录里。学会过滤dns.qry.name你就能在一个大流量文件里快速挑出值得关注的域名。HTTP则是Web安全的重头戏。一个HTTP请求里最值得关注的字段包括请求方法GET/POST/PUT、URL路径、Host头、Cookie、User-Agent响应里则是响应码和响应头。我在抓包时常让学生做一个小作业打开一个普通网页用Wireshark抓到HTTP请求指出这些字段分别在哪一层、哪一段。做过一次之后你再看Web攻击的讲解思路会完全不一样。HTTPS比HTTP多了一层SSL/TLS加密理论上中间人无法直接读到内容。但安全上恰恰因为加密使得检测困难所以防御者更依赖证书有效性验证和服务端日志。理解这个区别会让你明白为什么当初那么多泄露事件里服务器日志比流量包更有分析价值。4. Wireshark实战把看不见的网络拉到眼前4.1 搭建一个安全的抓包实验环境学习协议最忌讳一上来就对生产网络乱抓包我推荐用虚拟机搭建隔离实验环境既安全又可控。我自己的配置是一台运行某Linux发行版的虚拟机作为“服务器”一台Windows虚拟机作为“客户端”两台虚拟网卡都接入同一个自定义的虚拟内网网段不要用NAT网络改成桥接到同一虚拟交换机即可。这个环境里你可以随便做实验包括关闭防火墙、仿造ARP报文、断开连接等都不会影响到外部。真实网络里像VRRP、STP、组播这类协议的数据很吵新手直接上手容易被淹得头大隔离环境里流量干净每一条都有名字你学起来才快。4.2 Wireshark与tcpdump基础用法Wireshark是图形化抓包工具优点是直观tcpdump是命令行工具适合在服务器上远程抓包。两个我都会用但建议新手先死磕Wireshark因为它能让你看到每个包内部的字段拆分意义太重要了。最基础的操作是“选定网卡点开抓包”但更重要的是学会过滤。Wireshark里有两类过滤器一定要分清捕获过滤器Capture Filter在抓包之前设置只抓感兴趣的包节省磁盘空间。写法是BPF语法例如 tcp port 443。显示过滤器Display Filter在抓包之后设置从已保存的包里筛出目标流量。写法是字段表达式例如 tcp.port 443。我最常用的几个显示过滤器写在这里你直接抄tcp.port 80 ip.addr 192.168.1.10 http.request dns.qry.name contains example tcp.flags.syn 1 tcp.flags.ack 0tcpdump命令行的常用基式是这样sudo tcpdump -i eth0 -nn -w capture.pcap tcp port 80加 -w 是为了把原始数据存成文件再用Wireshark打开分析。我强烈建议抓包一律存文件不要在命令行里直接看输出——流量大了以后刷屏速度根本追不上。4.3 亲手抓一次TCP三次握手我现在带你把三次握手完整抓一遍。步骤很简单在Wireshark里先开启仅过滤 tcp 的显示条件然后在客户端浏览器访问服务器上的一个HTTP页面或者直接用命令行工具发一次请求。为了干净我在服务器上用Python起一个临时HTTP服务python3 -m http.server 8080然后客户端访问 http://服务器IP:8080抓包里就会出现一条典型的TCP三次握手记录。这时候你点开发送方的第一个包看它的Flags字段确认SYN位是1再点接收方回包确认SYN和ACK同时为1Sequence Number是对方的初始序号加1最后一个包的ACK位是1。顺便看一眼服务器HTTP响应的第一个包你还能观察到数据是如何分段传输的。我要求自己每次抓完包都手动确认三件事源端口、目的端口、标志位。这三个字段是所有TCP分析的基础不看它们你抓一万个包都学不会。4.4 ARP欺骗的原理演示与防范在实验环境里我可以花两分钟演示一下为什么ARP协议能被滥用。假设局域网里有三台虚拟机受害者A、合法网关G、实验机M。M向网络广播一个伪造的ARP应答声称自己是网关G的IP对应MAC是M的网卡地址。受害者A只要接收并缓存了这条记录它发给网关的流量就会先到M这里M再转发给真网关。这样M就处在通信链路中间能看到所有明文流量。我强调一下这个演示只应该在你自己搭的虚拟机网络里做目的是理解中间人攻击的实现逻辑绝不可以拿去真实网络里玩。作为未来要干安全的人你应该更关心防范在交换机上启用DHCP Snooping和动态ARP检测服务器和高风险主机配置静态ARP表敏感通信全部走加密协议。理解了攻击原理之后把重点放在“怎么让攻击不成立”上这才是安全从业者的价值。5. 网络边界与隔离安全的第一道防线5.1 子网划分不是数学题是边界设计很多网工培训把子网划分讲成咬牙切齿的计算题但安全人员看子网划分应该看“边界”。你划分子网本质是在设计信任边界哪些设备能够互相通信哪些流量需要穿越边界设备接受检查。比如办公网、生产网、管理网各用一个独立网段访问控制规则就可以做得很清晰违规访问一眼就能看出来。最基础的计算方法其实半小时就能掌握IP地址是32位二进制子网掩码的1表示网络位0表示主机位。比如192.168.1.0/24表示前24位是网络位后面8位是主机位可用主机地址从192.168.1.1到192.168.1.254两头分别是网络地址和广播地址不能配给主机。你自己拿笔算一次再拿计算机上的ipcalc工具验证一次这个概念就永远忘不掉。5.2 VLAN隔离为什么比物理隔离更灵活VLAN的作用是在交换机上把一个大二层网络切成多个逻辑子网即使设备插在同一台交换机上不同VLAN之间也不能直接通信必须经过路由器或三层交换机的策略。安全人员喜欢VLAN是因为它能实现权限控制给访客划一个VLAN只放通互联网出口给服务器划一个VLAN只放通特定来源的管理访问。有一点新人常搞混VLAN隔离的是二层广播域不是绝对安全边界。如果上层路由配置错误流量照样能穿过去。所以在设计网络时VLAN只能当作第一层隔离真正的安全判断要依赖防火墙规则和主机本身的安全配置。安全永远是纵深防御没有任何一道设备能包打天下。5.3 防火墙策略的核心是“默认拒绝”理解了网络边界之后读懂防火墙就顺理成章了。传统防火墙在传输层工作核心规则就是五元组源IP、目的IP、源端口、目的端口、协议。你去任何单位看安全设备配置会发现大多规则都是“放行某些特定的源IP到某些目的端口”其余全部丢弃。这叫“默认拒绝”是安全策略最基础的姿态。我之前自己设计实验网络的时候就吃过教训为了省事把防火墙策略写成允许所有流量结果没多久就看到扫描日志里出现大量异常连接。后来我把策略逐条收紧日志立刻干净了。这个经历让我记住一条铁律防火墙不是用来“放行”的而是用来“禁止”的你没明确放行的流量就应该默认掉。6. 我踩过的坑与网络排查速查6.1 新手容易踩的五个坑第一个坑是想当然地使用抓包工具却不开过滤结果网卡一开抓了几万包人直接被淹没。对策是每次抓包前先明确“我要看什么协议”把捕获过滤器先写上。第二个坑是只知道IP不知道端口。很多新手看连接只看对方IP不知道端口才是服务的门牌号。排查“连接被拒绝”时第一步就该确认目的端口有没有对应服务在监听。第三个坑是混淆“通”和“通链路”。ping通了不代表HTTP服务正常因为ICMP和TCP是两个层面的事。我自己排查过很多次“ping通但业务不通”的问题解决方案往往在防火墙或服务监听地址上。第四个坑是只在图形界面里点来点去不看原始报文内容。Wireshark的每个字段应该有意识去对应到原始十六进制数据至少要知道我看的字段在报文里大致什么位置。第五个坑是忽视时间线和序列号。分析慢连接问题时只看“有没有回包”是不够的必须看每个包之间的时间间隔以及TCP序列号是否连续。不连续往往意味着中间有丢包重传正是性能问题的元凶。6.2 一套固定的排查套路遇到网络异常我有一套反复使用的检查顺序先确认链路通不通ping目标IP。通了再看下一步不同就打 ipconfig 检查本机IP、掩码、网关。检查端口通不通用test-netconnection命令Linux下用nc -zv 目标IP 端口看TCP能不能建立。如果端口接不通抓包往防火墙方向查SYN包发出去了吗SYNACK回来了吗还是被悄悄丢掉如果端口通但业务异常抓应用层报文看请求字段有没有被截断、响应码是什么、重传多不多。最后看日志主机日志、防火墙日志、服务日志逐一对照。这套顺序不保证解决所有问题但能保证你不在一个错误方向上死磕。每次排查完我都会把“现象、猜测、验证、结论”四行笔记写下来时间久了就是自己的问题知识库。6.3 常见问题速查表现象可能原因快速验证手段ping不通同网段主机ARP解析失败、目标防火墙禁Ping、网卡未配置IParp -n 查看缓存是否正常ping通网关但ping不通外网路由配置缺失、出口NAT未生效traceroute 观察断在哪一跳能连接但网页打不开DNS解析失败、HTTP服务未启动、端口被防火墙拦nslookup 域名再看抓包是否有DNS应答连接超时TCP握手没完成防火墙丢弃SYN包、服务未监听、后端负载异常抓包看是否有SYN、SYNACK连接极慢大量重传链路丢包、MTU不合理、中间设备限速过滤tcp.analysis.retransmission统计数量同一网段内突然大面积上网故障ARP欺骗、交换机故障、DHCP冲突检查缓存MAC是否异常、抓包看重复ARP应答这张表我不建议直接背而是要自己亲手遇到、验证一遍。真遇到时要做的第一件事不是去翻表而是先冷静记录现象再按上面的排查套路一项项试。6.4 第一阶段之后怎么走网络基础过关之后下一步通常分两个方向一是继续深入协议到操作系统层面学习Windows和Linux的网络安全基座比如进程、端口、日志、权限二是进入Web安全方向学习常见的Web漏洞原理与利用条件。两者都需要网络知识打底区别只是往上叠的是“操作系统”还是“应用代码”。我个人更倾向于先学操作系统安全再学Web安全因为服务端漏洞的利用和分析始终离不开操作系统的文件、进程、权限模型。但如果你目标是Web渗透测试直接从HTTP协议延伸到Web漏洞也可以关键是不要跳过网络基础。最后分享一点我的个人体会计算机网络这个阶段看起来枯燥但它最大的价值不是让你记住几个协议名称而是帮你建立一种“分层排查”的本能。我现在做应急响应时拿到一个异常流量文件脑子里会自动把事件拆成“哪一层、什么协议、什么标志位、对应哪个端口”这个习惯就是当年一点点看抓包养出来的。给零基础读者的建议只有一条别嫌慢动手抓包把每一次连接都拆开看清楚。后面所有精彩的技术都建立在你对网络底层那种不慌不忙的熟悉感上。