学IT吧 精品IT资源库

 找回密码
 立即注册
查看: 131|回复: 1

[网络安全] 从0手写TCP/IP网络协议栈

[复制链接]

1596

主题

1596

帖子

6413

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6413
发表于 2024-9-17 10:49:59 | 显示全部楼层 |阅读模式
af324170054b7a72b2ae71d4f13004b3.png

课程介绍:
本课程目标是展示如何从0行代码开始,编写一个小型的、移植性强的TCP/IP协议栈。整体代码量10000行代码,300+课时,约90个小时。

本课程将详细讲解TCP/IP协议中关注协议的原理,也关注如何用代码去实现这些协议。让你不仅知其然,也知其所以然。

通过该课程,你将不仅了解TCP/IP协议 本身,还将了解socket接口的实现原理,并学会使用这些接口进行网络编程。同时还将加强你对操作系统学习的使用。

课程最后有移植到了STM32F407(ARM芯片)以及x86操作系统的移植,代码里有涉及到特定网卡芯片的寄存器操作

课程目录:
章节1:课程概述试看
课时1视频课程介绍14:17可试看
课时2视频运行效果演示09:58可试看
课时3文本资料下载链接
课时4视频资料下载05:01
章节2:开发环境搭建
课时5视频整体开发环境介绍09:10
课时6视频Windows开发环境配置24:20
课时7视频Mac开发环境搭建30:33
课时8视频工程配置详解13:29
章节3:基本概念和原理试看
课时9视频基本概念和原理05:49可试看
课时10视频向网络上发送数据包20:16可试看
课时11视频接受数据包修改并发回12:01可试看
课时12视频创建线程(1)09:55可试看
课时13视频创建线程(2)12:20
课时14视频利用计数信号量同步线程17:04
课时15视频线程间的资源访问控制20:39可试看
课时16视频线程间的资源访问控制实例(1)- 循环缓存25:13
课时17视频线程间的资源访问控制实例(2)- 控制读速率12:14
课时18视频线程间的资源访问控制实例(3)- 控制写速率19:12
课时19视频利用套接字设计客户机(1)12:07
课时20视频利用套接字设计客户机(2)31:14
课时21视频利用套接字设计服务器26:07
课时22视频TCPIP体系结构简介21:40
章节4:整体结构设计
课时23视频 整体软件结构设计14:56
课时24视频协议栈的初始化07:21
课时25视频添加核心工作线程16:14
课时26视频创建数据包收发线程11:07
章节5:调试信息输出试看
课时27视频基本调试信息输出21:24可试看
课时28视频给调试输出增加颜色12:18
课时29视频按不同等级输出信息22:20
课时30视频增加assert断言12:18
章节6:设计通用的链表结构
课时31视频通用链表简介09:29
课时32视频创建结点结构06:30
课时33视频创建链表结构08:06
课时34视频头部插入结点20:15
课时35视频遍历链表24:27
课时36视频删除头部结点13:46
课时37视频尾部插入结点11:01
课时38视频插入到指定结点之后13:10
章节7:定长内存块管理
课时39视频协议栈中的存储管理问题07:25
课时40视频创建内存块管理器结构09:23
课时41视频添加锁结构06:28
课时42视频建立内存块链17:26
课时43视频分配内存块19:07
课时44视频释放内存块08:17
章节8:定长消息队列的实现
课时45视频定长消息队列简介08:48
课时46视频创建定长消息队列结构19:05
课时47视频初始化核心线程的消息通信11:28
课时48视频向工作线程发送消息16:56
课时49视频接受网卡线程发来的消息17:53
课时50视频销毁消息队列04:09
章节9: 网络数据包结构设计
课时51视频数据包结构设计简介16:10
课时52视频添加数据包结构18:53
课时53视频分配块链32:32
课时54视频分配指定大小的数据包17:30
课时55视频显示数据包信息23:26
课时56视频释放数据包05:15
课时57视频添加连续包头21:25
课时58视频移除包头14:59
课时59视频添加非连续包头10:08
课时60视频调整包大小(1) - 包的扩大14:43
课时61视频调整包大小(2) - 包的扩大19:24
课时62视频合并两个包10:53
课时63视频调整包头的连续性29:58
课时64视频增加包访问功能11:36
课时65视频写数据包24:53
课时66视频读数据包09:42
课时67视频定位数据包14:53
课时68视频数据包的拷贝16:44
课时69视频填充数据包10:11
课时70视频增加其它支持函数26:20
章节10:网络接口层设计
课时71视频网络接口的设计规划14:58
课时72视频添加网络接口结构19:12
课时73视频初始化网络接口层11:57
课时74视频打开网络接口13:47
课时75视频添加环回接口27:00
课时76视频将地址串转换为IP地址16:41
课时77视频设置网络接口的地址10:04
课时78视频激活环回接口08:35
课时79视频显示网络接口列表21:26
课时80视频关闭和设置缺省的网络接口09:52
课时81视频增加数据包队列的写入和读取13:57
课时82视频添加数据包发送接口19:01
章节11:支持以太网协议
课时83视频以太网协议设计简介12:14
课时84视频打开物理网络接口24:40
课时85视频接收数据并发给工作线程25:53
课时86视频将数据通过网络接口发出去16:51
课时87视频添加链路层接口21:17
课时88视频添加以太网接口12:31
课时89视频添加以太网包结构定义19:36
课时90视频网络大小端转换(1)-原理介绍12:13
课时91视频网络大小端转换(2)- 转换接口17:57
课时92视频网络大小端转换(3)- 检查大小端11:02
课时93视频以太网输入包的处理18:56
课时94视频显示以太网包结构19:27
课时95视频输出以太网数据包31:35
章节12:定时器的实现
课时96视频定时器设计简介06:46
课时97视频添加定时器结构10:54
课时98视频增加定时器测试代码09:33
课时99视频插入定时器(简单方法)10:51
课时100视频插入定时器(升序方法)23:23
课时101视频移除定时器15:07
课时102视频扫描定时器列表25:48
课时103视频让工作线程处理定时事件16:38
章节13:支持ARP协议
课时104视频ARP协议简介22:51
课时105视频向指定IP地址发送数据10:24
课时106视频初始化ARP模块15:51
课时107视频发送ARP请求22:28
课时108视频生成无回报(免费)ARP09:36
课时109视频获取ARP输入包14:56
课时110视频响应发来的ARP请求11:17
课时111视频显示ARP包结构和缓存表23:39
课时112视频分配和释放缓存表项11:57
课时113视频查找和插入表项32:56
课时114视频解析IP地址并发送包37:41
课时115视频给缓存表项增加超时重新请求32:33
课时116视频清空ARP表和查找ARP表35:53
章节14:初步支持IP协议
课时117视频IP协议简介22:20
课时118视频添加IP数据报头14:37
课时119视频接收输入的IP数据报08:34
课时120视频IP数据报的预处理检查(1)19:51
课时121视频IP数据报的预处理检查(2)25:18
课时122视频使用校验和检查包头正确性19:00
课时123视频IP数据报分解处理23:57
课时124视频显示IP包内容09:41
课时125视频发送IP数据报27:12
课时126视频增加IP包发送检验和计算24:55
章节15:支持ICMP协议
课时127视频ICMP协议简介09:20
课时128视频ICMP模块初始化08:06
课时129视频ICMP输入处理26:25
课时130视频响应ping请求24:31
课时131视频用IP包更新ARP表14:06
课时132视频报告端口不可达30:00
章节16:IP数据报的分片与重组
课时133视频IP分片与重组介绍07:54
课时134视频分片与重组的初始化23:16
课时135视频分片结构的分配与释放12:49
课时136视频分片的查找与添加14:22
课时137视频显示分片列表17:22
课时138视频插入分片19:28
课时139视频数据报分片的重组28:24
课时140视频数据报分片发送28:13
课时141视频分片超时处理13:49
课时142视频校验和算法的调整18:55
章节17:设计自己的ping命令
课时143视频ping程序实现原理07:24
课时144视频添加ping结构与接口15:10
课时145视频实现ping的发送及响应29:49
课时146视频实现ping的响应结果输出16:14
课时147视频增加超时和命令行调用17:02
章节18:原始套接字 RAW Socket接口实现
课时148视频socket接口设计结构简介08:17
课时149视频请求核心工作线程执行功能函数18:28
课时150视频发送消息请求执行功能23:03
课时151视频定义自己的地址转换函数19:13
课时152视频实现自己的地址转换函数27:04
课时153视频定义socket接口08:31
课时154视频分配socket结构17:17
课时155视频发消息给工作线程19:29
课时156视频sock结构定义及初始化26:15
课时157视频建立RAW结构10:23
课时158视频创建raw结构块20:16
课时159视频 初始化数据发送接口20:49
课时160视频将数据包发送出去28:05
课时161视频初始化数据包接收18:39
课时162视频添加sock等待接口09:29
课时163视频实现各种等待接口13:20
课时164视频初始化sock等待结构20:33
课时165视频让接收能够等待11:46
课时166视频添加设置超时接口13:31
课时167视频开启读取超时15:59
课时168视频对IP数据报进行处理28:19
课时169视频实现对ping的响应27:28
课时170视频添加close接口10:41
课时171视频实现raw接口的关闭19:01
章节19:允许通过路由访问Internet
课时172视频访问外部网络的原理19:31
课时173视频设计基础的路由表结构07:04
课时174视频添加路由表项12:20
课时175视频删除路由05:25
课时176视频设置缺省路由17:04
课时177视频从路由表中找到合适的表项24:00
课时178视频通过路由器将数据包发往外部40:26
章节20:第20章 支持UDP协议
课时179视频UDP协议简介13:21
课时180视频创建UDP客户端30:02
课时181视频创建UDP回显服务器25:06
课时182视频UDP模块初始化07:55
课时183视频创建UDP套接字13:32
课时184视频UDP数据的发送处理14:25
课时185视频动态分配端口21:01
课时186视频实现UDP数据的发送11:38
课时187视频计算伪校验和20:59
课时188视频UDP数据包输入处理(1)29:21
课时189视频UDP数据包输入处理(2)24:45
课时190视频UDP读取的实现12:08
课时191视频关闭UDP套接字06:13
课时192视频增加connect接口(1)12:31
课时193视频增加connect接口(2)08:31
课时194视频增加send接口(1) - 基本接口实现07:18
课时195视频增加send接口(2) - 数据包发送实现12:29
课时196视频增加recv接口(1) - 基本接口实现03:44
课时197视频增加recv接口(2) - 数据包接收实现07:37
课时198视频增加bind接口(1) - 基本接口实现17:11
课时199视频增加bind接口(2) - 实现端口和地址的绑定33:26
课时200视频让原始套接字支持connect/recv/send/bind14:12
课时201视频UDP协议设计总结28:07
章节21:TCP协议之建立基本的链接
课时202视频TCP协议课程规划09:14
课时203视频TCP连接管理简介31:10
课时204视频TCP协议初始化07:03
课时205视频创建TCP套接字21:14
课时206视频接收输入的TCP包27:40
课时207视频发送reset复位包(1)30:36
课时208视频发送reset复位包(2)25:50
课时209视频几个TCP调试函数12:33
课时210视频增加connect/close回调函数04:05
课时211视频分配端口及检查连接的存在性21:49
课时212视频添加connect等待结构10:51
课时213视频收发窗口及序号初始化27:17
课时214视频发送SYN报文25:45
课时215视频设置TCP状态18:54
课时216视频寻找合适的TCP控制块11:20
课时217视频添加输入状态处理函数12:56
课时218视频响应SYN+ACK报文(1)-终止连接19:48
课时219视频响应SYN+ACK报文(2)-更新序号值19:06
课时220视频从SYN_SENT进入ESTABLISHED16:13
课时221视频从ESTABLISHED进入CLOSE-WAIT25:25
课时222视频从CLOSE_WAIT进入LAST_ACK17:48
课时223视频从LAST_ACK进入CLOSED08:28
课时224视频主动close进入FIN_WAIT_211:30
课时225视频从FIN_WAIT_2进入TIME_WAIT06:10
课时226视频TIME_WAIT输入处理08:30
课时227视频同时关闭,进入CLOSING(1)13:43
课时228视频同时关闭,进入CLOSING(2)06:26
课时229视频CLOSED状态处理及连接总结15:51
章节22:TCP数据传输及滑动窗口算法
课时230视频TCP数据发送介绍18:53
课时231视频初始化发送缓存12:11
课时232视频添加TCP发送的支持17:07
课时233视频将数据写入发送缓存10:31
课时234视频将部分数据发送出去18:27
课时235视频发送全部数据到对方18:33
课时236视频读取TCP选项(MSS)16:02
课时237视频TCP数据分段发送15:52
课时238视频TCP数据发送总结(1)11:17
课时239视频TCP数据发送总结(2)29:49
课时240视频添加接收缓存及接收介绍09:44
课时241视频添加下载测试代码13:46
课时242视频增加TCP读取函数10:59
课时243视频往接收缓存中写数据05:36
课时244视频将数据包中的数据写入缓存16:51
课时245视频从接收缓存读取数据(1)13:31
课时246视频从接收缓存读取数据(2)06:24
课时247视频半关闭时接收返回EOF16:29
课时248视频连接时写入选项MSS11:42
课时249视频通知对方自己的接收窗口大小21:15
课时250视频检查序号的正确性(1)18:43
课时251视频检查序号的正确性(2)28:03
课时252视频FIN与数据处理的先后顺序10:05
课时253视频TCP数据通信总结13:48
章节23:TCP保活机制的实现
课时254视频TCP保活机制简介11:23
课时255视频保活机制的具体功能演示09:53
课时256视频添加setsockopt函数支持08:13
课时257视频定义保活机制相关的变量23:08
课时258视频增加超时处理28:25
课时259视频发送keepalive报文19:57
章节24:TCP的被动打开实现
课时260视频被动打开与服务器运行13:46
课时261视频增加bind/listen/accept调用支持07:01
课时262视频处理listen和accept回调16:42
课时263视频实现tcp的bind调用23:47
课时264视频实现tcp的listen调用08:28
课时265视频实现tcp的accept调用09:19
课时266视频实现tcp_accept12:15
课时267视频listen状态下的输入处理(1)20:57
课时268视频listen状态下的输入处理(2)16:28
课时269视频syn_recved状态下输入处理17:17
课时270视频强制关闭tcp连接21:55
课时271视频tcp的timewait状态处理16:44
课时272视频一些修修补补18:13
章节25NS协议实现试看
课时273视频DNS协议及接口简介16:00
课时274视频添加gethostbyname接口13:14
课时275视频实现gethostbyname(1)23:55
课时276视频实现gethostbyname(2)17:20
课时277视频DNS模块初始化05:55
课时278视频允许解析localhost和IP地址10:06
课时279视频允许解析域名地址13:56
课时280视频构造DNS请求包(1)22:01
课时281视频构造DNS请求包(2)40:22
课时282视频获取DNS响应输入13:33
课时283视频添加请求id的处理09:21
课时284视频响应的基本检查33:43
课时285视频提取IP地址28:40
课时286视频通知应用与列表显示18:12
课时287视频初始化缓存表05:37
课时288视频缓存表的插入、删除与查找25:46可试看
课时289视频刷新DNS缓存表08:21
课时290视频多次重试DNS请求11:54
课时291视频DNS程序设计上的一个问题05:33
课时292视频DNS设计总结08:23
章节26:TCP重时重传处理
课时293视频TCP超时重传处理简介14:35
课时294视频增加重传相关数据09:57
课时295视频TCP输出状态机简介07:12
课时296视频添加不同输出状态下的事件处理函数14:30
课时297视频添加连接SYN的重传超时处理21:31
课时298视频实现SYN的重传23:24
课时299视频继续发送缓存中的数据19:05
课时300视频实现TCP数据的重传23:25
课时301视频TCP协议实现总结18:26
章节27:移植到x86操作系统
课时302视频移植到x86操作系统简介05:52
课时303视频移植到x86操作系统演示04:17
课时304视频windows网络环境搭建04:01
课时305视频在操作系统中加入工程源码08:08
课时306视频操作系统接口06:59
课时307视频网络初始化05:44
课时308视频增加系统调用06:55
课时309视频调整内存布局06:14
课时310视频RTL8139驱动实现28:45
课时311视频中断锁的处理08:34
章节28:移植到STM32(ARM内核)
课时312视频移植到STM32统简介04:16
课时313视频STM32F4移植运行效果演示06:35
课时314视频Keil工程源码组织分析06:18
课时315视频利用RTOS提供的操作系统接口09:32
课时316视频网络初始化08:31
课时317视频STM32网卡驱动处理
购买主题 本主题需向作者支付 88 学币 才能浏览
回复

使用道具 举报

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2024-11-5 20:18:55 | 显示全部楼层
谢谢分享,很有帮助,谢谢谢谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|学IT吧

GMT+8, 2024-12-24 00:56 , Processed in 0.090974 second(s), 23 queries .

学IT吧 www.xueit8.com X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表