2017-2018-1 20155315 《信息安全系统设计基础》第8周学习总结
教材学习内容总结
本周我学习的是第11、12章
客户端&服务器
- 每个网络应用都由一个服务器进程和一个或多个客户端进程组成。
- 客户端和服务器都是进程
网络
- 从网络上接收到的数据从适配器经过I/O和存储器总线拷贝到存储器,典型地是通过DMA(直接存储器存取方式)传送。
- 网络是一个按照地理远近组成的层次系统:最低层是LAN(局域网),最流行的局域网技术是以太网。
- 每台主机都能看到每个位。
- 以太网适配器有一个唯一的48位地址,存储在适配器的非易失性存储器上
- 一台主机可以发送一段位:帧,到这个网段内其它任何主机。每个帧包括一些固定数量的头部位(标识此帧的源和目的地址及帧长)和数据位(有效载荷)。
- 每个主机都能看到这个帧,但是只有目的主机能读取。
- 网桥链接多个以太网段,成为较大的局域网。
- 路由器连接多个不兼容的局域网,internet互联网络。
- 路由器可以用来由各种局域网和广域网构建互联网络。
协议
- 协议软件消除了不同网络之间的差异。
- 协议控制主机和路由器如何协同工作来实现数据传输。
- 两种基本能力:
- 命名机制
- 传送机制
IP因特网
- 因特网的客户端和服务器混合使用套接字接口函数和Unix I/O函数来进行通信。
- IP地址就是一个32位无符号整数,使用(大端法)网络字节顺序存放的。
- 套接字接口函数:
socket函数、connect函数、open_clientfd函数、bind函数、listen函数、open_listenfd函数、accept函数
并发程序
- 进程:用内核来调用和维护,有独立的虚拟地址空间,显式的进程间通信机制。
- I/O多路复用,应用程序在一个进程的上下文中显式的调度控制流。逻辑流被模型化为状态机。
- 线程,运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。可看成其他两种方法的混合体。
进程
- 进程有一个非常清晰的模型:共享文件表,但不共享用户地址空间。
- 在父进程中接收客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。
I/O多路复用
- 可以用作并发事件驱动程序的基础。
- 将逻辑流模型化为状态机:由一组状态、输入事件和转移,其中转移就是将状态和输入事件映射到状态。
- 比基于进程的设计给了程序员更多的对程序行为的控制,是运行在单一进程上下文中的。但是代码复杂,不能充分利用多核处理器。
线程
- 主线程:每个进程开始生命周期时都是单一线程
- 线程可以并发地运行
- 线程执行不同于进程
- 线程不按照父子层次,而是形成一个对等(线程)池。
教材学习中的问题和解决过程
问题1: 进程和线程有什么不同?
解决1:
- 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
- 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
- 线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序抗攻击,但在进程切换时,耗费资源较大,效率要差一些。
- 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
代码调试中的问题和解决过程
问题1: 照着书上的代码敲上去之后,编译的时候总出错。
解决1: 在编译的时候,要将csapp.c、echo.c和修改的代码编译在一起,还要加上-lpthread才可以编译成功。
代码托管
(statistics.sh脚本的运行结果截图)
结对及互评
暂无
其他(感悟、思考等,可选)
这一章的内容很多,吸收得不够,还要继续学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 5/5 | 1/1 | 25/25 | |
第二周 | 236/241 | 3/4 | 30/55 | |
第三周 | 169/410 | 2/6 | 30/85 | |
第四周 | 169/410 | 2/8 | 50/135 | |
第五周 | 1177/1587 | 2/10 | 30/165 | |
第六周 | 1826/3413 | 2/12 | 30/195 |
-
计划学习时间:30小时
-
实际学习时间:30小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)