第一部分 计算机网络软件编程训练要求与教学指导第1章 计算机网络课程内容、编程训练目的与教学指导 3
1.1 计算机网络课程特点与网络软件人才需求的形势 3
1.2 计算机网络技术的研究与发展 4
1.2.1 发展主线1:Internet技术 4
1.2.2 发展主线2:无线网络技术 6
1.2.3 发展主线3:网络安全技术 8
1.2.4 总结 9
1.3 《计算机网络高级教程》的相关内容安排 12
1.3.1 计算机网络技术的研究与发展 12
1.3.2 广域网技术 12
1.3.3 局域网技术 13
1.3.4 城域网技术 13
1.3.5 IPv4协议 13
1.3.6 IPv6协议 14
1.3.7 移动IP协议 14
1.3.8 TCP与UDP协议 14
1.3.9 网络应用和应用层协议 14
1.3.10 无线Ad hoc网络、无线传感器网络与无线网格网研究 15
1.3.11 网络安全与网络管理技术的研究 15
1.3.12 网络性能分析、网络模拟与开源工具包 15
1.4 网络软件编程课题训练目的与基本内容 16
1.4.1 基础类网络软件编程课题训练目的与基本内容 16
1.4.2 综合类网络软件编程课题训练目的与基本内容 19
1.4.3 提高类网络软件编程课题训练目的与基本内容 20
1.4.4 网络软件编程训练选题指导 26
第二部分 基础训练篇 31
第2章 Ethernet帧结构解析程序 31
2.1 编程训练目的 31
2.2 编程训练要求 31
2.3 相关知识 35
2.3.1 帧结构 35
2.3.2 Ethernet帧的接收流程分析 36
2.3.3 CRC校验 37
2.4 编程训练设计分析 40
2.4.1 程序设计思路及实现 40
2.4.2 主要流程图 44
2.5 扩展与提高 45
2.5.1 CRC-32校验查表法实现 45
2.5.2 Ethernet帧的发送流程分析 47
第3章 使用ARP协议获取局域网内活动主机物理地址程序 49
3.1 编程训练目的 49
3.2 编程训练要求 49
3.3 相关知识 50
3.3.1 ARP协议工作原理 50
3.3.2 ARP协议相关数据帧结构 51
3.4 编程训练设计分析 51
3.4.1 程序流程介绍 51
3.4.2 编程要点分析 51
3.5 扩展与提高 57
3.5.1 ARP欺骗 57
3.5.2 使用Windows自带API库实现类似功能 58
3.5.3 使用Windows API获得主机MAC地址 59
第4章 计算校验和程序 62
4.1 编程训练目的 62
4.2 编程训练要求 62
4.3 相关知识 63
4.3.1 网际校验和算法 63
4.3.2 网际校验和算法特性 64
4.3.3 计算举例 65
4.4 编程训练设计分析 67
4.4.1 程序设计思路及实现 67
4.4.2 程序流程图 68
4.5 扩展与提高 69
4.5.1 增量式算法的补码实现 69
4.5.2 对增量式算法的改进 70
第5章 IP包流量分析程序 72
5.1 编程训练目的 72
5.2 编程训练要求 72
5.3 相关知识 73
5.3.1 IP协议 73
5.3.2 IP数据报格式 74
5.4 编程训练设计分析 77
5.4.1 捕获IP数据包 77
5.4.2 统计IP数据包的信息 80
5.4.3 程序流程图 82
5.5 扩展与提高 83
5.5.1 使用Winpcap捕获数据包 84
5.5.2 使用map结构存储IP数据包信息 85
第6章 Tracert程序 88
6.1 编程训练目的 88
6.2 编程训练要求 88
6.3 相关知识 90
6.3.1 Tracert的实现原理 90
6.3.2 ICMP协议及报文格式 90
6.4 编程训练设计分析 93
6.4.1 核心代码及说明 93
6.4.2 程序流程图 99
6.5 扩展与提高 100
6.5.1 使用自行提供IP报头的方法发送ICMP报文 100
6.5.2 使用ICMP帮助函数库发送ICMP报文 100
第7章 IPv6报文封装及地址生成程序 103
7.1 编程训练目的 103
7.2 编程训练要求 103
7.3 相关知识 104
7.3.1 IPv6报头 104
7.3.2 IPv6扩展报头 106
7.3.3 IPv6地址 107
7.4 编程训练设计分析 112
7.4.1 IPv6基本报头的填充 113
7.4.2 IPv6地址生成算法 114
7.4.3 程序流程图 116
7.5 扩展与提高 117
7.5.1 用于IPv6的TCP/UDP伪报头 117
7.5.2 包含TCP报头的IPv6数据封装 118
第8章 TCP和UDP数据包发送程序 120
8.1 编程训练目的 120
8.2 编程训练要求 120
8.3 相关知识 121
8.3.1 UDP协议简介 121
8.3.2 TCP协议简介 121
8.4 编程训练设计分析 122
8.4.1 数据包头结构定义 122
8.4.2 填充数据包过程介绍 124
8.4.3 TCP/UDP协议网际校验和计算方法 125
8.5 扩展与提高 126
8.5.1 使用原始套接字完成题目要求 126
8.5.2 使用NDIS协议驱动发送自定义数据帧 127
第9章 基于C/S结构的套接字程序设计 130
9.1 编程训练目的 130
9.2 编程训练要求 130
9.3 相关知识 132
9.3.1 C/S结构网络模型 132
9.3.2 Windows Sockets编程简介 132
9.3.3 基本套接字API调用 134
9.3.4 典型编程调用时序图 136
9.4 编程训练设计分析 137
9.4.1 Server端结构设计及代码说明 138
9.4.2 Client端结构设计及代码说明 142
9.5 扩展与提高 143
9.5.1 Winsock的两种I/O模式 143
9.5.2 Windows Sockets下的4种编程模型 143
9.5.3 使用WSAAsynSelect进行异步I/O编程 146
第10章 滑动窗口协议模拟程序 149
10.1 编程训练目的 149
10.2 编程训练要求 149
10.3 相关知识 150
10.3.1 滑动窗口协议的流量控制 150
10.3.2 滑动窗口协议的差错控制 150
10.4 编程训练设计分析 152
10.4.1 协议模拟过程分析 152
10.4.2 滑动窗口协议基本算法 153
10.4.3 核心代码及其说明 156
10.5 扩展与提高 164
10.5.1 传输层与链路层滑动窗口协议比较 164
10.5.2 TCP滑动窗口协议的基本原理 164
第11章 Web Server程序 166
11.1 编程训练目的 166
11.2 编程训练要求 166
11.3 相关知识 167
11.3.1 HTTP的工作过程 167
11.3.2 HTTP的消息格式 168
11.3.3 HTTP 1.1的改进 171
11.4 编程训练设计分析 172
11.4.1 客户请求处理模块实现 172
11.4.2 响应生成发送模块实现 174
11.5 扩展与提高 177
11.5.1 HTTP认证机制 177
11.5.2 Basic认证的代码实现 180
第12章 无线局域网802.11协议CSMA/CA算法模拟程序 184
12.1 编程训练目的 184
12.2 编程训练要求 184
12.3 相关知识 185
12.3.1 802.11协议概述 185
12.3.2 CSMA/CA协议的工作流程 185
12.4 编程训练设计分析 186
12.4.1 主线程代码分析 186
12.4.2 数据接收线程代码分析 186
12.4.3 数据发送线程代码分析 187
12.5 扩展与提高 190
12.5.1 无线局域网的发展 190
12.5.2 IEEE 802.11b的主要优点 190
12.5.3 IEEE 802.11b无线网络包含组件 190
12.5.4 IEEE 802.11b运作模式 191
12.5.5 IEEE 802.11b运作基础 191
第13章 公钥密码实现程序 192
13.1 编程训练目的 192
13.2 编程训练要求 192
13.3 相关知识 193
13.3.1 密码学相关背景知识 193
13.3.2 RSA密码机制简介 195
13.4 编程训练设计分析 196
13.4.1 模乘运算和模幂运算模块 196
13.4.2 生成随机的大素数 197
13.4.3 求最大公约数 199
13.4.4 计算私钥 200
13.4.5 加密解密过程 200
13.5 扩展与提高 201
13.5.1 RSA安全性 201
13.5.2 其他公钥密码体系 202
13.5.3 对称密码体系简介 203
第三部分 综合训练篇 207
第14章 路由器基本功能实现程序 207
14.1 编程训练目的 207
14.2 编程训练要求 207
14.3 相关知识 209
14.3.1 路由器结构与功能 209
14.3.2 路由选择的基本原理 210
14.3.3 路由表 212
14.3.4 ICMP差错报文 214
14.4 编程训练设计分析 215
14.4.1 路由程序的设计 215
14.4.2 测试环境的搭建 227
14.5 扩展与提高 228
14.5.1 OSPF简介 229
14.5.2 OSPF协议工作原理 230
14.5.3 OSPF路由表的算法实现 232
第15章 FTP协议实现程序 235
15.1 编程训练目的 235
15.2 编程训练要求 235
15.3 相关知识 236
15.3.1 FTP协议简介 236
15.3.2 FTP命令简介 237
15.4 编程训练设计分析 238
15.4.1 程序总体结构分析 238
15.4.2 工作者线程函数介绍 240
15.5 扩展与提高 259
15.5.1 完成端口相关原理 259
15.5.2 Windows其他网络I/O传输程序架构比较 261
第16章 协议分析器程序 264
16.1 编程训练目的 264
16.2 编程训练要求 264
16.3 相关知识 265
16.3.1 协议分析器基本原理 265
16.3.2 TCP/IP分层体系结构 265
16.3.3 数据的封装与解析 266
16.4 编程训练设计分析 267
16.4.1 协议分析器总体结构设计 267
16.4.2 数据捕获模块 267
16.4.3 协议解析模块 270
16.5 扩展与提高 277
16.5.1 使用原始套接字方式完成数据捕获过程 277
16.5.2 在协议分析器中使用Winpcap的高级特性 278
第17章 综合扫描器程序 281
17.1 编程训练目的 281
17.2 编程训练要求 281
17.3 相关知识 282
17.3.1 ARP扫描 282
17.3.2 ICMP扫描 282
17.3.3 TCP扫描 282
17.3.4 UDP扫描 283
17.4 编程训练设计分析 284
17.4.1 ARP扫描实现 284
17.4.2 ICMP扫描实现 287
17.4.3 TCP Connect扫描实现 291
17.4.4 TCP SYN扫描实现 293
17.4.5 TCP FIN扫描实现 299
17.4.6 UDP扫描实现 301
17.5 扩展与提高 305
17.5.1 ICMP扫描扩展 305
17.5.2 TCP扫描扩展 306
17.5.3 UDP扫描扩展 307
17.5.4 扫描的其他应用 307
17.5.5 系统漏洞扫描简介 308
第四部分 提高训练篇 311
第18章 基于SNMP协议的网络拓扑发现程序 311
18.1 编程训练目的 311
18.2 编程训练要求 311
18.3 相关知识 312
18.3.1 SNMP协议简介 312
18.3.2 异步过程调用 314
18.4 编程训练设计分析 315
18.4.1 主体结构 315
18.4.2 功能模块简介 316
18.4.3 相关代码剖析 316
18.5 扩展与提高 325
18.5.1 其他网络管理协议简介 325
18.5.2 网络管理新技术 326
第19章 利用OpenSSL实现安全的Web Server程序 327
19.1 编程训练目的 327
19.2 编程训练要求 327
19.3 相关知识 328
19.3.1 SSL协议介绍 328
19.3.2 OpenSSL库 330
19.4 编程训练设计分析 335
19.4.1 程序设计思路及实现 335
19.4.2 Server端认证证书的生成 339
19.5 扩展与提高 340
19.5.1 客户端认证 340
19.5.2 基于IPSec的安全通信 341
第20章 简单防火墙程序 345
20.1 编程训练目的 345
20.2 编程训练要求 345
20.3 相关知识 346
20.3.1 防火墙简介 346
20.3.2 系统包过滤API介绍 347
20.4 编程训练设计分析 349
20.4.1 程序流程分析 349
20.4.2 核心代码分析 349
20.5 扩展与提高 353
20.5.1 基于API Hook的数据包过滤技术 353
20.5.2 基于SPI的数据包过滤技术 356
第21章 防火墙扩展功能程序 359
21.1 编程训练目的 359
21.2 编程训练要求 359
21.3 相关知识 360
21.3.1 Windows网络协议栈结构 360
21.3.2 Windows网络数据拦截技术综述 363
21.4 编程训练设计分析 366
21.4.1 程序流程分析 366
21.4.2 核心代码分析 367
21.5 扩展与提高 375
21.5.1 基于TDI过滤驱动的防火墙技术 375
21.5.2 基于NDIS中间层的数据包过滤技术 379
第22章 NS-2简单有线网络模拟程序 382
22.1 编程训练目的 382
22.2 编程训练要求 382
22.3 相关知识 383
22.3.1 NS-2简介及原理概述 383
22.3.2 NS-2的下载与安装 385
22.3.3 NS-2网络模拟的基本流程 386
22.3.4 NS-2学习方法 386
22.3.5 NS-2学习资源列表 388
22.4 编程训练设计分析 388
22.4.1 模拟场景描述 388
22.4.2 模拟脚本及其说明 389
22.4.3 模拟的Nam演示 392
22.4.4 模拟结果的统计分析 392
22.5 扩展与提高 397
22.5.1 有线网络中的Ethernet模拟 397
22.5.2 NS-2模拟脚本生成工具 399
第23章 使用NS-2模拟无线Ad hoc网络 400
23.1 编程训练目的 400
23.2 编程训练要求 400
23.3 相关知识 401
23.3.1 NS-2的无线网络模型 401
23.3.2 移动节点的创建 403
23.3.3 移动节点的运动 404
23.3.4 移动场景与流量场景的自动生成 404
23.4 编程训练设计分析 406
23.4.1 模拟场景描述 406
23.4.2 模拟脚本及其说明 406
23.4.3 模拟的Nam演示 410
23.4.4 模拟结果的统计分析 411
23.5 扩展与提高 415
23.5.1 使用场景生成器和流量产生器进行无线模拟 415
23.5.2 深入学习导读 416
23.5.3 一个NS-2无线模拟脚本生成工具 417
附录A Winpcap简介与使用说明 418
A.1 Winpcap简介 418
A.2 使用Winpcap编程的一般步骤 419
A.3 Winpcap动态库 419
附录B Windows Driver Module简介 423
附录C NS-2在Linux和Windows+Cygwin下的安装 425
参考文献 432