【Linux网络】吃透 Linux 网络传输全流程从局域网通信到跨网路由结合内核源码拆解底层原理文章目录前言一. 前置故事和知识点铺垫二. 网络传输的核心基石MAC 地址与 IP 地址2.1 MAC 地址局域网内的设备身份证附以太网的核心通信规则2.2 IP 地址互联网中的主机门牌号2.3 MAC 地址与 IP 地址的核心区别三. 概念补充认知上的转变以太网 MAC地址3.1 更换视角你是如何看待局域网以太网3.2 以太网为什么叫做以太网3.3 重新回归MAC地址的概念补充强化3.4 概念回顾统一精准化表达四. 局域网通信的完整流程封装与解包4.1 基础夯实先搞懂 3 个核心概念4.2 发送端数据封装的完整过程4.3 局域网内的报文广播与接收4.4 接收端数据解包与分用的完整过程4.5 深度理解协议栈图示说明4.6 Linux 内核中封装的底层实现五. 跨网络传输的核心流程路由与逐跳转发5.1 路由器的核心作用5.2 跨网络传输的完整流程5.3 IP 网络层的核心意义 网络通信的宏观流程六. 核心考点总结面试高频结尾前言做 Linux C/C 后端开发的同学几乎每天都在和网络打交道写 Socket 服务、调 HTTP 接口、排查线上网络超时 / 丢包问题但很多人都停留在「调用 API 实现功能」的层面却从未深究过一个最核心的问题当我们在代码里调用send()发送一句 “你好”这句数据到底经历了什么才能从本机的应用程序跨越网线、交换机、路由器最终精准地出现在另一台主机的应用程序里很多网络编程的坑、线上疑难故障本质都是对底层传输流程的理解缺失导致的。本文就从局域网通信的底层原理出发一步步拆解 TCP/IP 协议栈的数据封装与解包全流程再到跨网络传输的路由逻辑结合 Linux 内核源码把网络传输的底层逻辑讲得明明白白。一. 前置故事和知识点铺垫故事网络购物快递单的例子快递小哥送快递给我肯定不会直接把商品拿出来给我而是快递单快递单是给快递公司和快递小哥看的送到我手上之后我才会拆开快递把东西拿出来。我实际收到的东西比期望的多因为多了一个快递盒子和快递单我们这里的快递单子其实就是报头盒子是封装内容叫做有效载荷其中盒子没有单独的数据结构。快递单报头 -- 协议的体现快递盒封装盒子里装的内容商品有效载荷。任何一个中转的站点都认识这些快递单上的字段— 这就是约定协议。未来收到数据基本都要包含两部分报头 数据(有效载荷)我在意的是里面的东西但是实际会有多的东西就是报头这个报头也就是双方都认识的结构体变量。二. 网络传输的核心基石MAC 地址与 IP 地址网络通信的本质是「数据从一个主机的进程精准送达另一个主机的进程」。而要实现这个目标首先需要两个核心标识分别解决「局域网内找谁」和「全网范围内找谁」的问题。2.1 MAC 地址局域网内的设备身份证附以太网的核心通信规则MAC 地址Media Access Control Address媒体访问控制地址是数据链路层的核心概念用来标识局域网内相连的节点。核心特性长度与格式固定为48 比特位6 个字节通常用 16 进制数字 冒号的形式表示例如08:00:27:03:fb:19。唯一性在网卡出厂时就烧录到硬件中理论上全球唯一不可修改虚拟机的 MAC 地址为虚拟地址可能存在冲突部分网卡支持软件配置 MAC 地址。作用范围仅在局域网内有效核心作用是实现局域网内相邻设备的精准寻址。查看方式Windows 系统在 cmd 中执行ipconfig /all即可看到网卡的物理地址MAC 地址Linux 系统执行ifconfig或ip addrether字段后即为 MAC 地址。以太网的核心通信规则以太网有一个刚性要求任何时刻只允许一台主机在局域网中发送数据。如果多台主机同时发送数据光电信号会产生干扰我们称之为数据碰撞碰撞后的数据会变成无效的垃圾数据。因此以太网中的所有主机都必须实现碰撞检测与碰撞避免机制发送数据前先监听信道是否空闲空闲才发送发送过程中持续检测是否发生碰撞检测到碰撞后立即停止发送等待随机时间后重试没有交换机的情况下一个以太网就是一个完整的碰撞域。2.2 IP 地址互联网中的主机门牌号IP 地址是 IP 协议中用来标识网络中不同主机的地址是网络层的核心概念我们日常学习默认以IPv4为主。核心特性长度与格式IPv4 地址是一个4 字节32 位的整数通常用「点分十进制」的字符串表示例如192.168.0.1用点分割的每个数字代表一个字节取值范围 0-255。唯一性在公网范围内IP 地址唯一标识一台主机局域网内可通过私有 IP 段实现内网唯一标识。核心作用全网地址管理与路由选择是数据从源主机到目标主机的路径规划核心依据。屏蔽底层网络差异IP地址一个“数字”怎么能够帮我们进行路径选择和主机定位的问题比如我们在学校里面的学号别人可以通过学号找到一个人嘛是可以的学号都是有规律的多少位代表学院多少位代表班级多少位代表宿舍…那么在网络当中能通过IP地址找到目标主机也没啥好意外的了。IP地址也分源IP地址和目标IP地址后面我们再说通过学号能找到对应的人的本质其实是学校做了一系列基础工作的结果。所以理解IP地址我们还应该重点去研究运营商是如何做基础建设的。2.3 MAC 地址与 IP 地址的核心区别这是网络学习最核心的基础也是面试高频考点我们用表格和通俗类比彻底讲透特性MAC 地址IP 地址所属层级数据链路层网络层核心作用局域网内相邻设备的精准寻址全网范围内的主机标识与路由规划长度与格式6 字节 48 位十六进制冒号分隔4 字节 32 位点分十进制可变性出厂固定理论不可修改可手动 / 动态配置随网络环境变化传输过程中的变化每经过一次路由转发源 / 目标 MAC 地址都会更新整个端到端传输过程中源 / 目标 IP 地址始终不变通俗类比目标 IP 地址 快递的最终收件地址「XX 省 XX 市 XX 小区 XX 室」是整个传输的最终目标全程不会改变目标 MAC 地址 快递的下一站转运中心地址每到一个转运中心就会更新只负责当前一段路程的精准送达。IP 地址是路径选择的核心依据MAC 地址是局域网内逐跳转发的核心依据二者协同完成了数据从源主机到目标主机的完整传输。三. 概念补充认知上的转变以太网 MAC地址3.1 更换视角你是如何看待局域网以太网以太网本身就是共享资源在任意一个时刻共享资源只能别被一台主机使用每台主机就是一个我们刚刚做的工作不就是在处理互斥与同步问题嘛。但是加锁感觉不重。还有一种就是令牌环网这是局域网历史上最著名的两套“规则”。如果说以太网Ethernet是大家在一个房间里自由发言谁行谁上撞了就停那么令牌环网Token Ring就是大家围成一圈坐好手里拿着麦克风令牌的人才能说话。作为研究 Linux 内核和系统编程的你理解这两者的区别不仅是网络基础更是理解介质访问控制MAC逻辑的好机会。这个所谓的令牌环网(也是临界资源)不就是我们之前的锁令牌嘛从内核与底层开发的视角来看驱动处理在 Linux 内核中以太网驱动net/ethernet处理的是极其异步的任务。而令牌环网内核代码中仍有net/802/tr.c等痕迹虽然已过时则需要严格的定时器和状态机来管理令牌。确定性需求虽然以太网赢了商用市场但在一些实时工业控制领域如 EtherCAT 或某些车载协议依然能看到“令牌”或者“时间片分发”思想的影子因为这些领域需要像令牌环网那样的“确定性延迟”。总结以太网靠着“大道至简”和交换机技术的引入消灭了物理冲突域打败了结构严谨但笨重的令牌环网。补充扩展测试抗压能力3.2 以太网为什么叫做以太网3.3 重新回归MAC地址的概念补充强化网络通信的一般“动力”是用户因为用户在顶层。自顶向下贯穿协议栈数据链路层在最底层。网卡本质是外设要把数据搬到内存自底向上交付给用户要发送数据用户交付到下一层每一层都要有一个协议交付的时候都要添加自己的报头大家还记得我们的快递单例子嘛我实际收到的会比我期望的多一点多的就是快递单也就是报头。封装就是把结构体变量拷贝到前面这个过程是自顶向下封装的过程3.4 概念回顾统一精准化表达统一精准化表述名词在应用层把报文(报头 有效载荷)叫做 请求与应答在传输层把报文叫做数据段在网络层把报文叫做数据报在链路层把报文叫做数据帧下三层属于内核传输网络链路逻辑上认为是两台主机在直接通信物理上不是中间的过程有挺多的。网络里面收到数据一定是硬件先收到也就是网卡。网卡一旦收到了数据帧中断触发报告CPU(CPU会知道中断号等)而OS一定能做到把数据从外设搬到内存(这个是体系结构支持的)四. 局域网通信的完整流程封装与解包两台主机在同一个局域网内的通信是网络传输的基础整个过程的核心就是数据的封装发送端与解包 分用接收端。4.1 基础夯实先搞懂 3 个核心概念我们用生活中「寄快递」的例子就能彻底理解这三个概念这是整个传输流程的基石报文 报头 有效载荷有效载荷你真正要寄的商品也就是业务需要传递的核心数据比如 “你好” 这句话报头快递面单是每层协议添加的控制信息包含「目标地址、源地址、上层协议类型、数据长度」等关键信息报文快递包裹面单 商品也就是每层协议最终传递的数据单元。不同层级的报文有专属名称传输层数据单元叫做段segment比如 TCP 段、UDP 段网络层数据单元叫做数据报datagram比如 IP 数据报数据链路层数据单元叫做帧frame比如以太网帧。封装与解包封装发送数据时数据自顶向下应用层→物理层每经过一层协议就添加该层的协议报头最终形成以太网帧发送到物理介质的过程解包接收数据时数据自底向上物理层→应用层每经过一层协议就剥掉对应层的报头根据报头信息将数据交付给上层协议的过程分用解包过程中根据报头中的「上层协议字段」将数据精准交付给对应上层协议处理的过程是解包的核心环节。4.2 发送端数据封装的完整过程我们以主机 A 向同一局域网的主机 B 发送 “你好” 为例拆解自顶向下的完整封装流程每一步都对应 TCP/IP 五层模型的核心操作。第一步应用层封装主机 A 的聊天应用生成业务数据 “你好”应用层协议如自定义聊天协议、HTTP 协议会给数据添加应用层报头形成应用层报文传递给传输层。应用层报头包含业务相关的控制信息比如消息类型、发送人 ID、消息长度等由开发者自定义或遵循标准应用层协议。第二步传输层封装传输层TCP/UDP收到应用层报文后添加TCP/UDP 报头形成传输层段传递给网络层。我们以 Linux 内核中 TCP 报头的结构体为例深度解析报头的核心内容// Linux内核中TCP协议报头的结构体定义 struct tcphdr { __be16 source; // 16位源端口号标识发送端进程 __be16 dest; // 16位目的端口号标识接收端进程 __be32 seq; // 32位序列号保证数据按序传输 __be32 ack_seq; // 32位确认序列号实现可靠传输的确认应答 #if defined(__LITTLE_ENDIAN_BITFIELD) __u16 res1:4, // 保留位 doff:4, // 数据偏移TCP报头长度 fin:1, // 关闭连接标志 syn:1, // 建立连接标志 rst:1, // 重置连接标志 psh:1, // 推送标志 ack:1, // 确认标志 urg:1, // 紧急指针标志 ece:1, // 拥塞通知标志 cwr:1; // 拥塞窗口缩减标志 #elif defined(__BIG_ENDIAN_BITFIELD) __u16 doff:4, res1:4, cwr:1, ece:1, urg:1, ack:1, psh:1, rst:1, syn:1, fin:1; #endif __be16 window; // 16位窗口大小实现流量控制 __sum16 check; // 16位校验和校验数据是否损坏 __be16 urg_ptr; // 16位紧急指针标识紧急数据的位置 };逐行核心解析source和dest核心分用字段16 位端口号唯一标识主机内的进程是数据最终能送达对应应用程序的关键seq和ack_seqTCP 可靠传输的核心通过序列号和确认号保证数据不丢失、不乱序标志位fin/syn/ack等TCP 连接管理、状态控制的核心window实现流量控制告诉对方自己的接收能力避免数据溢出check校验和接收端通过此字段判断数据在传输过程中是否损坏。第三步网络层封装网络层IP 协议收到传输层段后添加IP 报头形成 IP 数据报传递给数据链路层。同样我们看 Linux 内核中 IP 协议报头的结构体// Linux内核中IPv4协议报头的结构体定义 struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 version:4, // 4位版本号IPv4填4IPv6填6 ihl:4; // 4位首部长度IP报头的长度 #elif defined(__BIG_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #endif __u8 tos; // 8位服务类型定义数据的优先级、QoS特性 __be16 tot_len; // 16位总长度IP数据报的总长度报头载荷 __be16 id; // 16位标识唯一标识每个IP数据报用于分片重组 __be16 frag_off; // 16位分片偏移标识分片在原始报文中的位置 __u8 ttl; // 8位生存时间数据报的最大跳数每经过一个路由器减1 __u8 protocol; // 8位上层协议号标识载荷交给哪个上层协议6TCP17UDP __sum16 check; // 16位首部校验和校验IP报头是否损坏 __be32 saddr; // 32位源IP地址发送端主机IP __be32 daddr; // 32位目的IP地址接收端主机IP };逐行核心解析version和ihl标识 IP 协议版本和报头长度是解析 IP 数据报的基础saddr和daddr核心路由字段源 IP 和目标 IP 全程不变是端到端传输的核心标识protocol核心分用字段告诉网络层收到的数据应该交给传输层的 TCP 还是 UDP 协议ttl避免数据报在网络中无限循环是网络防环的核心机制tot_len、id、frag_off实现 IP 数据报的分片与重组适配不同链路层的最大传输单元MTU。第四步数据链路层封装数据链路层以太网协议收到 IP 数据报后添加以太网帧头和帧尾形成完整的以太网帧传递给物理层。以太网帧的核心结构| 字段 | 长度字节 || — | — ||目的 MAC 地址| 6 ||源 MAC 地址| 6 ||类型 / 长度| 2 ||数据| 46-1500 ||帧校验序列 FCS| 4 |核心字段解析目的 / 源 MAC 地址6 字节局域网内寻址的核心接收端通过目的 MAC 地址判断报文是否发给自己类型字段2 字节核心分用字段标识数据字段的上层协议0x0800IP 协议0x0806ARP 协议数据字段46-1500 字节承载上层的 IP 数据报也就是网络层交付的有效载荷FCS 帧尾4 字节循环冗余校验用于检测数据在传输过程中是否出现错误。第五步物理层发送物理层收到以太网帧后将二进制数据转换成光电信号通过网线、WiFi 等物理介质发送到局域网中。4.3 局域网内的报文广播与接收以太网是广播型网络主机 A 发送的以太网帧会被发送到局域网内的所有主机。每台主机的网卡收到报文后会首先检查以太网帧头中的目的MAC地址如果目的 MAC 地址和本机网卡的 MAC 地址不匹配直接将报文丢弃上层完全无感知如果目的 MAC 地址和本机 MAC 地址匹配就将以太网帧交给内核的数据链路层处理进入解包分用流程。4.4 接收端数据解包与分用的完整过程主机 B 收到匹配 MAC 地址的以太网帧后开始自底向上的解包与分用整个过程和封装完全相反核心是「逐层剥头、精准分用」。第一步数据链路层解包分用数据链路层剥掉以太网帧头和帧尾根据帧头中的类型字段判断上层协议如果类型字段是 0x0800说明载荷是 IP 数据报将数据交付给网络层的 IP 协议如果类型字段是 0x0806说明载荷是 ARP 报文将数据交付给 ARP 协议处理。第二步网络层解包分用网络层剥掉 IP 报头首先校验 IP 报头的校验和确认报头无损坏然后检查目标 IP 地址是否为本机 IP校验不通过或 IP 不匹配直接丢弃报文校验通过且 IP 匹配根据 IP 报头中的protocol 字段判断上层协议字段值为 6说明载荷是 TCP 段交付给传输层的 TCP 协议字段值为 17说明载荷是 UDP 段交付给传输层的 UDP 协议。第三步传输层解包分用传输层剥掉 TCP/UDP 报头校验和确认数据无损坏然后根据报头中的目的端口号找到本机中监听该端口的应用进程将最终的应用层数据交付给对应的进程。第四步应用层处理应用程序收到传输层交付的 “你好” 数据完成一次完整的局域网通信。核心认知在逻辑上我们认为「同层协议之间在直接通信」。比如主机 A 的 TCP 层认为自己在和主机 B 的 TCP 层直接对话主机 A 的 IP 层认为自己在和主机 B 的 IP 层直接对话。尽管物理上数据必须经过层层封装解包但协议的分层设计屏蔽了底层的传输细节让每层只需要关注自己的核心职责。4.5 深度理解协议栈图示说明4.6 Linux 内核中封装的底层实现在 Linux 内核中所有网络数据包的管理都基于核心结构体sk_buffSocket Buffer封装的本质就是对sk_buff的指针操作而非内存拷贝这也是内核高性能网络处理的核心。我们用内核伪代码看封装的核心逻辑// 内核封装IP报头的核心伪代码 struct sk_buff *skb; // 内核中的数据包管理结构体 struct iphdr *iph; // 1. 指针前移预留IP报头的空间skb_push返回新的指针位置 iph (struct iphdr *)skb_push(skb, sizeof(struct iphdr)); // 2. 填充IP报头的各个字段也就是填写快递面单 iph-version 4; // IPv4协议 iph-ihl 5; // 报头长度20字节 iph-tos 0; // 普通服务类型 iph-tot_len htons(skb-len); // 总长度转换为网络字节序 iph-id htons(atomic_inc_return(ip_id_counter)); // 唯一标识 iph-frag_off 0; // 不分片 iph-ttl 64; // 默认生存时间64跳 iph-protocol IPPROTO_TCP; // 上层协议为TCP iph-saddr source_ip; // 源IP地址 iph-daddr dest_ip; // 目标IP地址 iph-check 0; // 先清零后续计算校验和 iph-check ip_fast_csum((unsigned char *)iph, iph-ihl); // 计算校验和代码核心解析skb_push内核中最核心的封装操作将数据包的头部指针向低地址方向移动预留出对应协议报头的空间全程无需内存拷贝性能极高填充报头字段本质就是给协议结构体的成员变量赋值也就是我们说的「填写快递面单」字节序转换所有超过 1 字节的字段如 tot/_len、id都必须通过htons/htonl转换为大端格式的网络字节序保证不同架构的主机都能正确解析校验和计算用于接收端校验数据完整性是网络传输可靠性的基础保障。解包的操作则完全相反通过skb_pull将指针向高地址方向移动剥掉对应层的报头再根据报头字段进行分用处理。五. 跨网络传输的核心流程路由与逐跳转发5.1 路由器的核心作用路由器是工作在网络层的设备核心能力有两个路由选择通过路由表为 IP 数据报规划从源主机到目标主机的最优传输路径分组转发将收到的 IP 数据报根据路由表转发到下一跳的正确地址。简单来说路由器就是互联网中的「快递转运中心」负责把数据从一个局域网转发到另一个局域网最终送达目标主机所在的网络。5.2 跨网络传输的完整流程我们以源主机 AIP192.168.2.2MACMacA向跨网段的目标主机 BIP172.168.2.2MACMacB发送数据为例拆解完整的跨网传输流程核心是「IP 地址全程不变MAC 地址逐跳更新」。第一步源主机判断目标网段确定下一跳主机 A 的网络层通过子网掩码判断目标 IP172.168.2.2 和本机不在同一个局域网因此会将数据转发给默认网关路由器。主机 A 通过 ARP 协议获取网关的 MAC 地址 MacLeft然后进行封装IP 报头源 IP192.168.2.2目标 IP172.168.2.2全程不变以太网帧头源 MACMacA目标 MACMacLeft路由器的入站口 MAC。第二步路由器接收数据解包与路由查询路由器收到以太网帧后进行解包数据链路层剥掉帧头根据类型字段将 IP 数据报交付给网络层网络层检查 IP 报头的目标 IP 地址查询本地路由表找到到达 172.168.2.0 网段的下一跳地址确定出站口路由器将 IP 报头中的 TTL 字段减 1如果 TTL 变为 0直接丢弃报文避免循环转发。第三步路由器重新封装转发数据路由器确定下一跳后重新进行数据链路层封装IP 报头源 IP 和目标 IP 完全不变仅修改 TTL 字段以太网帧头源 MACMacRight路由器的出站口 MAC目标 MACMacB目标主机 B 的 MAC 地址。封装完成后将新的以太网帧发送到目标主机 B 所在的局域网。第四步目标主机接收数据解包分用主机 B 收到以太网帧后检查目标 MAC 地址匹配开始自底向上的解包分用最终将数据交付给对应的应用进程完成跨网络通信。关键细节如果跨网传输需要经过多个路由器那么每经过一个路由器都会重复「解包→路由查询→重新封装」的过程源 / 目标 IP 全程不变而源 / 目标 MAC 地址会在每一跳都更新为当前路段的入站 / 出站 MAC 地址。5.3 IP 网络层的核心意义 网络通信的宏观流程IP 网络层的存在为整个互联网提供了统一的网络虚拟层它完美屏蔽了底层不同网络的硬件差异无论是以太网、令牌环网、光纤网络还是 WiFi 无线网络无论底层的物理介质和数据链路层协议有多大差异只要都实现了 IP 协议就能实现互联互通。这就是互联网能够连接全球数十亿设备的核心底层逻辑IP 协议统一了全网的通信标准而路由技术实现了数据在全球范围内的精准转发。六. 核心考点总结面试高频MAC 地址和 IP 地址的区别所属层级、核心作用、传输过程中的变化以及二者的通俗类比数据封装与解包的完整流程TCP/IP 五层模型中每一层封装添加的报头核心字段以及解包分用的核心依据以太网帧的核心结构目的 / 源 MAC 地址、类型字段的作用MTU 的含义TCP 报头和 IP 报头的核心字段端口号、序列号、确认号、源 / 目标 IP、协议号、TTL 等字段的作用局域网通信的原理CSMA/CD 机制、碰撞域的概念、广播与接收的判断逻辑跨网络传输的流程路由器的作用、逐跳转发的过程、IP 与 MAC 地址在路由过程中的变化分用的核心逻辑以太网类型字段、IP 协议号、TCP/UDP 端口号在分用过程中的作用Linux 内核sk_buff的核心作用skb_push/skb_pull在封装解包中的意义。结尾 我是草莓熊 Lotso若这篇技术干货帮你打通了学习中的卡点 【关注】跟我一起深耕技术领域从基础到进阶见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好需要时直接查、随时用 【评论】分享你的经验或疑问比如曾踩过的技术坑一起交流避坑 ️ 【投票】用你的选择助力社区内容方向告诉大家哪个技术点最该重点拆解 技术之路难免有困惑但同行的人会让前进更有方向愿我们都能在自己专注的领域里一步步靠近心中的技术目标结语网络传输的底层逻辑看似复杂实则核心就是「封装与解包」两个动作以及「MAC 地址负责局域网内逐跳转发IP 地址负责全网路由规划」两个核心原则。对于 Linux 后端开发者来说理解这整套传输流程绝不仅仅是为了应付面试。当你线上遇到 TCP 握手失败、数据丢包、跨网访问超时等问题时只有吃透了底层传输原理才能精准定位问题出在哪一层、哪个环节当你开发高性能网络服务时也只有理解了内核的数据包处理流程才能写出更高效的代码做更精准的性能优化。网络编程的上限永远取决于你对底层原理的理解深度。✨把这些内容吃透超牛的放松下吧✨ʕ˘ᴥ˘ʔづきらど《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取/direct/4fd5acecbff8471098d6b027b62f45d5.png#pic_center)学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取