20155328 《信息安全系统设计基础》 第八周学习内容总结

教材学习内容总结

  • 每个网络应用都是基于客户端-服务器模型的。在该模型中,一个应用是由一个服务器进程和一个或多个客户端进程组成的。客户端-服务器模型中的基本操作是事务,它由四步组成:1.客户端向服务器发送一个请求,发起一个事务;2.服务器收到请求后,解释之,并操作它的资源;3.服务器给客户端发送一个响应,例如将请求的文件发送回客户端;4客户端收到响应并处理它,例如Web浏览器在屏幕上显示网页。

  • 一个IP地址就是一个32位无符号整数,它存放在一个IP地址结构中。

  • 客户端和服务器通信时使用的是IP地址,然而对于人们而言大整数是很难记住的,因此因特网也定义了一组更加人性化的域名,以及一种将域名映射到IP地址的机制。域名是一串用点分隔的单词(字母、数字和破折号),它有自己的层级结构。

  • Web内容是与MIME(多用途网际邮件扩充协议)类型相关的字节序列,包括:HTML页面、无格式文本、Postscript文档、GIF图像、JPEG图像等。

  • HTTP响应和请求是类似的,它包括:一个响应行,后面跟随0个或多个响应报头,然后是终止报头的空行,再跟随一个响应主体。 一个响应行的格式为:<version> <status code> <status message>

  • 有以下四种方式终止线程:当顶层的线程例程返回时,线程会隐式终止;线程调用pthread_exit函数,线程会显示终止;如果主线程调用pthread_exit,它会等到所有其他对等线程终止,然后再终止主线程和整个线程,返回值为thread_return;某个对等线程调用exut函数,则函数终止进程和所有与该进程相关的线程;另一个对等线程调用以当前ID为参数的函数ptherad_cancel来终止当前线程。

  • 一个可结合的线程能够被其他线程回收其资源和杀死,在被其他线程回收之前,它的存储其资源是没有被释放的;相反,一个分离的线程是不能被其他线程回收或杀死的。

  • 修改对象的线程叫做写者;只读对象的线程叫做读者。写着必须拥有对对象的独占访问,而读者可以和无限多个其他读者共享对象。读者——写者问题基本分为两类:第一类,读者优先,要求不要让读者等待,除非已经把使用对象的权限赋予了一个写者。换句话说,读者不会因为有一个写者等待而等待;第二类,写者优先,要求一定能写者准备好可以写,它就会尽可能地完成它的写操作。同第一类问题不同,在一个写者后到达的读者必须等待,即使这个写者也是在等待。

教材学习中的问题和解决过程

暂无

代码托管

上周考试错题总结

  • Linux信号处理说法正确的是(ABDEF)

A .
可以用signal()处理信号

B .
一个信号最多只能被接收一次

C .
kill(1)用来杀死进程

D .
kill(1)用来发送信号

E .
可以通过键盘发送信号

F .
可以用sigaction()处理信号

  • 有关exec系列函数,下面说法正确的是(CE)

A .
可以用char[][] 来传递argv

B .
进程调用了exec系列函数后,pid会变

C .
进程调用了exec系列函数后,代码会改变。

D .
system()和exec系列等价。

E .
exec系列函数中带e的要传入环境变量参数

F .
exec系列函数中带v的要传入环境变量参数

不能用char[][] 来传递argv,结尾的0(null)无法处理;system=fork+exec+wait;

  • 关于代码 int main(){} 说法正确的是()

A .
返回值是0

B .
返回值不确定

C .
会调用exit(0)

D .
返回值大于0

E .
上面代码运行完,在命令行中运行echo $? 的值是0

main中不调用exit,会补上exit(0)。

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 其他

本周结对学习情况

结对对象:20155325

学习内容:第十一章

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 40/40 1/1 20/20
第二周 40/40 1/2 18/38
第四周 154/194 2/4 20/58
第五周 48/242 2/6 20/78
第六周 59/301 2/8 19/97
第七周 354/655 2/9 18/115
第八周 455/1100 1/10 15/130

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:18小时

  • 实际学习时间:15小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

课堂提交补充

提交点2

把第一个练习中的代码(sum)在X86-64(Ubuntu)中反汇编,给出汇编代码和机器码的截图。把X86-64汇编翻译成Y86-64汇编,并给出相应机器码的截图。

#include<stdio.h>
void main(int arggc,char *argv[])
{
	int sum=0;
	int i;
	for(i=0;i<argc;i++)
	sum+=atoi(argv[i]);
	printf("sum=%d\n",sum);
}

汇编代码截图如下:

机器代码截图如下:

提交点3

基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
服务器响应消息格式是

客户端IP:XXXX
服务器实现者学号:XXXXXXXX
当前时间: XX:XX:XX