2018-2019-1 20165333《信息安全系统设计基础》第八周学习总结

教材学习内容总结

客户端-服务器编程模型

1.每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器户端提供某种服务。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。
2.客户端-服务器模型中的基本操作是事务。事务由四步组成
(1)当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。
(2)服务器收到请求后,解释它,并以适当的方式操作它的资源。
(3)服务器给客户端发送一响应,并等待下一个请求。
(4)客户端收到响应并处理它。

网络

1.客户端和服务器通常运行在不同的主机上,并且通过计算机网络的硬件和软件资源来通信。
2.对于一个主机而言,网络只是又一种I/O设备,作为数据源和数据接收方,如图所示。一个插到I/O总线扩展槽的适配器提供了到网络的物理接口。从网络上接收到的数据从适配器经过I/O和存储器总线拷贝到存储器,典型地是通过DMA(注:直接存储器存取方式)传送。相似地,数据也能从存储器拷贝到网络。

1.一个以太网段,包括电缆和集线器;每根电缆都有相同的最大位带宽;集线器不加分辩地将一个端口上收到的每个位复制到其他所有的端口上。因此,每台主机都能看到每个位。
2.每个以太网适配器都有—个全球唯一的48位地址,它存储在这个适配器的非易失性存储器上。每个主机适配器都能看到这个帧,但是只有目的主机实际读取它。
3.桥接以太网 由 电缆和网桥 将多个以太网段连接起来,形成的较大的局域网。连接网桥的电缆传输速率可以不同(例:网桥与网桥之间1GB/S, 网桥与集线器之间100MB/S)。
4.网桥作用:连接不同网段。同一网段内A向B传输数据时,帧到达网桥输入端口,网桥将其丢弃,不予转发。A向另一网段内C传输数据时,网桥才将帧拷贝到与相应网段连接的端口上。从而节省了网段的带宽
5.协议软件的基本能力:
命名机制 为每台主机至少分配一个互联网地址,从而消除不同主机地址格式的差异,是每台主机能被识别。
传送机制 不同格式的数据进行封装,使其具有相同的格式。
6.局域网由集线器和网桥及连接的电缆组成。

c语言实现socket编程的相关函数

1.socket()函数
该函数用于根据指定的地址族、数据类型和协议来分配一个套接字的描述字及其所用的资源。Socket函数原型为:
int socket( int domain , int type , int protocol ) ;
a、 参数domain指定地址描述,一般为AP_INET;
b、 参数type指定socket类型:SOCK_STREAM和SOCK_DGRAM;
c、参数protocol通常为0;
d、 函数返回值为一个整型socket描述符,在bind函数中调用。

2.bind()函数
该函数用于将一个本地地址与一个套接字绑定在一起。
int bind( int sockfd , struct sockadd* my_addr , int addrlen) ;
a、sockfd:socket描述符,使用socket函数返回值,将该socket与本机上的一个端口相关联。
在设计服务器端程序是需要调用bind函数,以在该端口上监听服务请求;而客户端一般不需要调用bind函数,因为只需知道服务器IP地址,并不关心客户通过哪个端口与服务器建立连接,内核会自动选择一个未被占用的端口供客户端来使用。
b、my_addr:指向包含本机IP地址及端口号等信息的sockaddr类型的指针。
c、addrlen:sizeof( struct sockaddr)的值。
d、bind函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码。

3.connect()函数
与远程服务器建立一个TCP连接。
int connect(int sockfd, struct sockaddr* serv_addr, int addrlen);
a、sockfd:目的服务器的socket描述符。
b、serv_addr:指向包含目的服务器的IP地址及端口号的指针。
c、addrlen:sizeof( struct sockaddr)的值。
d、connect函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,进行服务器端程序设计时不需调用connect函数。

4.listen()函数
在服务器端程序中,当socket与某一端口绑定后,需要监听该端口,及时处理到达该端口上的服务请求。
int listen(int sockfd, int backlog);
a、sockfd:Socket系统调用返回的socket描述符。
b、backlog:指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待接收backlog限制了队列中等待服务的请求数目,系统缺省值为20。
c、listen函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码。

5.accept()函数
当某个客户端试图与服务器监听的端口连接时,该连接请求将排队等待服务器用accept接收它并为其建立一个连接。
int accept(int sockfd, struct sockaddr* addr, int* addrlen);
a、sockfd:被监听的socket描述符。
b、addr:sockaddr类型的指针变量,用来存放提出连接请求服务的主机信息。
c、accept函数返回值:为-1表示遇到错误,并且errno中包含相应的错误码,如果没有错误,accept()函数返回一个新想socket描述符,供这个新连接来实用,而服务器可以继续在以前的socket上监听,同时可以在新的socket描述符上进行数据发送和数据接收(sent()和recv()操作)。

原文地址:https://www.cnblogs.com/challengeeverthing/p/10017842.html