如果你在招聘网站上搜过"网络协议开发",会发现一个尴尬的现实:岗位不多,但每一个都要求你真的懂协议栈内部怎么运转,而不是只会调 socket API。这门课面向的就是这个断层——它不讲"TCP 三次握手是哪三次"这种面试题层面的知识,而是带你从零实现一个能收发数据、能管理内存、能调试排错的通信层。学不学,取决于你下一步想做什么。
它解决的是哪类工作场景
日常写业务代码的人,很少需要自己实现协议栈。但以下几种情况会把这件事推到面前:嵌入式设备上跑不了完整的 Linux 网络栈,需要自己裁剪或重写一套轻量通信层;做网关、代理、消息中间件时,要在用户态接管数据包的组装与解析;做性能优化时,发现瓶颈在内存拷贝和队列调度,改应用层代码已经无济于事。这些场景的共同点是,你得对"一个字节从网卡到应用"的完整链路有掌控力,而不是把它当黑盒。
课程的内容组织明显是冲着这类需求去的。它没有停在协议格式讲解,而是花了相当篇幅处理工程实现里的硬骨头:数据包结构怎么设计才方便扩展,内存块怎么定长管理避免碎片,消息队列怎么保证定长收发不出错,通用链表怎么抽出来复用。这些不是协议理论,而是把协议跑起来必须写的代码。
学完能独立做什么
按课程节奏走完,你应该能独立完成一个可运行的用户态通信层原型:定义自己的数据包格式并完成打包解包;实现一套定长内存池来管理收发缓冲区;用消息队列串起收包、处理、发包三个环节;给这套东西加上可开关的调试输出,方便定位问题。换句话说,你拿到的不只是知识点,而是一套可以移植到自己项目里改的骨架。
需要说清楚的是,这门课不负责把你送进大厂网络组。它解决的是"从不会到能动手"这一段,剩下的是靠你在真实项目里踩坑积累。如果你的目标只是理解 TCP 原理应付面试,市面上的图文资料足够了,没必要花时间写代码。
资料适合什么基础
建议具备的条件:能熟练使用 C 语言,理解指针和结构体内存布局;知道 socket 编程的基本流程;对操作系统里的进程、内存、中断有概念。不要求你事先读过 RFC,课程会从结构设计讲起。如果 C 语言只停留在考试水平,前期会比较吃力,因为内存管理和链表这两块几乎没有回避空间。
- 适合:嵌入式开发、中间件开发、想从应用层往底层走的后端工程师。
- 不太适合:完全没有 C 基础、只做前端或纯业务开发、想快速拿证的人。
- 预期投入:需要跟着动手写,只看不练的话,后面几章会接不上。
怎么用这份资料
建议按顺序推进,不要跳章。整体结构设计放在前面是有道理的,它决定了后面数据包、内存、队列怎么衔接。每章的资料先看一遍说明,理解设计意图,再自己动手实现一遍,遇到卡壳的地方回头对照。调试信息输出那一章容易被当成配角,实际上它是你后面排查问题的唯一手段,值得认真对待。
如果你是带着具体项目来的,可以边学边把课程里的结构往自己的场景上套,比如把定长内存块换成适合你数据量的规格。这种改法比单纯抄一遍代码收获大得多。
课程目录
第9章 网络数据包结构设计327 集
- 020.第09.18 增加其它支持函数_41506_1671.mp4
- [56.5 MB] 019.第09.17 填充数据包_41506_3698.mp4
- [20.4 MB] 018.第09.16 数据包的拷贝_41506_6857.mp4
- [28.7 MB] 017.第09.15 定位数据包_41506_3707.mp4
- [28.3 MB] 016.第09.14 读数据包_41506_1705.mp4
- [19.9 MB] 015.第09.13 写数据包_41506_8013.mp4
- [49.9 MB] 014.第09.12 增加包访问功能_41506_8403.mp4
- [19.0 MB] 013.第09.11 调整包头的连续性_41506_8867.mp4
- [54.4 MB] 010.第09.09 调整包大小(1) - 包的扩大_41506_5498.mp4
- [25.2 MB] 011.第09.09 调整包大小(2) - 包的扩大_41506_1055.mp4
- [35.5 MB] 012.第09.10 合并两个包_41506_7526.mp4
- [17.9 MB] 009.第09.08 添加非连续包头_41506_7301.mp4
- [17.4 MB] 008.第09.07 移除包头_41506_1073.mp4
- [26.9 MB] 007.第09.06 添加连续包头_41506_4485.mp4
- [39.0 MB] 006.第09.05 释放数据包_41506_8211.mp4
- [12.0 MB] 004.第09.03 分配指定大小的数据包_41506_3243.mp4
- [30.0 MB] 005.第09.04 显示数据包信息_41506_4214.mp4
- [44.3 MB] 003.第09.02 分配块链_41506_9588.mp4
- [57.0 MB] 第9章 网络数据包结构设计资料.png [493.5 KB] 002.第09.01 添加数据包结构_41506_5401.mp4
- [30.2 MB] 001.第09.00 数据包结构设计简介_41506_8297.mp4
- [19.4 MB] 📁 第8章 定长消息队列的实现 005.第08.04接受网卡线程发来的消息_41506_9863.mp4
- [33.7 MB] 004.第08.03 向工作线程发送消息_41506_9082.mp4
- [27.6 MB] 003.第08.02 初始化核心线程的消息通信_41506_8414.mp4
- [19.3 MB] 002.第08.01 创建定长消息队列结构_41506_7570.mp4
- [30.5 MB] 001.第08.00 定长消息队列简介_41506_1676.mp4
- [9.9 MB] 006.第08.05 销毁消息队列_41506_2078.mp4
- [7.3 MB] 第8章 定长消息队列的实现必看.png [493.5 KB] 📁 第7章 定长内存块管理 006.第07.05 释放内存块_41506_4148.mp4
- [15.0 MB] 005.第07.04 分配内存块_41506_6080.mp4
- [33.4 MB] 004.第07.03 建立内存块链_41506_3013.mp4
- [30.3 MB] 003.第07.02 添加锁结构_41506_9682.mp4
- [13.1 MB] 002.第07.01 创建内存块管理器结构_41506_7284.mp4
- [12.4 MB] 001.第07.00 协议栈中的存储管理问题_41506_4095.mp4
- [8.4 MB] 第7章 定长内存块管理说明.zip
- [1.8 MB] 📁 第6章 设计通用的链表结构 008.第06.07 插入到指定结点之后_41506_3478.mp4
- [19.6 MB] 005.第06.04 遍历链表_41506_7802.mp4
- [40.7 MB] 007.第06.06尾部插入结点_41506_3661.mp4
- [16.3 MB] 006.第06.06 删除头部结点_41506_5778.mp4
- [19.3 MB] 004.第06.03 头部插入结点_41506_4690.mp4
- [29.1 MB] 001.第06.00 通用链表简介_41506_5085.mp4
- [16.4 MB] 003.第06.02 创建链表结构_41506_8304.mp4
- [12.1 MB] 002.第06.01 创建结点结构_41506_4363.mp4
- [10.4 MB] 第6章 设计通用的链表结构文档.png [493.5 KB] 📁 第5章 调试信息输出 004.第05.04增加assert断言_41506_4744.mp4
- [22.8 MB] 003.第05.03 按不同等级输出信息_41506_7014.mp4
- [40.4 MB] 002.第05.02 给调试输出增加颜色_41506_1020.mp4
- [29.9 MB] 001.第05.01 基本调试信息输出_41506_6682.mp4
- [33.8 MB] 第5章 调试信息输出资料.png [493.5 KB] 📁 第4章 整体结构设计 004.第04.03 创建数据包收发线程_41506_2933.mp4
- [18.2 MB] 003.第04.02 添加核心工作线程_41506_7756.mp4
- [28.0 MB] 002.第04.01 协议栈的初始化_41506_3357.mp4
- [12.1 MB] 001.第04.00 整体软件结构设计_41506_9462.mp4
- [28.5 MB] 第4章 整体结构设计资料.zip
- [1.8 MB] 📁 第3章 基本概念和原理 014.第03.11 TCPIP体系结构简介_41506_1110.mp4
- [38.2 MB] 012.第03.09 利用套接字设计客户机(2_41506_3297.mp4
- [56.7 MB] 013.第03.10 利用套接字设计服务器_41506_4194.mp4
- [46.0 MB] 011.第03.09 利用套接字设计客户机(1_41506_6426.mp4
- [13.0 MB] 009.第03.06 线程间的资源访问控制实例(2)- 控制读速率_41506_1277.mp4
- [21.6 MB] 008.第03.06 线程间的资源访问控制实例(1)- 循环缓存_41506_9217.mp4
- [37.7 MB] 010.第03.06 线程间的资源访问控制实例(3)- 控制写速率_41506_7028.mp4
- [36.5 MB] 005.第03.03 创建线程(2_41506_2078.mp4
- [23.5 MB] 007.第03.05 线程间的资源访问控制_41506_7221.mp4
- [33.5 MB] 006.第03.04 利用计数信号量同步线程_41506_5964.mp4
- [23.7 MB] 003.第03.02 接受数据包修改并发回_41506_8760.mp4
- [20.6 MB] 004.第03.03 创建线程(1_41506_5012.mp4
- [11.7 MB] 002.第03.01 向网络上发送数据包_41506_5622.mp4
- [38.2 MB] 001.第03.00 基本概念和原理_41506_5413.mp4
- [6.5 MB] 📁 第2章 开发环境搭建 003.第02.03 Mac开发环境搭建_41506_8173.mp4
- [59.7 MB] 004.第02.05 工程配置详解_41506_9160.mp4
- [25.5 MB] 002.第02.02 Windows开发环境配置_41506_8302.mp4
- [56.5 MB] 001.第02.01 开发环境概述_41506_6803.mp4
- [11.8 MB] 📁 第28章 移植到STM32(ARM内核) 006.第28.05 STM32网卡驱动处理_41506_6864.mp4
- [33.9 MB] 004.第28.03 利用RTOS提供的操作系统接口_41506_8227.mp4
- [23.4 MB] 005.第28.04 网络初始化_41506_9441.mp4
- [21.2 MB] 002.第28.01 STM32F4移植运行效果演示_41506_9429.mp4
- [38.9 MB] 003.第28.02 Keil工程源码组织分析_41506_6430.mp4
- [14.5 MB] 第28章 移植到STM32(ARM内核)必看.zip
- [1.8 MB] 001.第28.00 移植到STM32统简介_41506_5864.mp4
- [7.7 MB] 📁 第27章 移植到x86操作系统 010.第27.09 中断锁的处理_41506_2781.mp4
- [29.3 MB] 009.第27.08 RTL8139驱动实现_41506_4754.mp4
- [99.5 MB] 008.第27.07 调整内存布局_41506_3176.mp4
- [13.1 MB] 007.第27.06 增加系统调用_41506_8709.mp4
- [17.7 MB] 006.第27.05 网络初始化_41506_9875.mp4
- [15.2 MB] 004.第27.03 在操作系统中加入工程源码_41506_4864.mp4
- [16.3 MB] 005.第27.04 操作系统接口_41506_5588.mp4
- [16.8 MB] 003.第27.02 windows网络环境搭建_41506_5960.mp4
- [9.6 MB] 002.第27.01 移植到x86操作系统演示_41506_2468.mp4
- [10.8 MB] 001.第27.00 移植到x86操作系统_41506_2859.mp4
- [9.0 MB] 📁 第26章 TCP重时重传处理 009.第26.08 TCP协议实现总结_41506_4109.mp4
- [33.5 MB] 007.第26.07 继续发送缓存中的数据_41506_8472.mp4
- [61.7 MB] 008.第26.07 实现TCP数据的重传_41506_1860.mp4
- [69.2 MB] 006.第26.05 实现SYN的重传_41506_2131.mp4
- [68.9 MB] 005.第26.04 添加连接SYN的重传超时处理_41506_8716.mp4
- [53.9 MB] 004.第26.03 添加不同输出状态下的事件处理函数_41506_6180.mp4
- [35.5 MB] 003.第26.02 TCP输出状态机简介_41506_3208.mp4
- [12.7 MB] 001.第26.00 TCP超时重传处理简介_41506_6634.mp4
- [31.3 MB] 002.第26.01 增加重传相关数据_41506_8525.mp4
- [22.0 MB] 第26章 TCP重时重传处理文档.png [493.5 KB] 📁 第25章 DNS协议实现 020.第25.18 DNS设计总结_41506_5998.mp4
- [17.4 MB] 016.第25.14 缓存表的插入、删除与查找_41506_4332.mp4
- [70.4 MB] 019.第25.17 DNS程序设计上的一个问题_41506_5472.mp4
- [18.4 MB] 018.第25.16 多次重试DNS请求_41506_5396.mp4
- [22.7 MB] 014.第25.12 通知应用与列表显示_41506_3284.mp4
- [143.6 MB] 015.第25.13 初始化缓存表_41506_7622.mp4
- [16.0 MB] 013.第25.11 提取IP地址_41506_8977.mp4
- [67.8 MB] 012.第25.10 响应的基本检查_41506_3135.mp4
- [28.6 MB] 011.第25.09 添加请求id的处理_41506_6465.mp4
- [46.2 MB] 009.第25.06 构造DNS请求包(2_41506_5253.mp4
- [102.0 MB] 010.第25.08 获取DNS响应输入_41506_7719.mp4
- [38.9 MB] 008.第25.06 构造DNS请求包(1_41506_7234.mp4
- [49.8 MB] 007.第25.05 允许解析域名地址_41506_2164.mp4
- [143.5 MB] 005.第25.03 DNS模块初始化_41506_4656.mp4
- [108.1 MB] 006.第25.04 允许解析localhost和IP地址_41506_1949.mp4
- [23.4 MB] 004.第25.02 实现gethostbyname(2_41506_2142.mp4
- [42.5 MB] 003.第25.02 实现gethostbyname(1_41506_2926.mp4
- [34.3 MB] 第25章 DNS协议实现资料.png [493.5 KB] 002.第25.01 添加gethostbyname接口_41506_2083.mp4
- [34.3 MB] 001.第25.00 DNS协议及接口简介_41506_5493.mp4
- [24.6 MB] 017.第25.15 刷新DNS缓存表_41506_4459.mp4
- [1.5 MB] 📁 第24章 TCP的被动打开实现 014.第24.12 TCP补动打开总结_41506_1780.mp4
- [18.4 MB] 012.第24.10 tcp的timewait状态处理_41506_3653.mp4
- [44.1 MB] 013.第24.11 一些修修补补_41506_6323.mp4
- [49.9 MB] 011.第24.09 强制关闭tcp连接_41506_3981.mp4
- [62.7 MB] 010.第24.08 syn_recved状态下输入处理_41506_9570.mp4
- [51.2 MB] 008.第24.07 listen状态下的输入处理(1_41506_2551.mp4
- [57.3 MB] 009.第24.07 listen状态下的输入处理(2_41506_3312.mp4
- [44.5 MB] 007.第24.06 实现tcp_accept_41506_4902.mp4
- [33.7 MB] 006.第24.05 实现tcp的accept调用_41506_9423.mp4
- [25.2 MB] 004.第24.03 实现tcp的bind调用_41506_2447.mp4
- [60.3 MB] 005.第24.04 实现tcp的listen调用_41506_4766.mp4
- [25.1 MB] 003.第24.02 处理listen和accept回调_41506_2209.mp4
- [46.6 MB] 002.第24.01 增加bind_listen_accept调用支持_41506_3061.mp4
- [18.5 MB] 001.第24.00 被动打开与服务器运行_41506_6784.mp4
- [19.5 MB] 第24章 TCP的被动打开实现必看.png [493.5 KB] 📁 第23章 TCP保活机制的实现 006.第23.05 发送keepalive报文_41506_3564.mp4
- [62.4 MB] 005.第23.04 增加超时处理_41506_7531.mp4
- [73.9 MB] 004.第23.03 定义保活机制相关的变量_41506_4541.mp4
- [60.5 MB] 003.第23.02 添加setsockopt函数支持_41506_8684.mp4
- [23.5 MB] 002.第23.01 保活机制的具体功能演示_41506_3959.mp4
- [34.1 MB] 001.第23.00 TCP保活机制简介_41506_6619.mp4
- [13.8 MB] 第23章 TCP保活机制的实现说明.png [493.5 KB] 📁 第22章 TCP数据传输及滑动窗口算法 023.第22.19 FIN与数据处理的先后顺序_41506_5393.mp4
- [24.8 MB] 024.第22.20 TCP数据通信总结_41506_1122.mp4
- [24.1 MB] 022.第22.18 检查序号的正确性(2_41506_8254.mp4
- [76.6 MB] 021.第22.18 检查序号的正确性(1_41506_6857.mp4
- [46.4 MB] 020.第22.17 通知对方自己的接收窗口大小_41506_5276.mp4
- [64.9 MB] 018.第22.15 半关闭时接收返回EOF_41506_1366.mp4
- [35.5 MB] 019.第22.16 连接时写入选项MSS_41506_2105.mp4
- [28.4 MB] 017.第22.14 从接收缓存读取数据(2_41506_1592.mp4
- [15.6 MB] 016.第22.14 从接收缓存读取数据(1_41506_3800.mp4
- [28.2 MB] 015.第22.13 将数据包中的数据写入缓存_41506_1607.mp4
- [33.8 MB] 013.第22.11 增加TCP读取函数_41506_6177.mp4
- [26.2 MB] 014.第22.12 往接收缓存中写数据_41506_9420.mp4
- [11.8 MB] 012.第22.10 添加下载测试代码_41506_6437.mp4
- [28.5 MB] 011.第22.09 添加接收缓存及接收介绍_41506_7180.mp4
- [12.4 MB] 010.第22.08 TCP数据发送总结(2_41506_5976.mp4
- [66.9 MB] 009.第22.08 TCP数据发送总结(1_41506_4848.mp4
- [16.9 MB] 008.第22.07 TCP数据分段发送_41506_5922.mp4
- [39.4 MB] 007.第22.06 读取TCP选项(MSS_41506_6984.mp4
- [34.4 MB] 第22章 TCP数据传输及滑动窗口算法说明.zip
- [1.8 MB] 006.第22.05 发送全部数据到对方_41506_5612.mp4
- [38.4 MB] 004.第22.03 将数据写入发送缓存_41506_1956.mp4
- [22.8 MB] 005.第22.04 将部分数据发送出去_41506_2080.mp4
- [36.8 MB] 003.第22.02 添加TCP发送的支持_41506_8543.mp4
- [39.5 MB] 001.第22.00 TCP数据发送介绍_41506_6074.mp4
- [21.6 MB] 002.第22.01 初始化发送缓存_41506_5467.mp4
- [21.7 MB] 📁 第21章 TCP协议之建立基本的链接 028.第21.23 CLOSED状态处理及连接总结_41506_8327.mp4
- [28.1 MB] 027.第21.22 同时关闭,进入CLOSING(2_41506_1576.mp4
- [16.6 MB] 026.第21.22 同时关闭,进入CLOSING(1_41506_2622.mp4
- [28.4 MB] 023.第21.19 主动close进入FIN_WAIT_2_41506_8742.mp4
- [28.1 MB] 025.第21.21 TIME_WAIT输入处理_41506_2650.mp4
- [17.7 MB] 024.第21.20 从FIN_WAIT_2进入TIME_WAIT_41506_5406.mp4
- [15.3 MB] 022.第21.18 从LAST_ACK进入CLOSED_41506_6341.mp4
- [21.9 MB] 020.第21.16 从ESTABLISHED进入CLOSE-WAIT_41506_9256.mp4
- [52.8 MB] 021.第21.17 从CLOSE_WAIT进入LAST_ACK_41506_9710.mp4
- [41.0 MB] 019.第21.15 从SYN_SENT进入ESTABLISHED_41506_5694.mp4
- [33.4 MB] 018.第21.14 响应SYN_ACK报文(2)-更新序号值_41506_3678.mp4
- [38.3 MB] 017.第21.14 响应SYN_ACK报文(1)-终止连接_41506_7009.mp4
- [41.9 MB] 016.第21.13 添加输入状态处理函数_41506_8978.mp4
- [27.4 MB] 015.第21.12 寻找合适的TCP控制块_41506_1284.mp4
- [23.6 MB] 013.第21.10 发送SYN报文_41506_6398.mp4
- [54.7 MB] 014.第21.11 设置TCP状态_41506_8284.mp4
- [39.1 MB] 012.第21.09 收发窗口及序号初始化_41506_1681.mp4
- [51.3 MB] 011.第21.08 添加connect等待结构_41506_5159.mp4
- [23.4 MB] 第21章 TCP协议之建立基本的链接资料.zip
- [1.8 MB] 010.第21.07 分配端口及检查连接的存在性_41506_8181.mp4
- [45.4 MB] 009.第21.06 增加connectclose回调函数_41506_9763.mp4
- [9.7 MB] 007.第21.04 发送reset复位包(2_41506_9237.mp4
- [47.0 MB] 008.第21.05 几个TCP调试函数_41506_3517.mp4
- [23.8 MB] 006.第21.04 发送reset复位包(1_41506_9215.mp4
- [61.2 MB] 005.第21.03 接收输入的TCP包_41506_2754.mp4
- [54.4 MB] 004.第21.02 创建TCP套接字_41506_7995.mp4
- [41.6 MB] 002.第21.00 TCP协议课程规划_41506_6739.mp4
- [11.9 MB] 003.第21.01 TCP协议初始化_41506_9216.mp4
- [13.6 MB] 001.第21.00 TCP连接管理简介_41506_8446.mp4
- [35.4 MB] 📁 第20章 支持UDP协议 024.第20.22 UDP协议设计总结_41506_8025.mp4
- [79.7 MB] 022.第20.20 增加bind接口(2_41506_8976.mp4
- [78.5 MB] 023.第20.21 让原始套接字支持connectrecvsend_41506_4050.mp4
- [49.5 MB] 021.第20.19 增加bind接口(1_41506_9246.mp4
- [40.7 MB] 020.第20.18 增加recv接口(2_41506_8419.mp4
- [21.1 MB] 019.第20.17 增加recv接口(1_41506_4498.mp4
- [10.1 MB] 018.第20.14 增加send接口(2_41506_7602.mp4
- [36.9 MB] 015.第20.13 增加connect接口(2_41506_4968.mp4
- [20.1 MB] 017.第20.14 增加send接口(1_41506_9369.mp4
- [17.4 MB] 016.第20.13 增加connect接口(3_41506_4368.mp4
- [51.6 MB] 014.第20.13 增加connect接口(1_41506_3936.mp4
- [25.0 MB] 012.第20.11 UDP数据读取的实现_41506_6715.mp4
- [26.1 MB] 011.第20.10 UDP输入的处理(2_41506_2002.mp4
- [51.0 MB] 010.第20.09 UDP输入的处理(1_41506_4257.mp4
- [55.3 MB] 009.第20.08 计算伪校验和_41506_6242.mp4
- [37.2 MB] 013.第20.12 关闭UDP套接字_41506_7079.mp4
- [13.9 MB] 008.第20.07 实现UDP数据的发送_41506_3170.mp4
- [22.1 MB] 006.第20.05 UDP数据的发送处理_41506_9303.mp4
- [30.3 MB] 007.第20.06 动态分配端口_41506_3792.mp4
- [36.9 MB] 005.第20.04 创建UDP套接字_41506_5561.mp4
- [29.2 MB] 004.第20.03 UDP模块初始化_41506_3617.mp4
- [13.6 MB] 003.第20.02 创建UDP回显服务器_41506_3104.mp4
- [53.9 MB] 002.第20.01 创建UDP客户端_41506_5688.mp4
- [63.5 MB] 001.第20.00 UDP协议简介_41506_5237.mp4
- [16.4 MB] 📁 第1章 课程概述 005.第01.03 运行效果演示_41506_5502.mp4
- [24.4 MB] 003.第01.02 资料下载_41506_4249.mp4
- [9.3 MB] 002.第01.01 课程介绍_41506_3606.mp4
- [16.6 MB] 第1章 课程概述说明.png [493.5 KB] 001.第00.00 课程特点_41506_1612.mp4
- [5.3 MB] 📁 第19章 允许通过路由访问Internet 007.第19.06 通过路由器将数据包发往外部_41506_6069.mp4
- [95.4 MB] 006.第19.05 从路由表中找到合适的表项_41506_3753.mp4
- [40.9 MB] 005.第19.04 设置缺省路由_41506_8546.mp4
- [37.4 MB] 003.第19.02 添加路由表项_41506_8259.mp4
- [27.7 MB] 004.第19.03 删除路由_41506_1981.mp4
- [13.3 MB] 002.第19.01 设计基础的路由表结构_41506_8375.mp4
- [16.0 MB] 001.第19.00 访问外部网络的原理_41506_8849.mp4
- [28.4 MB] 第19章 允许通过路由访问Internet必看.png [493.5 KB] 📁 第18章 原始套接字 RAW Socket接口实现 024.第18.23 实现raw接口的关闭_41506_3627.mp4
- [41.7 MB] 023.第18.22 添加close接口_41506_5868.mp4
- [22.1 MB] 022.第18.21 实现对ping的响应_41506_5189.mp4
- [59.1 MB] 021.第18.20 IP数据包输入处理_41506_6220.mp4
- [58.7 MB] 020.第18.19 开启读取超时_41506_5381.mp4
- [33.7 MB] 019.第18.18 添加超时设置接口_41506_6138.mp4
- [27.2 MB] 017.第18.16 初始化sock等待结构_41506_8658.mp4
- [40.3 MB] 018.第18.17 让接收能够等待_41506_1963.mp4
- [25.3 MB] 016.第18.15 实现各种等待接口_41506_6455.mp4
- [23.5 MB] 015.第18.14 添加sock等待接口_41506_6333.mp4
- [17.4 MB] 014.第18.13 初始化数据包接收_41506_2093.mp4
- [38.3 MB] 013.第18.12 将数据包发送出去_41506_4058.mp4
- [57.8 MB] 012.第18.11 初始化数据发送接口_41506_7178.mp4
- [41.0 MB] 010.第18.09 建立RAW结构_41506_2640.mp4
- [17.6 MB] 011.第18.10 创建raw结构块_41506_1994.mp4
- [40.0 MB] 009.第18.08 sock结构定义及初始化_41506_7662.mp4
- [50.1 MB] 008.第18.07 发消息给工作线程分配socket结构_41506_2964.mp4
- [33.6 MB] 007.第18.06 分配socket结构_41506_8510.mp4
- [29.6 MB] 第18章 原始套接字 RAW Socket接口实现必看.zip
- [1.8 MB] 005.第18.04 实现自己的地址转换函数_41506_8490.mp4
- [51.1 MB] 006.第18.05 定义socket接口_41506_2228.mp4
- [13.9 MB] 004.第18.03 定义自己的地址转换函数接口_41506_3768.mp4
- [36.2 MB] 003.第18.02 发送消息请求执行功能_41506_7385.mp4
- [47.7 MB] 002.第18.01 请求核心工作线程执行功能函数_41506_4030.mp4
- [31.6 MB] 001.第18.00 socket接口设计结构简介_41506_7542.mp4
- [9.8 MB] 📁 第17章 设计自己的ping命令 003.第17.02 实现ping的发送及响应_41506_4086.mp4
- [65.6 MB] 005.第17.04 增加超时和命令行调用_41506_6850.mp4
- [34.4 MB] 004.第17.03 实现ping的响应结果输出_41506_1404.mp4
- [35.9 MB] 002.第17.01 添加ping结构与接口_41506_8064.mp4
- [27.5 MB] 第17章 设计自己的ping命令说明.zip
- [1.8 MB] 001.第17.00 ping程序实现原理_41506_5584.mp4
- [8.0 MB] 📁 第16章 IP数据报的分片与重组 007.第16.06 数据报分片的重组_41506_3035.mp4
- [57.3 MB] 006.第16.05 插入分片_41506_5707.mp4
- [42.2 MB] 005.第16.04 显示分片列表_41506_5470.mp4
- [38.0 MB] 004.第16.03 分片的查找与添加_41506_2016.mp4
- [31.6 MB] 003.第16.02 分片结构的分配与释放_41506_7465.mp4
- [26.4 MB] 002.第16.01 分片与重组的初始化_41506_9892.mp4
- [53.5 MB] 001.第16.00 IP分片与重组介绍_41506_8381.mp4
- [9.0 MB] 📁 第15章 支持ICMP协议 006.第15.05 报告端口不可达_41506_1840.mp4
- [70.8 MB] 003.第15.02 ICMP输入处理_41506_5410.mp4
- [50.9 MB] 004.第15.03 响应ping请求_41506_1257.mp4
- [53.3 MB] 005.第15.04 用IP包更新ARP表_41506_2801.mp4
- [36.4 MB] 001.第15.00 ICMP协议简介_41506_1754.mp4
- [13.5 MB] 002.第15.01 ICMP模块初始化_41506_2676.mp4
- [15.1 MB] 📁 第14章 初步支持IP协议 010.第14.08 增加IP包发送检验和计算_41506_2102.mp4
- [49.8 MB] 009.第14.07 发送IP数据报_41506_9765.mp4
- [57.1 MB] 008.第14.06 显示IP包内容_41506_1425.mp4
- [20.2 MB] 007.第14.05 IP数据报分解处理_41506_9979.mp4
- [44.3 MB] 006.第14.04 使用校验和检查包头正确性_41506_8304.mp4
- [37.3 MB] 005.第14.03 IP数据报的预处理检查(2_41506_5118.mp4
- [47.2 MB] 004.第14.03 IP数据报的预处理检查(1_41506_9150.mp4
- [33.8 MB] 003.第14.02 接收输入的IP数据报_41506_1157.mp4
- [16.3 MB] 002.第14.01 添加IP数据报头_41506_3650.mp4
- [25.6 MB] 001.第14.00 IP协议简介_41506_3931.mp4
- [27.8 MB] 第14章 初步支持IP协议文档.zip
- [1.8 MB] 📁 第13章 支持ARP协议 013.第13.12 清空ARP表和查找ARP表_41506_5309.mp4
- [80.2 MB] 011.第13.10 解析IP地址并发送包_41505_3851.mp4
- [84.6 MB] 012.第13.11 给缓存表项增加超时重新请求_41505_8916.mp4
- [67.3 MB] 010.第13.09 查找和插入表项_41505_6072.mp4
- [68.8 MB] 008.第13.07 显示ARP包结构和缓存表_41505_3164.mp4
- [47.0 MB] 009.第13.08 分配和释放缓存表项_41505_2346.mp4
- [23.4 MB] 007.第13.06 响应发来的ARP请求_41505_7224.mp4
- [23.6 MB] 006.第13.05 获取ARP输入包_41505_9773.mp4
- [29.3 MB] 004.第13.03 发送ARP请求_41505_3171.mp4
- [46.1 MB] 005.第13.04 生成无回报(免费)ARP_41505_5078.mp4
- [20.7 MB] 003.第13.02 初始化ARP模块_41505_4681.mp4
- [23.4 MB] 001.第13.00 ARP协议简介_41505_2946.mp4
- [41.2 MB] 002.第13.01 向指定IP地址发送数据_41505_4429.mp4
- [23.1 MB] 第13章 支持ARP协议文档.png [493.5 KB] 📁 第12章 定时器的实现 007.第12.06 扫描定时器列表_41505_1365.mp4
- [43.5 MB] 008.第12.07 让工作线程处理定时事件_41505_8090.mp4
- [32.1 MB] 006.第12.05移除定时器_41505_1811.mp4
- [24.7 MB] 004.第12.03 插入定时器(简单方法_41505_9041.mp4
- [17.7 MB] 005.第12.04 插入定时器(升序方法_41505_1053.mp4
- [36.9 MB] 003.第12.02 增加定时器测试代码_41505_5006.mp4
- [16.7 MB] 002.第12.01 添加定时器结构_41505_6029.mp4
- [16.2 MB] 第12章 定时器的实现文档.zip
- [1.8 MB] 001.第12.00 定时器设计简介_41505_3724.mp4
- [7.3 MB] 📁 第11章 支持以太网协议 013.第11.10 输出以太网数据包_41505_7762.mp4
- [62.2 MB] 012.第11.09 显示以太网包结构_41505_5013.mp4
- [34.2 MB] 011.第11.08 以太网输入包的处理_41505_9754.mp4
- [34.9 MB] 009.第11.07 网络大小端转换(2)- 转换接口_41505_5926.mp4
- [27.9 MB] 010.第11.07 网络大小端转换(3)- 检查大小端_41505_2589.mp4
- [17.0 MB] 008.第11.07 网络大小端转换(1)-原理介绍_41505_4682.mp4
- [13.7 MB] 007.第11.06 添加以太网包结构定义_41505_5501.mp4
- [30.4 MB] 005.第11.04 添加链路层接口_41505_3902.mp4
- [40.4 MB] 006.第11.05 添加以太网接口_41505_8638.mp4
- [25.0 MB] 004.第11.03 将数据通过网络接口发出去_41505_1997.mp4
- [31.0 MB] 003.第11.02 接收数据并发给工作线程_41505_6066.mp4
- [50.6 MB] 002.第11.01 打开物理网络接口_41505_1702.mp4
- [50.3 MB] 001.第11.00 以太网协议设计简介_41505_2969.mp4
- [17.4 MB] 第11章 支持以太网协议文档.zip
- [1.8 MB] 📁 第10章 网络接口层设计 006.第10.05 将地址串转换为IP地址_41505_5854.mp4
- [25.8 MB] 012.第10.11 添加数据包发送接口_41505_1923.mp4
- [35.4 MB] 010.第10.09 关闭和设置缺省的网络接口_41505_5878.mp4
- [22.0 MB] 011.第10.10 增加数据包队列的写入和读取_41505_4940.mp4
- [23.8 MB] 009.第10.08 显示网络接口列表_41505_9660.mp4
- [42.3 MB] 007.第10.06 设置网络接口的地址_41505_2109.mp4
- [18.5 MB] 008.第10.07 激活环回接口_41505_6368.mp4
- [16.5 MB] 005.第10.04 添加环回接口_41505_5300.mp4
- [51.3 MB] 004.第10.03 打开网络接口_41505_4924.mp4
- [26.7 MB] 003.第10.02 初始化网络接口层_41505_5885.mp4
- [19.2 MB] 002.第10.01 添加网络接口结构_41505_2758.mp4
- [32.3 MB] 001.第10.00 网络接口的设计规划_41505_1862.mp4
- [18.8 MB] 002.第10.01 添加网络接口结构_20240513222424_41505_9626.pptx [4.5 MB] 📁 diy-tcpip-master diy-tcpip-master资料.png [493.5 KB] 适合人群 网络工程师 软件开发者 IT爱好者 学习收获 掌握TCP/IP协议栈开发 提升网络通信能力 构建网络通信层 祝您学习愉快! 学有所成,前程似锦!






