网络编程技术复习课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络编程复习课
2014.6
CS模型
会聚点问题
CS模型要求在任何一对进行通信的应用进程中,有一 方必须在启动执行后(无限期地)等待对方与其联系。 这种解决方案减少了下层软件的复杂性,因为下层协 议不必自己对收到的通信请求做出响应。
CS模型应用分类
CS模型根据通信发起的方向对程序进行分类,即区别 一个程序是客户还是服务器。一般来说,发起对等通 信的应用程序称为客户。
UNIX API
系统篇
创建进程:fork 创建线程:pthread_create 执行新程序:exec系列
父进程通过fork()创建子进程,返回两次,一次在父进 程,一次在子进程;出错则返回-1。
在当前进程中,创建一个新的线程,与当前运行的线程并 发执行。
当前进程映像替换成新的程序文件,而且该程序通常main 函数开始执行。
UNIX API
系统篇
多路转接:select
确定一个或多个描述符的状态(可读性、可写性、错误状 态),实现对多个描述符状态的并发“监听”。可用于实 现单线程的并发。
等待子进程终止:wait
父进程通过调用wait()而阻塞,并等待子进程终止。当 有子进程终止时,父进程可获得子进程的退出状态,清理 子进程的残余数据,并从阻塞中返回。
多服务、多协议服务器
可以选择一种多服务的实现方法来构建多服务服务器, 以减少需要执行的服务器的数量;可以使用多协议以 便把无连接和面向连接的服务结合进一个服务器中。
程序员可以使用并发进程或线程实现一种并发的、多
服务服务器,也可以在单执行线程中使用多路转接技 术以提供表面上的并发性。
服务器模型
从进程/线程预分配
CS模型
状态
服务器所维护的与客户交互活动的信息称为状态息。不保 存任何状态信息的服务器称为无状态服务器,反之称为有 状态服务器。如果应用协议不能使操作成为幂等(注1)的, 就可能不能使无状态服务器。
有状态服务器的条件
在理想情况下,只要网络能可靠地交付所有的报文,并且 计算机从不崩溃,则在这种情况下,使服务器为每个进行 着的交互保持少量状态信息,就可以使交互的报文小些, 并使分布式应用更像非分布式应用。
服务器模型
循环、无连接服务器(UDP)
1、创建套接字并将其绑定到所提供服务的熟 知端口上; 2、重复地读取来自客户的请求,构造响应, 按照应用协议向客户发回响应。
服务器模型
循环、面向连接服务器(TCP)
1、创建套接字并将其绑定到它所提供服务的熟知端口上。 2、将该端口设置为被动模式,使其准备为服务器所用。 3、从该套接字上接受下一个连接请求,获得该连接的新的 套接字。 4、重复地读取来自客户的请求,构造响应,按照应用协议 向客户发回响应。 5、与某个特定的客户完成交互时,关闭连接,并返回步骤 3以接受新的连接。
当使用预分配时,服务器在启动时就创建若干个并发的从线程/ 进程。预分配避免了在每次请求到达时创建进程的开销,因而降 低了服务器时延,同时允许在处理一个请求时,与另一个请求相 关联的I/O活动也在重叠进行。
延迟分配技术
当使用延迟分配技术时,服务器开始将循环地处理每个请求。仅 当处理要花大块时间时,服务器才创建一个并发的从线程/进程 来处理该请求。这种时延允许主服务器在创建一个进程或切换环 境前,先检查有无差错并处理一些短的请求。
CS模型
特权
为完成计算和返回结果,服务器软件拥有系统特权来 访问受操作系统保护的对象(如文件、数据库、设备 或协议端口),但应注意不要将特权传递给使用服务 的客户。通常服务器含有处理以下安全问题的代码: 鉴别—验证客户身份 授权—判断某个库胡是否被允许访问服务器服务 数据安全—确保数据不被无意泄漏或损坏 保密—防止未经授权访问信息 保护—确保网络应用程序不能滥用系统资源
服务器模型
多协议服务器
一个多协议服务器的设计允许设计者创建一个单一的过程, 此过程响应某个给定服务的请求,响应该过程的调用,而 不必关心这些请求是来自UDP还是TCP。 多协议服务器允许设计者将某个给定服务的所有代码封装 到一个程序里,这样就消除了重复,并且也更容易协调各 种变化。
服务器模型
服务器模型
预分配与延迟分配统一的基础
两者基于同一原理:通过把服务器的并 发等级从当前活跃的请求数目中分离出 来,设计人员可获得灵活性并提高服务 器效率。
封装技术与隧道技术
封装 隧道技术 区别
将一个IP数据报放进一个网络分组或帧以便在下层的网络上发送 它。封装涉及网络接口如何使用分组交换硬件。
UNIX API
套接字篇
socket connect send(sendto) recv(recvfrom)
应用调用socket创建一个新的套接字,该新的套接字用于网络通 信,并返回该套接字的描述符。
创建一个套接字后,客户程序调用connect以便同远程服务器建 立主动的连接,并通过描述符来传输数据。
应用程序使用bind为一个套接字指定本地端点地址。对于TCP/IP 协议,端点地址使用sockaddr_in结构,它包含了IP地址和协议 端口号。
listen accept
面向连接的服务器调用listen将一个套接字置为被动模式,并使 其准备接受传入连接。 对于TCLeabharlann Baidu套接字,服务器将调用accept以获取所指明的套接字的下一 个传入连接请求。
是指使用高层传输网络服务运送来自另一个服务的分组或报文。
当IP直接使用硬件发送数据报时,它将每个数据包封装进一个分 组中。当IP使用一个高层传输服务点对点发送数据包时,便创建 一个隧道。
应用级网关
应用网关定义
应用网关是一个程序,使用一个高层协议接受请求,并且使用另 一个高层协议处理请求。实质上,每个应用网关是提供某一服务 的服务器,也是另一个服务的客户。许多网点使用应用网关实现 授权和安全检查。
服务器模型
并发、面向连接服务器(TCP) 主1.创建套接字并将其绑定到所提供服务的熟知地 址上 主2.将该端口设置为被动模式,使其准备为服务器 所用 主3.反复阻塞等待接受请求以便接收来自客户的下 一个连接请求,并创建新的从进程来处理响应 从1.针对主进程传递来的连接请求开始 从2.用该连接与客户进行交互:读取请求并发回响 应 从3.关闭连接并退出,在处理完来自客户的所有请 求后,从进程就退出
服务器模型
单线程、并发服务器(TCP) 1、创建套接字并将其绑定到这个服务的熟知端 口上。将该套接字加到一个表中,该表中的项为 可以进行IO的描述符; 2、使用多路转接技术在已有套接字上等待IO; 3、如果最初的套接字准备就绪,通过接受连接 请求获得下一个连接,并将这个新的套接字加入 到表中,该表中的项是可以进行IO的描述符; 4、如果是最初的套接字以外的某些套接字准备 就绪,就读下一个请求,构造并发送响应;
客户和服务器使用send在TCP上传输数据。客户常使用send传输 请求,而服务器使用send传输应答。
客户和服务器使用recv在TCP上接收数据。服务器通过其接收客 户端请求,而客户端通过其来接收应答。
UNIX API
套接字篇
close bind
客户或服务器一旦结束使用某个套接字,便调用close将该套接 字撤销(引用为0时注1)。
2014.6
CS模型
会聚点问题
CS模型要求在任何一对进行通信的应用进程中,有一 方必须在启动执行后(无限期地)等待对方与其联系。 这种解决方案减少了下层软件的复杂性,因为下层协 议不必自己对收到的通信请求做出响应。
CS模型应用分类
CS模型根据通信发起的方向对程序进行分类,即区别 一个程序是客户还是服务器。一般来说,发起对等通 信的应用程序称为客户。
UNIX API
系统篇
创建进程:fork 创建线程:pthread_create 执行新程序:exec系列
父进程通过fork()创建子进程,返回两次,一次在父进 程,一次在子进程;出错则返回-1。
在当前进程中,创建一个新的线程,与当前运行的线程并 发执行。
当前进程映像替换成新的程序文件,而且该程序通常main 函数开始执行。
UNIX API
系统篇
多路转接:select
确定一个或多个描述符的状态(可读性、可写性、错误状 态),实现对多个描述符状态的并发“监听”。可用于实 现单线程的并发。
等待子进程终止:wait
父进程通过调用wait()而阻塞,并等待子进程终止。当 有子进程终止时,父进程可获得子进程的退出状态,清理 子进程的残余数据,并从阻塞中返回。
多服务、多协议服务器
可以选择一种多服务的实现方法来构建多服务服务器, 以减少需要执行的服务器的数量;可以使用多协议以 便把无连接和面向连接的服务结合进一个服务器中。
程序员可以使用并发进程或线程实现一种并发的、多
服务服务器,也可以在单执行线程中使用多路转接技 术以提供表面上的并发性。
服务器模型
从进程/线程预分配
CS模型
状态
服务器所维护的与客户交互活动的信息称为状态息。不保 存任何状态信息的服务器称为无状态服务器,反之称为有 状态服务器。如果应用协议不能使操作成为幂等(注1)的, 就可能不能使无状态服务器。
有状态服务器的条件
在理想情况下,只要网络能可靠地交付所有的报文,并且 计算机从不崩溃,则在这种情况下,使服务器为每个进行 着的交互保持少量状态信息,就可以使交互的报文小些, 并使分布式应用更像非分布式应用。
服务器模型
循环、无连接服务器(UDP)
1、创建套接字并将其绑定到所提供服务的熟 知端口上; 2、重复地读取来自客户的请求,构造响应, 按照应用协议向客户发回响应。
服务器模型
循环、面向连接服务器(TCP)
1、创建套接字并将其绑定到它所提供服务的熟知端口上。 2、将该端口设置为被动模式,使其准备为服务器所用。 3、从该套接字上接受下一个连接请求,获得该连接的新的 套接字。 4、重复地读取来自客户的请求,构造响应,按照应用协议 向客户发回响应。 5、与某个特定的客户完成交互时,关闭连接,并返回步骤 3以接受新的连接。
当使用预分配时,服务器在启动时就创建若干个并发的从线程/ 进程。预分配避免了在每次请求到达时创建进程的开销,因而降 低了服务器时延,同时允许在处理一个请求时,与另一个请求相 关联的I/O活动也在重叠进行。
延迟分配技术
当使用延迟分配技术时,服务器开始将循环地处理每个请求。仅 当处理要花大块时间时,服务器才创建一个并发的从线程/进程 来处理该请求。这种时延允许主服务器在创建一个进程或切换环 境前,先检查有无差错并处理一些短的请求。
CS模型
特权
为完成计算和返回结果,服务器软件拥有系统特权来 访问受操作系统保护的对象(如文件、数据库、设备 或协议端口),但应注意不要将特权传递给使用服务 的客户。通常服务器含有处理以下安全问题的代码: 鉴别—验证客户身份 授权—判断某个库胡是否被允许访问服务器服务 数据安全—确保数据不被无意泄漏或损坏 保密—防止未经授权访问信息 保护—确保网络应用程序不能滥用系统资源
服务器模型
多协议服务器
一个多协议服务器的设计允许设计者创建一个单一的过程, 此过程响应某个给定服务的请求,响应该过程的调用,而 不必关心这些请求是来自UDP还是TCP。 多协议服务器允许设计者将某个给定服务的所有代码封装 到一个程序里,这样就消除了重复,并且也更容易协调各 种变化。
服务器模型
服务器模型
预分配与延迟分配统一的基础
两者基于同一原理:通过把服务器的并 发等级从当前活跃的请求数目中分离出 来,设计人员可获得灵活性并提高服务 器效率。
封装技术与隧道技术
封装 隧道技术 区别
将一个IP数据报放进一个网络分组或帧以便在下层的网络上发送 它。封装涉及网络接口如何使用分组交换硬件。
UNIX API
套接字篇
socket connect send(sendto) recv(recvfrom)
应用调用socket创建一个新的套接字,该新的套接字用于网络通 信,并返回该套接字的描述符。
创建一个套接字后,客户程序调用connect以便同远程服务器建 立主动的连接,并通过描述符来传输数据。
应用程序使用bind为一个套接字指定本地端点地址。对于TCP/IP 协议,端点地址使用sockaddr_in结构,它包含了IP地址和协议 端口号。
listen accept
面向连接的服务器调用listen将一个套接字置为被动模式,并使 其准备接受传入连接。 对于TCLeabharlann Baidu套接字,服务器将调用accept以获取所指明的套接字的下一 个传入连接请求。
是指使用高层传输网络服务运送来自另一个服务的分组或报文。
当IP直接使用硬件发送数据报时,它将每个数据包封装进一个分 组中。当IP使用一个高层传输服务点对点发送数据包时,便创建 一个隧道。
应用级网关
应用网关定义
应用网关是一个程序,使用一个高层协议接受请求,并且使用另 一个高层协议处理请求。实质上,每个应用网关是提供某一服务 的服务器,也是另一个服务的客户。许多网点使用应用网关实现 授权和安全检查。
服务器模型
并发、面向连接服务器(TCP) 主1.创建套接字并将其绑定到所提供服务的熟知地 址上 主2.将该端口设置为被动模式,使其准备为服务器 所用 主3.反复阻塞等待接受请求以便接收来自客户的下 一个连接请求,并创建新的从进程来处理响应 从1.针对主进程传递来的连接请求开始 从2.用该连接与客户进行交互:读取请求并发回响 应 从3.关闭连接并退出,在处理完来自客户的所有请 求后,从进程就退出
服务器模型
单线程、并发服务器(TCP) 1、创建套接字并将其绑定到这个服务的熟知端 口上。将该套接字加到一个表中,该表中的项为 可以进行IO的描述符; 2、使用多路转接技术在已有套接字上等待IO; 3、如果最初的套接字准备就绪,通过接受连接 请求获得下一个连接,并将这个新的套接字加入 到表中,该表中的项是可以进行IO的描述符; 4、如果是最初的套接字以外的某些套接字准备 就绪,就读下一个请求,构造并发送响应;
客户和服务器使用send在TCP上传输数据。客户常使用send传输 请求,而服务器使用send传输应答。
客户和服务器使用recv在TCP上接收数据。服务器通过其接收客 户端请求,而客户端通过其来接收应答。
UNIX API
套接字篇
close bind
客户或服务器一旦结束使用某个套接字,便调用close将该套接 字撤销(引用为0时注1)。