信息安全系统设计基础第十三周学习总结

第11章 网络编程

11.1 客户端-服务器编程模型

1.每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器户端提供某种服务。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。—个FTP服务器就管理了一组磁盘文件,它为客户端进行它会为客户端进行存储和检索。相似地一个电子邮件服务器管理了一些文件,它为客户端进行读和更新。

2.客户端-服务器模型中的基本操作是事务

3.事务由四步组成

1)当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。例如,当Web览器需要一个文件时,它就发送一个请求给Web服务器

2)服务器收到请求后,解释它,并以适当的方式操作它的资源。例如,当Web服务器收到浏览器发出的请求后,它就读一个磁盘文件

3)服务器给客户端发送一响应,并等待下一个请求。例如,Web服务器将文件发送回客户端;

4)客户端收到响应并处理它。例如,当Web浏览器收到来自服务器的一页后,它就在屏幕上显示此页。

11.2 网络

客户端和服务器通常运行在不同的主机上,并且通过计算机网络的硬件和软件资源来通信。网络是复杂的系统,在这里我们只想了解一点皮毛。我们的目标是从程序员的角度给你一个可工作的思考模型。对于一个主机而言,网络只是又一种I/O设备,作为数据源和数据接收方,如图所示。一个插到I/O总线扩展槽的适配器提供了到网络的物理接口。从网络上接收到的数据从适配器经过I/O和存储器总线拷贝到存储器,典型地是通过DMA(译者注:直接存储器存取方式)传送。相似地,数据也能从存储器拷贝到网络。

1.一个以太网段,包括电缆和集线器;每根电缆都有相同的最大位带宽;集线器不加分辩地将一个端口上收到的每个位复制到其他所有的端口上。因此,每台主机都能看到每个位。

2.每个以太网适配器都有—个全球唯一的48位地址,它存储在这个适配器的非易失性存储器上。每个主机适配器都能看到这个帧,但是只有目的主机实际读取它。

3.桥接以太网 由 电缆和网桥 将多个以太网段连接起来,形成的较大的局域网。连接网桥的电缆传输速率可以不同(例:网桥与网桥之间1GB/S, 网桥与集线器之间100MB/S)。

4.网桥作用:连接不同网段。同一网段内A向B传输数据时,帧到达网桥输入端口,网桥将其丢弃,不予转发。A向另一网段内C传输数据时,网桥才将帧拷贝到与相应网段连接的端口上。从而节省了网段的带宽

(1)协议软件的基本能力:

  • 命名机制 为每台主机至少分配一个互联网地址,从而消除不同主机地址格式的差异,是每台主机能被识别。
  • 传送机制 不同格式的数据进行封装,使其具有相同的格式。

11.3 全球ip因特网

全球IP因特网是最著名和最成功的互联网络实现。从1969年起,它就以这样或那样的形式存在了。虽然因特网的内部体系结构复杂而且不断变化,但是自从20世纪80年代早期以来,客户端-服务器应用的组织就一直保持相当的稳定。下图展示了一个因特网客户端-服务器应用程序的基本硬件和软件组织。每台因特网主机都运行实现TCP/TP协议的软件,几乎每个现代计算机系统都支持这个协议。因特网的客户端和服务器混合使用套接字接口函数和Unix I/O函数来进行通信。套接字函数典型地是作为会陷入内核的系统调用来实现的,并调用各种内核模式的TCP/IP函数。、

11.3.1 ip地址

11.3.2 因特网域名

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

2.域名集合形成了一个层次结构,每个域名编码了它在这个层次中的位置。通过一个示例你将很容易理解这点。下展示了域名层次结构的一部分。层次结构可以表示为一棵树。树的节点表示城名,反向到根的路径形成了域名。子树称为子域。层次结构中的第一层是个未命名的根节点。下一层是一组一级域名由非赢利组织(因特网分酒名字数字协会)定义。常见的第一层域名包括com、edu、gov、org、net,这些域名是由ICANN的各个授权代理按照先到先服务的基础分配的的。一旦一个组织得到了一个二级域名,那么它就可以在这个子域中创建任何新的域名了。

11.3.3 因特网连接

一个套接字是连接的一个端点。每个套接字都有相应的套接字地址,是由一个因特网地址和一个16位的整数端口组成的,用“地址:端口”来表示。当客户端发起一个连接请求时,客户端套接字地址中的端口是由内核自动分配的,称为临时端口。然而,服务器套接字地址中的端口通常是某个知名的端口,是和这个服务相对应的。例如,web服务器通常使用端口80,电子邮件服务器使用端口25。

11.4 套接字接口

11.4.1 套接字地址结构

11.4.2 socket函数

其中,AF_INET表明我们正在使用因特网,而SCKET_STREAM表示这个套接字是因特网连接一个端点。Socket返回的clientfd描述符仅是部分打开的,还不能用于读写。如何完成打开套接字的工作,取决于我们是客户端还是服务器。

11.4.3 connect函数

客户端通过connect函数来建立和服务器的连接。

11.4.4 open_clientfd函数

将socket和connect包装

11.4.5 bind函数

bind函数

11.4.6 listen函数

listen函数将sockfd从一个主动套接字转化为一个监听套接字。该套接字可以接受来自客户端的连接请求。backlog参数暗示了内核在开始拒绝连接请求之前,该放入队列中等待的未完成连接请求的数量

11.4.7 open_listenfd函数

11.4.8 accept函数

11.5 web服务器

11.5.1 web基础

1.Web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做HTTP。

2.HTTP是一个简单的协议。一个web客户端(即浏览器)打开一个到服务器的因特网连接。浏览器读取这些内容,并请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取并把它显示在屏幕内

3.主要的区别是Web内容可以用HTML来编写。一个HTML程序(页)包含指令(标记)它们告诉浏览器如何显示这页中的各种文本和图形对象。

11.5.2 web内容

Web服务器以两种不同的方式向客户端提供内容:

1.取一个磁盘文件,并将它的内容返回给客户端。

2.运行一个可执行文件,并将它的输出返回给客户端。

11.5.3 http事务

1.http请求

2.http响应

11.5.4 服务动态内容

1.客户端如何将程序参数传递给服务器

2.服务器如何将参数传递给子进程

3.服务器如何将其他信息传递给子进程

4.子进程将它的输出发送到哪里

原文地址:https://www.cnblogs.com/yswysw/p/5023662.html