
本书是普通高等教育“十一五”国家级规划教材《计算机网络(第2版)》的配套教材,根据计算机网络与Internet基本概念、基本工作原理与实现技术学习的需要,参考国内外著名大学网络课程编程训练以及大型信息技术企业在员工网络软件编程训练中的相关资料与文献,总结提炼出13个网络软件编程题目,分为3个不同的难度级,力求做到“结合网络课程的教学过程,通过完成实际网络编程课题训练,加深对网络基本原理与实现方法的理解,掌握网络环境中软件编程的基本方法,逐步提高网络软件编程的能力”.
本书可以作为高等院校计算机、软件工程、电子信息类等专业以及相关专业的本科或专科学生学习计算机网络、网络软件编程技术的教材或参考文献,也可以作为从事计算机网络应用与信息技术的工程人员的参考资料。
FOREWORDInternet应用技术、无线网络技术与网络安全技术的研究与发展使得计算机网络技术进入到了一个更高的阶段,正在对社会产生着前所未有的影响。计算机网络已经和电力、电话一样,成为支持现代社会整体运行的基础设施。目前网络技术发展迅速,应用广泛,知识更新快,产业发展势头强劲,是一个充满活力与机遇的领域。
社会对网络人才的需求十分强烈,但是真正懂网络技术,具备深入网络协议内部的高层次网络应用系统设计和网络软件编程的软件人才非常缺乏,也是社会急需的高级人才。作者作为一名青年教师,从个人的发展经历中深深地体会到,仅通过课堂听课与课后复习的方法学习网络技术不可能达到真正“掌握”的目的。本人对网络理论知识的理解与实际动手能力的提高是在网络课程学习的基础上,通过参加科研工作和完成开发任务的过程中“悟”出来的。
作者在带本科毕业设计的过程中,发现很多计算机专业的本科学生编程能力不是很强,对网络编程更不入门。本科毕业生在求职过程中反映出的实际动手能力弱的缺陷,与课程教学过程中的硬件实验与软件编程训练严重不足的情况直接相关。要提高教学质量,提高学生就业的竞争力,必须加强实践环节的训练。目前,网络课程教学急需解决理论与实际的结合,加强学生实际工作能力的培养的问题。现代的软件都是运行在网络环境中,如果能将两者有机和紧密地结合起来,让学生通过网络软件编程的训练过程去加深对网络理论的理解,同时又能提高学生网络软件编程能力,作者认为这种训练是十分必要的。
基于这样的认识,作者听取了南开大学网络实验室老师和同学的意见,继承网络实验室多年科研工作经验与本科、研究生教学工作实践经验的基础上,根据计算机网络与Internet基本概念、基本工作原理与实现技术学习的需要,参考国内外知名大学网络课程编程训练与著名信息技术企业在员工网络软件编程训练中的相关资料与文献,构思了13个网络软件编程题目。软件编程题目的选择考虑不同协议层次的覆盖问题,同时将软件编程题目分为3个难度级,读者可以参考选题指导,根据不同的要求和不同的基础,有选择地、循序渐进地完成网络软件编程训练,实现“通过实际编程问题的训练,达到深入理解网络基本工作原理,掌握网络环境中软件编程方法,提高网络软件编程能力”的目的。
本书是普通高等教育“十一五”国家级规划教材《计算机网络(第2版)》的配套教材。第1章是网络软件编程的练习要求与教学指导。第2章是书中编程题目需要用到的Socket编程基础知识。在第3~第15章中每章对应一个编程题目,包括编程练习的目的、要求、相关知识、设计分析和练习内容。作者针对不同程度与不同要求的读者,对训练课题的选择与进度安排提出了建议。本书可以与主教材配套使用,也可以独立使用。由读者根据自身的基础与学习要求选择编程题目,循序渐进地学习和独立完成网络软件编程训练。完成本书编程题目不需要专门的网络环境与特殊的编程条件。
本书可以作为高等院校计算机、软件工程、电子信息类及相关专业的本科或专科学生学习计算机网络、网络软件编程技术的教材或参考文献,也可作为从事计算机网络应用与信息技术的工程人员继续学习和研发工作的参考资料。
作者在本书的编写过程中,得到南开大学信息技术科学学院网络与信息安全研究室的老师和同学们的很多支持和指导,特别感谢吴功宜教授、刘瑞挺教授、徐敬东教授、张建忠教授的指导和帮助。
限于作者学术水平与经验的不足,错误与不妥之处在所难免,诚恳地希望读者批评指正。
第1章 计算机网络软件编程练习要求与教学指导11.1 网络软件编程能力培养的重要性1
1.2 计算机网络软件编程的理论基础3
1.2.1 计算机网络知识结构3
1.2.2 网络软件编程需要掌握的网络知识4
1.2.3 教材章节与知识点结构的关系9
1.3 网络软件编程课题的练习目的与基本内容11
第2章 Socket编程基础知识15
2.1 Socket编程的基本概念15
2.1.1 套接字的概念15
2.1.2 套接字的分类16
2.2 Winsock网络编程接口18
2.2.1 Winsock的基本概念18
2.2.2 初始化与卸载Winsock20
2.2.3 基本Socket函数20
2.2.4 套接字地址结构25
第3章 Ethernet帧的封装与解析27
3.1 设计目的27
3.2 相关知识27
3.2.1 数据链路层的概念27
3.2.2 Ethernet帧的结构28
3.3 例题分析30
3.3.1 设计要求30
3.3.2 关键问题31
3.3.3 程序源代码33
3.4 练习题36
第4章 Ethernet帧的CRC校验38
4.1 设计目的38
4.2 相关知识38
4.2.1 CRC校验的概念38
4.2.2 CRC校验的例子39
4.2.3 CRC校验的硬件实现40
4.2.4 CRC校验的主要特点42
4.3 例题分析42
4.3.1 设计要求42
4.3.2 关键问题43
4.3.3 程序源代码45
4.4 练习题48
计算机网络软件编程指导书 第5章 IP地址的合法性判断49
5.1 设计目的49
5.2 相关知识49
5.2.1 IP地址的基本概念49
5.2.2 IP地址的分类方法50
5.2.3 特殊IP地址类型51
5.2.4 子网的划分52
5.3 例题分析53
5.3.1 设计要求53
5.3.2 关键问题54
5.3.3 程序源代码56
5.4 练习题60
第6章 IP数据包的捕获与解析62
6.1 设计目的62
6.2 相关知识62
6.2.1 网络层的基本概念62
6.2.2 IP数据包的结构63
6.3 例题分析66
6.3.1 设计要求66
6.3.2 关键问题67
6.3.3 程序源代码71
6.4 练习题75
第7章 IP数据包的分片与重组77
7.1 设计目的77
7.2 相关知识77
7.2.1 IP包分片的概念77
7.2.2 IP包分片的相关字段78
7.3 例题分析80
7.3.1 设计要求80
7.3.2 关键问题81
7.3.3 程序源代码82
7.4 练习题86
第8章 IPv6数据包的封装与解析87
8.1 设计目的87
8.2 相关知识87
8.2.1 IPv4协议的主要缺点87
8.2.2 IPv6协议的基本概念88
8.2.3 IPv6数据包的结构89
8.2.4 IPv6地址结构91
8.2.5 IPv6的安全功能93
8.3 例题分析93
8.3.1 设计要求93
8.3.2 关键问题94
8.3.3 程序源代码96
8.4 练习题101
第9章 发现网络中的活动主机103
9.1 设计目的103
9.2 相关知识103
9.2.1 ICMP协议的基本概念103
9.2.2 ICMP数据包的结构104
9.3 例题分析106
9.3.1 设计要求106
9.3.2 关键问题107
9.3.3 程序源代码110
9.4 练习题115
第10章 发现服务器开启的TCP端口116
10.1 设计目的116
10.2 相关知识116
10.2.1 传输层的基本概念116
10.2.2 端口号的分配117
10.3 例题分析119
10.3.1 设计要求119
10.3.2 关键问题119
10.3.3 程序源代码121
10.4 练习题123
第11章 TCP数据包的封装与发送124
11.1 设计目的124
11.2 相关知识124
11.2.1 TCP协议的基本概念124
11.2.2 TCP数据包的结构125
11.3 例题分析127
11.3.1 设计要求127
11.3.2 关键问题128
11.3.3 程序源代码130
11.4 练习题134
第12章 基于TCP的客户机/服务器程序136
12.1 设计目的136
12.2 相关知识136
12.2.1 TCP协议的主要特点136
12.2.2 客户机/服务器编程137
12.3 例题分析139
12.3.1 设计要求139
12.3.2 关键问题139
12.3.3 程序源代码144
12.4 练习题147
第13章 基于UDP的客户机/服务器程序149
13.1 设计目的149
13.2 相关知识149
13.2.1 UDP协议的基本概念149
13.2.2 UDP数据包的结构151
13.3 例题分析152
13.3.1 设计要求152
13.3.2 关键问题153
13.3.3 程序源代码155
13.4 练习题159
第14章 FTP客户机程序设计160
14.1 设计目的160
14.2 相关知识160
14.2.1 应用层的基本概念160
14.2.2 FTP服务的基本概念161
14.2.3 FTP服务的工作原理161
14.2.4 FTP命令与应答163
14.3 例题分析165
14.3.1 设计要求165
14.3.2 关键问题166
14.3.3 程序源代码169
14.4 练习题179
第15章 包过滤防火墙程序设计181
15.1 设计目的181
15.2 相关知识181
15.2.1 网络安全的重要性181
15.2.2 防火墙的基本概念182
15.2.3 包过滤的工作原理183
15.3 例题分析184
15.3.1 设计要求184
15.3.2 关键问题184
15.3.3 程序源代码187
15.4 练习题192
附录A RFC文档193
参考文献195