《TCP/IP网络互联技术》

最近花了一周多的时间将TCP/IP网络互联技术(客户-服务器编程与应用(windows 套接字))一书阅读了一遍.

有如下几点感受:

1.UDP协议软件通常是驻留在操作系统中,因此溢出问题的解决变得特别因难,因此程序员可以预分配子线程,预分配往往足以消除报文丢失。

  很多网络文件系统NFS的实现都采用预分配技术避免数据报丢失。仔细研究一下运行着的NFS系统,会发现一组预分配服务器都在同一个UDP套接字读取数据,因此,是否使用了预分配技术,往往意味着NFS的实现到底能不能用。

2.如果程序员不清楚当前的并发处理是否合理,他们该如何优化时延和吞吐量呢?

 我们可以采用延迟并发技术,在并发处理与循环处理之间动态选择。

3.设计者通过子线程预分配和延迟分配提高并发服务器的性能;预分配技术对于并发的,无连接服务器来说很重要,因为用于处理请求的时间很短,使得创建线程或进程的开销很大。

4.隧道技术与应用网关的区别?

 分析:应用网关优点:程序员可以在不改变计算机操作系统的情况下创建应用风关;应用网关使得现有网络系统不受干扰地继续运作。

    应用网关缺点:应用网关技术要求程序员为每一种服务构造单独的应用网关程序。每当机构在网络系统中增加一项新的服务时,程序员必须构造一个新的应用网关;应用网关还需要使用额外的硬件资源。

    隧道技术优点:采用新的服务时无需任何改变,一旦投入使用,传输层隧道就成为低层网络结构的一部分。由于应用程序意识不到它的存在,隧道技术可以用于任何应用服务,采用隧道技术的机构以可以使用单一传输协议,因此它能保证传输服务的一致性。

    隧道技术的缺点:为了安装能提供完整功能的传输层隧道,站点必须修改网关的操作系统,这个网关是用来连接两个网络系统的,机构还可能要修改使用隧道技术的主机软件;机构采用隧道技术是为了在异构网络环境中提供一致的传输服务;低层网络协议的改变往往会导致与用户交互的客户软件的改动;最终,众多方面考虑,很多机构选择应用网关解决方案。

5.服务器软件设计的算法和问题

1)循环的,面各连接的服务器算法

  • 创建套接字,并将其绑定到服务器所使用的熟知地址上。
  • 将套接字设置为被动模式,使其准备为服务器所用。
  • 从该套接字上接收下一个连接请求,获取该连接的新的套接字。
  • 重复地接受客户的请求,构造应答,按照应用协议向客户发回响应。
  • 完成与某个客户的交互后,关闭连接,回到步骤3以接受新的连接。

2)循环的,无连接服务器算法。

  • 创建套接字并将其绑定到服务器所使用的熟知地址上。
  • 重复地接收来自客户端的请求,按照应用协议构造应答并发回给客户。

3)并发的,无连接服务器的算法

  • 主线程1)创建套接字并将其绑定到服务所使用的熟知端口上,使该套接字处于未连接状态。
  • 主线程2)重复调用recvfrom 接受客户端的下一个请求,并且创建新的子线程处理响应。
  • 子线程1)在线程创建时接收一个给定的请求,并访问套接字.
  • 子线程2)根据应用协议构造应答,并调用sendto将应答发回给客户。
  • 子线程3)退出(即子线程处理完一个请求后便终止)。

4)并发的,面向连接的服务器算法

  • 主线程1)创建套接字并将其绑定到服务所使用的熟知地址上,使套接字处于未连接状态。
  • 主线程2)将套接字设置为被动模式,使其准备为服务器所用。
  • 主线程3)重复调用accept接收客户端的请求并且创建子线程处理响应。
  • 子线程1)在线程创建时,接收连接请求。
  • 子线程2)用该连接与客户端进行交互,接收请求并发回应答。
  • 子线程3)关闭连接并退出,子线程在处理完来自一个客户端的所有请求后退出。

5)使用单个线程实现表面上的并发性

  • 创建套接字并将其绑定到服务器所使用的熟知端口上,将套接字加到可以执行I/O操作的列表上。
  • 调用select在现有套接字上等待I/O。
  • 如果最初的套接字准备就绪,就调用accept获得下一个连接,并将这个新的套接字加入可以执行I/0列表上。
  • 如果最初套接字以外的套接字准备就绪,调用recv获得下一个请求,形成一个应答,并调用send把应答发回客户。
  • 继续步骤2进行处理。

你可能感兴趣的:(读书心得)