本课程从实践入手循序渐进,以Linux系统环境和Linux内核源代码为例,将Linux网络相关命令用法、Socket网络编程、TCP协议、IP协议及路由表、ARP协议及ARP缓存、二层交换网络的学习转发和过滤数据库等互联网架构的关键环节一一解析,并通过MenuOS实验系统进行代码跟踪分析。最终理解分析打开一个网页背后互联网的工作过程,其中重点分为三个抽象层次:一是便于人类理解的记忆的编址方式DNS Naming;二是便于全球定位编址和路由的IP Networking;三是便于局域网中实际完成数据交换传输的Layer 2 Switching;同时在理解互联网体系结构的基础上探寻它的历史演化渊源,乃至发现它背后的设计哲学,解读未来网络的演进方向。
- 请加入班级博客————实验作业提交地址
- 实验答疑14-18周周四晚上7-9点思贤楼301和303实验室
-
BSD Socket/Linux Socket API
-
winsock/Linux Socket API
-
Java/Linux Socket API
-
Javascript/Nodejs/Linux Socket API
-
Python/Linux Socket API
-
go/Linux Socket API
-
...
- 以您熟悉的编程语言为例完成一个hello/hi的简单的网络聊天程序,并写一篇博客对比分析该编程语言提供的网络接口API与Linux Socket API之间的关系。
- 参见https://edu.cnblogs.com/campus/ustc/np2019/homework/10012
- 参考作业范例https://blog.csdn.net/vipshop_fin_dev/article/details/102966081
- 自行搭建调试Linux内核的环境Build a Linux system
- 构建调试Linux内核网络代码的环境MenuOS
- 将C/S方式的网络通信程序的服务端程序集成到MenuOS系统中,成为MenuOS系统的一个命令,跟踪分析MenuOS在执行这这个命令的过程中对Linux内核发出的系统调用请求,以及与socket接口函数的关系。
- 初始化MenuOS系统的网络功能
- 搞清楚如何激活Linux网络设备,并将MenuOS系统的网络设备用简便的方式配置好,使我们将TCP客户端也集成进去后可以完整的运行TCP网络程序的服务端和客户
- Linux内核5.0 source code
- 参考MenuOS
- Linux内核的启动过程, 跟踪分析Linux内核的启动过程
- glibc提供的系统调用函数API
- int 0x80、系统调用号及参数传递过程
- 保护现场与恢复现场
- 系统调用内核处理函数
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 分析system_call中断处理过程
- start_kernel --> trap_init --> idt_setup_traps --> 0x80--entry_INT80_32
- 在5.0内核int0x80对应的中断服务例程是entry_INT80_32,而不是原来的名称system_call了。
- UNIX网络编程卷1:套接字联网API
- 庖丁解牛Linux内核分析
- POSIX: An Overview https://linuxhint.com/posix-standard/
- POSIX Full Document https://pubs.opengroup.org/onlinepubs/9699919799/
- POSIX System Interfaces https://pubs.opengroup.org/onlinepubs/9699919799/idx/functions.html
- POSIX Utilities https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
- POSIX Networking Services https://pubs.opengroup.org/onlinepubs/9699919799/idx/networking.html