第1章 课程概述 第2章 开发环境搭建 第3章 基本概念和原理 第4章 整体结构设计 第5章 调试信息输出 第6章 设计通用的链表结构 第7章 定长内存块管理 第8章 定长消息队列的实现 第9章 网络数据包结构设计 第10章 网络接口层设计 第11章 支持以太网协议 第12章 定时器的实现 第13章 支持ARP协议 第14章 初步支持IP协议 第15章 支持ICMP协议 第16章 IP数据报的分片与重组 第17章 设计自己的ping命令 第18章 原始套接字 RAW Socket接口实现 第19章 允许通过路由访问Internet 第20章 支持UDP协议 第21章 TCP协议之建立基本的第22章 TCP数据传输及滑动窗口算法 第23章 TCP保活机制的实现 第24章 TCP的被动打开实现 第25章 DNS协议实现 第26章 TCP重时重传处理 第27章 移植到x86操作系统 第28章 移植到STM32(ARM内核) diy-tcpip-master
李述铜从0手写,用10000+行代码实现TCP_IP协议栈10.57GB
第1章 课程概述55.65MB
001.第00.00 课程特点.mp45.34MB
002.第01.01 课程介绍.mp416.57MB
003.第01.02 资料下载.mp49.32MB
005.第01.03 运行效果演示.mp424.42MB
第2章 开发环境搭建153.53MB
001.第02.01 开发环境概述.mp411.8MB
002.第02.02 Windows开发环境配置.mp456.51MB
003.第02.03 Mac开发环境搭建.mp459.7MB
004.第02.05 工程配置详解.mp425.52MB
第3章 基本概念和原理407.38MB
001.第03.00 基本概念和原理.mp46.52MB
002.第03.01 向网络上发送数据包.mp438.24MB
003.第03.02 接受数据包修改并发回.mp420.62MB
004.第03.03 创建线程(1).mp411.7MB
005.第03.03 创建线程(2).mp423.46MB
006.第03.04 利用计数信号量同步线程.mp423.69MB
007.第03.05 线程间的资源访问控制.mp433.48MB
008.第03.06 线程间的资源访问控制实例(1)- 循环缓存.mp437.68MB
009.第03.06 线程间的资源访问控制实例(2)- 控制读速率.mp421.64MB
010.第03.06 线程间的资源访问控制实例(3)- 控制写速率.mp436.48MB
011.第03.09 利用套接字设计客户机(1).mp413.02MB
012.第03.09 利用套接字设计客户机(2).mp456.69MB
013.第03.10 利用套接字设计服务器.mp445.98MB
014.第03.11 TCPIP体系结构简介.mp438.18MB
第4章 整体结构设计86.73MB
001.第04.00 整体软件结构设计.mp428.46MB
002.第04.01 协议栈的初始化.mp412.06MB
003.第04.02 添加核心工作线程.mp428.03MB
004.第04.03 创建数据包收发线程.mp418.18MB
第5章 调试信息输出126.93MB
001.第05.01 基本调试信息输出.mp433.82MB
002.第05.02 给调试输出增加颜色.mp429.9MB
003.第05.03 按不同等级输出信息.mp440.4MB
004.第05.04增加assert断言.mp422.81MB
第6章 设计通用的链表结构163.85MB
001.第06.00 通用链表简介.mp416.4MB
002.第06.01 创建结点结构.mp410.37MB
003.第06.02 创建链表结构.mp412.13MB
004.第06.03 头部插入结点.mp429.12MB
005.第06.04 遍历链表.mp440.67MB
006.第06.06 删除头部结点.mp419.27MB
007.第06.06尾部插入结点.mp416.27MB
008.第06.07 插入到指定结点之后.mp419.63MB
第7章 定长内存块管理112.58MB
001.第07.00 协议栈中的存储管理问题.mp48.36MB
002.第07.01 创建内存块管理器结构.mp412.43MB
003.第07.02 添加锁结构.mp413.13MB
004.第07.03 建立内存块链.mp430.25MB
005.第07.04 分配内存块.mp433.39MB
006.第07.05 释放内存块.mp415.01MB
第8章 定长消息队列的实现128.2MB
001.第08.00 定长消息队列简介.mp49.9MB
002.第08.01 创建定长消息队列结构.mp430.51MB
003.第08.02 初始化核心线程的消息通信.mp419.26MB
004.第08.03 向工作线程发送消息.mp427.6MB
005.第08.04接受网卡线程发来的消息.mp433.66MB
006.第08.05 销毁消息队列.mp47.27MB
第9章 网络数据包结构设计631.59MB
001.第09.00 数据包结构设计简介.mp419.41MB
002.第09.01 添加数据包结构.mp430.17MB
003.第09.02 分配块链.mp456.97MB
004.第09.03 分配指定大小的数据包.mp429.96MB
005.第09.04 显示数据包信息.mp444.31MB
006.第09.05 释放数据包.mp412.03MB
007.第09.06 添加连续包头.mp438.97MB
008.第09.07 移除包头.mp426.88MB
009.第09.08 添加非连续包头.mp417.37MB
010.第09.09 调整包大小(1) - 包的扩大.mp425.18MB
011.第09.09 调整包大小(2) - 包的扩大.mp435.5MB
012.第09.10 合并两个包.mp417.91MB
013.第09.11 调整包头的连续性.mp454.44MB
014.第09.12 增加包访问功能.mp418.96MB
015.第09.13 写数据包.mp449.87MB
016.第09.14 读数据包.mp419.9MB
017.第09.15 定位数据包.mp428.27MB
018.第09.16 数据包的拷贝.mp428.66MB
019.第09.17 填充数据包.mp420.35MB
020.第09.18 增加其它支持函数.mp456.48MB
第10章 网络接口层设计337.06MB
001.第10.00 网络接口的设计规划.mp418.82MB
002.第10.01 添加网络接口结构.mp432.28MB
002.第10.01 添加网络接口结构_20240513222424.pptx4.5MB
003.第10.02 初始化网络接口层.mp419.15MB
004.第10.03 打开网络接口.mp426.66MB
005.第10.04 添加环回接口.mp451.28MB
006.第10.05 将地址串转换为IP地址.mp425.82MB
007.第10.06 设置网络接口的地址.mp418.48MB
008.第10.07 激活环回接口.mp416.52MB
009.第10.08 显示网络接口列表.mp442.33MB
010.第10.09 关闭和设置缺省的网络接口.mp422.01MB
011.第10.10 增加数据包队列的写入和读取.mp423.77MB
012.第10.11 添加数据包发送接口.mp435.43MB
第11章 支持以太网协议435.08MB
001.第11.00 以太网协议设计简介.mp417.35MB
002.第11.01 打开物理网络接口.mp450.31MB
003.第11.02 接收数据并发给工作线程.mp450.55MB
004.第11.03 将数据通过网络接口发出去.mp431.02MB
005.第11.04 添加链路层接口.mp440.37MB
006.第11.05 添加以太网接口.mp425MB
007.第11.06 添加以太网包结构定义.mp430.42MB
008.第11.07 网络大小端转换(1)-原理介绍.mp413.71MB
009.第11.07 网络大小端转换(2)- 转换接口.mp427.91MB
010.第11.07 网络大小端转换(3)- 检查大小端.mp417.05MB
011.第11.08 以太网输入包的处理.mp434.89MB
012.第11.09 显示以太网包结构.mp434.24MB
013.第11.10 输出以太网数据包.mp462.24MB
第12章 定时器的实现194.97MB
001.第12.00 定时器设计简介.mp47.31MB
002.第12.01 添加定时器结构.mp416.21MB
003.第12.02 增加定时器测试代码.mp416.68MB
004.第12.03 插入定时器(简单方法).mp417.65MB
005.第12.04 插入定时器(升序方法).mp436.91MB
006.第12.05移除定时器.mp424.69MB
007.第12.06 扫描定时器列表.mp443.45MB
008.第12.07 让工作线程处理定时事件.mp432.06MB
第13章 支持ARP协议578.72MB
001.第13.00 ARP协议简介.mp441.24MB
002.第13.01 向指定IP地址发送数据.mp423.06MB
003.第13.02 初始化ARP模块.mp423.45MB
004.第13.03 发送ARP请求.mp446.09MB
005.第13.04 生成无回报(免费)ARP.mp420.7MB
006.第13.05 获取ARP输入包.mp429.34MB
007.第13.06 响应发来的ARP请求.mp423.58MB
008.第13.07 显示ARP包结构和缓存表.mp446.97MB
009.第13.08 分配和释放缓存表项.mp423.38MB
010.第13.09 查找和插入表项.mp468.83MB
011.第13.10 解析IP地址并发送包.mp484.6MB
012.第13.11 给缓存表项增加超时重新请求.mp467.27MB
013.第13.12 清空ARP表和查找ARP表.mp480.22MB
第14章 初步支持IP协议359.33MB
001.第14.00 IP协议简介.mp427.81MB
002.第14.01 添加IP数据报头.mp425.64MB
003.第14.02 接收输入的IP数据报.mp416.25MB
004.第14.03 IP数据报的预处理检查(1).mp433.77MB
005.第14.03 IP数据报的预处理检查(2).mp447.23MB
006.第14.04 使用校验和检查包头正确性.mp437.3MB
007.第14.05 IP数据报分解处理.mp444.26MB
008.第14.06 显示IP包内容.mp420.23MB
009.第14.07 发送IP数据报.mp457.06MB
010.第14.08 增加IP包发送检验和计算.mp449.78MB
第15章 支持ICMP协议239.96MB
001.第15.00 ICMP协议简介.mp413.51MB
002.第15.01 ICMP模块初始化.mp415.08MB
003.第15.02 ICMP输入处理.mp450.88MB
004.第15.03 响应ping请求.mp453.32MB
005.第15.04 用IP包更新ARP表.mp436.4MB
006.第15.05 报告端口不可达.mp470.78MB
第16章 IP数据报的分片与重组258.1MB
001.第16.00 IP分片与重组介绍.mp49.03MB
002.第16.01 分片与重组的初始化.mp453.52MB
003.第16.02 分片结构的分配与释放.mp426.38MB
004.第16.03 分片的查找与添加.mp431.6MB
005.第16.04 显示分片列表.mp437.98MB
006.第16.05 插入分片.mp442.24MB
007.第16.06 数据报分片的重组.mp457.35MB
第17章 设计自己的ping命令171.38MB
001.第17.00 ping程序实现原理.mp47.98MB
002.第17.01 添加ping结构与接口.mp427.45MB
003.第17.02 实现ping的发送及响应.mp465.56MB
004.第17.03 实现ping的响应结果输出.mp435.95MB
005.第17.04 增加超时和命令行调用.mp434.42MB
第18章 原始套接字 RAW Socket接口实现847.29MB
001.第18.00 socket接口设计结构简介.mp49.84MB
002.第18.01 请求核心工作线程执行功能函数.mp431.61MB
003.第18.02 发送消息请求执行功能.mp447.69MB
004.第18.03 定义自己的地址转换函数接口.mp436.21MB
005.第18.04 实现自己的地址转换函数.mp451.11MB
006.第18.05 定义socket接口.mp413.93MB
007.第18.06 分配socket结构.mp429.63MB
008.第18.07 发消息给工作线程分配socket结构.mp433.61MB
009.第18.08 sock结构定义及初始化.mp450.11MB
010.第18.09 建立RAW结构.mp417.57MB
011.第18.10 创建raw结构块.mp439.95MB
012.第18.11 初始化数据发送接口.mp440.97MB
013.第18.12 将数据包发送出去.mp457.79MB
014.第18.13 初始化数据包接收.mp438.28MB
015.第18.14 添加sock等待接口.mp417.36MB
016.第18.15 实现各种等待接口.mp423.52MB
017.第18.16 初始化sock等待结构.mp440.29MB
018.第18.17 让接收能够等待.mp425.25MB
019.第18.18 添加超时设置接口.mp427.25MB
020.第18.19 开启读取超时.mp433.67MB
021.第18.20 IP数据包输入处理.mp458.71MB
022.第18.21 实现对ping的响应.mp459.15MB
023.第18.22 添加close接口.mp422.11MB
024.第18.23 实现raw接口的关闭.mp441.69MB
第19章 允许通过路由访问Internet259.1MB
001.第19.00 访问外部网络的原理.mp428.4MB
002.第19.01 设计基础的路由表结构.mp416MB
003.第19.02 添加路由表项.mp427.73MB
004.第19.03 删除路由.mp413.25MB
005.第19.04 设置缺省路由.mp437.45MB
006.第19.05 从路由表中找到合适的表项.mp440.85MB
007.第19.06 通过路由器将数据包发往外部.mp495.42MB
第20章 支持UDP协议879.96MB
001.第20.00 UDP协议简介.mp416.37MB
002.第20.01 创建UDP客户端.mp463.48MB
003.第20.02 创建UDP回显服务器.mp453.9MB
004.第20.03 UDP模块初始化.mp413.63MB
005.第20.04 创建UDP套接字.mp429.18MB
006.第20.05 UDP数据的发送处理.mp430.31MB
007.第20.06 动态分配端口.mp436.9MB
008.第20.07 实现UDP数据的发送.mp422.1MB
009.第20.08 计算伪校验和.mp437.15MB
010.第20.09 UDP输入的处理(1).mp455.29MB
011.第20.10 UDP输入的处理(2).mp451.03MB
012.第20.11 UDP数据读取的实现.mp426.13MB
013.第20.12 关闭UDP套接字.mp413.93MB
014.第20.13 增加connect接口(1).mp424.99MB
015.第20.13 增加connect接口(2).mp420.11MB
016.第20.13 增加connect接口(3).mp451.64MB
017.第20.14 增加send接口(1).mp417.36MB
018.第20.14 增加send接口(2).mp436.9MB
019.第20.17 增加recv接口(1).mp410.12MB
020.第20.18 增加recv接口(2).mp421.07MB
021.第20.19 增加bind接口(1).mp440.67MB
022.第20.20 增加bind接口(2).mp478.47MB
023.第20.21 让原始套接字支持connectrecvsend.mp449.53MB
024.第20.22 UDP协议设计总结.mp479.68MB
第21章 TCP协议之建立基本的链接926.9MB
001.第21.00 TCP连接管理简介.mp435.44MB
002.第21.00 TCP协议课程规划.mp411.86MB
003.第21.01 TCP协议初始化.mp413.58MB
004.第21.02 创建TCP套接字.mp441.6MB
005.第21.03 接收输入的TCP包.mp454.38MB
006.第21.04 发送reset复位包(1).mp461.22MB
007.第21.04 发送reset复位包(2).mp446.95MB
008.第21.05 几个TCP调试函数.mp423.81MB
009.第21.06 增加connectclose回调函数.mp49.72MB
010.第21.07 分配端口及检查连接的存在性.mp445.36MB
011.第21.08 添加connect等待结构.mp423.36MB
012.第21.09 收发窗口及序号初始化.mp451.3MB
013.第21.10 发送SYN报文.mp454.71MB
014.第21.11 设置TCP状态.mp439.14MB
015.第21.12 寻找合适的TCP控制块.mp423.58MB
016.第21.13 添加输入状态处理函数.mp427.38MB
017.第21.14 响应SYN_ACK报文(1)-终止连接.mp441.88MB
018.第21.14 响应SYN_ACK报文(2)-更新序号值.mp438.31MB
019.第21.15 从SYN_SENT进入ESTABLISHED.mp433.43MB
020.第21.16 从ESTABLISHED进入CLOSE-WAIT.mp452.77MB
021.第21.17 从CLOSE_WAIT进入LAST_ACK.mp441.01MB
022.第21.18 从LAST_ACK进入CLOSED.mp421.93MB
023.第21.19 主动close进入FIN_WAIT_2.mp428.15MB
024.第21.20 从FIN_WAIT_2进入TIME_WAIT.mp415.33MB
025.第21.21 TIME_WAIT输入处理.mp417.65MB
026.第21.22 同时关闭,进入CLOSING(1).mp428.36MB
027.第21.22 同时关闭,进入CLOSING(2).mp416.61MB
028.第21.23 CLOSED状态处理及连接总结.mp428.07MB
第22章 TCP数据传输及滑动窗口算法795.55MB
001.第22.00 TCP数据发送介绍.mp421.57MB
002.第22.01 初始化发送缓存.mp421.66MB
003.第22.02 添加TCP发送的支持.mp439.47MB
004.第22.03 将数据写入发送缓存.mp422.77MB
005.第22.04 将部分数据发送出去.mp436.79MB
006.第22.05 发送全部数据到对方.mp438.43MB
007.第22.06 读取TCP选项(MSS).mp434.44MB
008.第22.07 TCP数据分段发送.mp439.42MB
009.第22.08 TCP数据发送总结(1).mp416.87MB
010.第22.08 TCP数据发送总结(2).mp466.92MB
011.第22.09 添加接收缓存及接收介绍.mp412.4MB
012.第22.10 添加下载测试代码.mp428.54MB
013.第22.11 增加TCP读取函数.mp426.17MB
014.第22.12 往接收缓存中写数据.mp411.75MB
015.第22.13 将数据包中的数据写入缓存.mp433.82MB
016.第22.14 从接收缓存读取数据(1).mp428.24MB
017.第22.14 从接收缓存读取数据(2).mp415.56MB
018.第22.15 半关闭时接收返回EOF.mp435.53MB
019.第22.16 连接时写入选项MSS.mp428.39MB
020.第22.17 通知对方自己的接收窗口大小.mp464.93MB
021.第22.18 检查序号的正确性(1).mp446.43MB
022.第22.18 检查序号的正确性(2).mp476.61MB
023.第22.19 FIN与数据处理的先后顺序.mp424.76MB
024.第22.20 TCP数据通信总结.mp424.09MB
第23章 TCP保活机制的实现268.22MB
001.第23.00 TCP保活机制简介.mp413.83MB
002.第23.01 保活机制的具体功能演示.mp434.07MB
003.第23.02 添加setsockopt函数支持.mp423.48MB
004.第23.03 定义保活机制相关的变量.mp460.46MB
005.第23.04 增加超时处理.mp473.94MB
006.第23.05 发送keepalive报文.mp462.42MB
第24章 TCP的被动打开实现556.97MB
001.第24.00 被动打开与服务器运行.mp419.51MB
002.第24.01 增加bind_listen_accept调用支持.mp418.48MB
003.第24.02 处理listen和accept回调.mp446.6MB
004.第24.03 实现tcp的bind调用.mp460.27MB
005.第24.04 实现tcp的listen调用.mp425.08MB
006.第24.05 实现tcp的accept调用.mp425.19MB
007.第24.06 实现tcp_accept.mp433.75MB
008.第24.07 listen状态下的输入处理(1).mp457.29MB
009.第24.07 listen状态下的输入处理(2).mp444.47MB
010.第24.08 syn_recved状态下输入处理.mp451.23MB
011.第24.09 强制关闭tcp连接.mp462.7MB
012.第24.10 tcp的timewait状态处理.mp444.08MB
013.第24.11 一些修修补补.mp449.94MB
014.第24.12 TCP补动打开总结.mp418.39MB
第25章 DNS协议实现1.01GB
001.第25.00 DNS协议及接口简介.mp424.58MB
002.第25.01 添加gethostbyname接口.mp434.32MB
003.第25.02 实现gethostbyname(1).mp434.32MB
004.第25.02 实现gethostbyname(2).mp442.49MB
005.第25.03 DNS模块初始化.mp4108.06MB
006.第25.04 允许解析localhost和IP地址.mp423.38MB
007.第25.05 允许解析域名地址.mp4143.47MB
008.第25.06 构造DNS请求包(1).mp449.76MB
009.第25.06 构造DNS请求包(2).mp4101.99MB
010.第25.08 获取DNS响应输入.mp438.92MB
011.第25.09 添加请求id的处理.mp446.16MB
012.第25.10 响应的基本检查.mp428.64MB
013.第25.11 提取IP地址.mp467.81MB
014.第25.12 通知应用与列表显示.mp4143.62MB
015.第25.13 初始化缓存表.mp415.95MB
016.第25.14 缓存表的插入、删除与查找.mp470.4MB
017.第25.15 刷新DNS缓存表.mp41.52MB
018.第25.16 多次重试DNS请求.mp422.73MB
019.第25.17 DNS程序设计上的一个问题.mp418.38MB
020.第25.18 DNS设计总结.mp417.42MB
第26章 TCP重时重传处理388.66MB
001.第26.00 TCP超时重传处理简介.mp431.25MB
002.第26.01 增加重传相关数据.mp422.05MB
003.第26.02 TCP输出状态机简介.mp412.7MB
004.第26.03 添加不同输出状态下的事件处理函数.mp435.48MB
005.第26.04 添加连接SYN的重传超时处理.mp453.89MB
006.第26.05 实现SYN的重传.mp468.94MB
007.第26.07 继续发送缓存中的数据.mp461.7MB
008.第26.07 实现TCP数据的重传.mp469.2MB
009.第26.08 TCP协议实现总结.mp433.46MB
第27章 移植到x86操作系统237.3MB
001.第27.00 移植到x86操作系统.mp49.02MB
002.第27.01 移植到x86操作系统演示.mp410.77MB
003.第27.02 windows网络环境搭建.mp49.64MB
004.第27.03 在操作系统中加入工程源码.mp416.25MB
005.第27.04 操作系统接口.mp416.81MB
006.第27.05 网络初始化.mp415.16MB
007.第27.06 增加系统调用.mp417.74MB
008.第27.07 调整内存布局.mp413.07MB
009.第27.08 RTL8139驱动实现.mp499.49MB
010.第27.09 中断锁的处理.mp429.35MB
第28章 移植到STM32(ARM内核)139.6MB
001.第28.00 移植到STM32统简介.mp47.69MB
002.第28.01 STM32F4移植运行效果演示.mp438.92MB
003.第28.02 Keil工程源码组织分析.mp414.52MB
004.第28.03 利用RTOS提供的操作系统接口.mp423.43MB
005.第28.04 网络初始化.mp421.18MB
006.第28.05 STM32网卡驱动处理.mp433.86MB
diy-tcpip-master53.44MB
diy-tcpip-master.rar53.44MB