TCP/IP网络互连技术(卷Ⅲ 客户/服务器编程和应用 Windows套接字版 英文版)

TCP/IP网络互连技术(卷Ⅲ 客户/服务器编程和应用 Windows套接字版 英文版)
作 者: 科默Douglas Comer 史蒂文斯David Stevens
出版社: 清华大学出版社
丛编项: 大学计算机教育丛书 影印版 网络互连技术系列
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: TCP/IP
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  作者:DouglasE.ComerDouglasE.Comer博士从20世纪70年代开始从事互联网的研究和开发工作,他曾是互联网体系结构委员会的成员,该委员会是确定互联网发展标准的权威机构;他也曾任美国计算机网CSTNET技术委员会的主席,该网络是美国早期互联网建设中最重要的网络之一。他现在是美国普渡大学计算机科学系的教授,从事计算机网络和操作系统方面的教学和科研工作。Internet技术基础>>更多作品

内容简介

内容简介TCP/IP网络互连技术系列的第Ⅲ卷讨论客户/服务器编程和应用,讲述了构筑所有分布式计算系统的客户/服务器计算模型的基本慨念,内容涉及各种不同的服务器设计方法,以及用来构造客户/服务器的各种工具和技术,包括远程过程调用RPC。书中包含了用来说明每种设计和工具的运行程序示例的源代码。卷Ⅲ有三个版本:BSD套接字版,AT&TTLI版,WindowsSockets版。本书系WindowsSockets版,讨论在Internet上应用软件通过TCP/IP进行通信的问题,适用于Windows95,Wind0wSNT,Win32环境下编程和使用WindowsSocketAPI应用编程接口。

图书目录

Contents

Foreword

Preface

Chapter 1 Introduction And Overview

1.1 Use Of TCP/IP

1.2 Designing Applications For A Distributed Environment

1.3 Standard And Nonstandard Application Protocol Use

1.4 An Example Of Standard Application Protocol Use

1.5 An Example Connection

1.6 Using TELNET To Access An Alternative Service

1.7 Application Protocols And Software Flexibility

1.8 Viewing Services From The Provider's Perspective

1.9 The Remainder Of This Text

1.10 Summary

Chapter 2 The Client Server Model And Software Design

2.1 Introduction

2.2 Motivation

2.3 Terminology And Concepts

2.3.1 Clients And Servers

2.3.2 Privilege And Complexity

2.3.3 Standard Vs.Nonstandard Client Software

2.3.4 Parameterization Of Clients

2.3.5 Connectionless Vs.Connection-Oriented Servers

2.3.6 Stateless Vs.Stateful Servers

2.3.7 A Stateful File Server Example

2.3.8 Statelessness Is A Protocol issue

2.3.9 Severs As Clients

2.4 Summary

Chapter 3 Concurrent Processing In Client-Server Software

3.1 Introduction

3.2 Concurrency In Networks

3.3 Concurrency In Servers

3.4 Terminology And Concepts

3.4.1 the Process concept

3.4.2 Threads

3.4.3 Programs vs.Threads

3.4.4 Procedure Calls

3.5 An Example Of Concurrent Process Creation

3.5.1 A Sequential C Example

3.5.2 A Concurrent Version

3.5.3 Timeslicing

3.6 Executing New Code

3.7 Context Switching And Protocol Software Design

3.8 Concurrency And Asynchronous I /O

3.9 Summary

Chapter 4 Program Interface To Protocols

4.1 Introduction

4.2 Loosely Specified Protocol Software Interface

4.2.1 Advantages And Disadvantages

4.3 Interface Functionality

4.4 Conceptual Interface Specification

4.5 System Calls

4.6 Two Basic Approaches To Network Communication

4.7 The Basic I/O Functions Available In UNIX

4.8 Using UNIX I/O With TCP/IP

4.9 Summary

Chapter 5 The Socket Interface

5.1 Introduction

5.2 Berkeley Sockets

5.3 Specifying A Protocol Interface

5.4 The Socket Abstraction

5.4.1 Socket Descriptors

5.4.2 System Data Structures For Sockets

5.4.3 Using Sockets

5.5 Specifying An Endpoint Address

5.6 A Generic Address Structure

5.7 Major System Calls Used With Sockets

5.7.1 The WSAStartup Function

5.7.2 The WSACleanup Function

5.7.3 The Socket Function

5.7.4 The Connect Function

5.7.5 The Send Function

5.7.6 The Recv Function

5.7.7 The Closescket Function

5.7.8 The Bind Function

5.7.9 The Listen unction

5.7.10 The Accept Function

5.7.11 Summary Of Socket Calls Used With TCP

5.8 Utility Routines For Integer Conversion

5.9 Using Socket Calls In A Program

5.10 Symbolic Constants For Socket Call Parameters

5.11 Summary

Chapter 6 Algorithms And Issues In Client Software Design

6.1 Introduction

6.2 Learning Algorithms Instead Of Details

6.3 Client Architecture

6.4 Identifying The Location Of A Server

6.5 Parsing An Address Argument

6.6 Looking Up A Domain Name

6.7 Looking Up A Well-Known Port By Name

6.8 Port Numbers And Network Byte Order

6.9 Looking Up A Protocol By Name

6.10 The TCP Client Algorithm

6.11 Allocating A Socket

6.12 Choosing A Local Protocol Port Number

6.13 A Fundamental Problem In Choosing A Local IP Address

6.14 Connecting A TCP Socket To A Server

6.15 Communicating With The Server Using TCP

6.16 Reading A Response From A TCP Connection

6.17 Closing A TCP Connection

6.17.1 The Need For Partial Close

6.17.2 A Partial Close Operation

6.18 Programming A UDP Client

6.19 Connected And Unconnected UDP Sockets

6.20 Using Connect With UDP

6.21 Communicating With A Server Using UDP

6.22 Closing A Socket That Uses UDP

6.23 Partial Close For UDP

6.24 A Warning About UDP Unreliability

6.25 Summary

Chapter 7 Example Client Software

7.1 Introduction

7.2 The Importance Of Small Examples

7.3 Hiding Details

7.4 An Example Procedure Library For Client Programs

7.5 Implementation Of ConnectTCP

7.6 Implementation Of connected

7.7 A Procedure That Forms Connections

7.8 Using The Example Library

7.9 The DAYTIME Service

7.10 Implementation Of A TCP Client For DAYTIME

7.11 Reading From A TCP Client For DAYTIME

7.12 The TIME Service

7.13 Accessing The TIME Service

7.14 Accurate Times And Network Delays

7.15 A UDP Client For The TIME Service

7.16 The ECHO Service

7.17 A TCP Client For The ECHO Service

7.18 A TCP Client For The ECHO Service

7.19 Summary

Chapter 8 Algorithms And Lssues In Server Software Design

8.1 Introduction

8.2 The Conceptual Server Algorithm

8.3 Concurrent Vs.Iterative Servers

8.4 Connection-Oriented Vs.Connectionless Access

8.5 Connection-Oriented Servers

8.6 Connectionless Servers

8.7 Failure,Reliability,And Statelessness

8.8 Optimizing Stateless Servers

8.9 Four Basic Types Of Servers

8.10 Request Processing Time

8.11 Iterative Server Algorithms

8.12 An Iterative,Connection-Oriented Server Algorithm

8.13 Binding To A Well-Known Address Using INADDR-ANY

8.14 Placing The Socket In Passive Mode

8.15 Acceptin Connections And Using Them

8.16 An Iterative,Connectionless Server Algorithm

8.17 Forming A Reply Address In A Connectionless Server

8.18 Concurrent Server Algorithms

8.19 Master And Slave Processes

8.20 A Concurrent,Connectionless Server Algorithm

8.21 A Concurrent,Connection-Oriented Server Algorithm

8.22 Using Separate Programs As Slaves

8.23 Apparent Concurrency Using A Single Process

8.24 When To Use Each Server Type

8.25 A Summary of Server Types

8.26 The Important Problem Of Server Deadlock

8.27 Alternative Implementations

8.28 Summary

Chapter 9 Iterative,Connectionless Servers(UDP)

9.1 Introduction

9.2 Creating A Passive Socket

9.3 Process Structure

9.4 An Example TIME Server

9.5 Summary

Chapter 10 Iterative,Connection-Oriented Servers(TCP)

10.1 Introduction

10.2 Allocating A Passive TCP Socket

10.3 A Server For The DAYTIME Service

10.4 Process Structure

10.5 An Example DAYTIME Server

10.6 Closing Connections

10.7 Connection Termination And Server Vulnerability

10.8 Summary

Chapter 11 Concurrent ,Connection-Oriented Servers(TCP)

11.1 Introduction

11.2 Concurrent ECHO

11.3 Iterative Vs.Concurrent Implementations

11.4 Process Structure

11.5 An Example Concurrent ECHO Server

11.6 Cleaning Up Errant Processes

11.7 Summary

Chapter 12 Single--Process,Concurrent Servers(TCP)

12.1 Introduction

12.2 Data-driven Processing In A Server

12.3 Data-DrivenProcessing With A Single Process

12.4 Process Structure Of A Single-Process Server

12.5 An Example Single-Process ECHO Server

12.6 Summary

Chapter 13 Multiprotocol Servers(TCP,UDP)

13.1 Introduction

13.2 The Motivation For Reducing The Number Of Servers

13.3 Multiprotocol Server Design

13.4 Process Structure

13.5 An Example Multiprotocol DAYTIME Server

13.6 The Concept Of Shared Code

13.7 Concurrent Multiprotocol Servers

13.8 Summary

Chapter 14 Mulitiservice Servers(TCP,UDP)

14.1 Introduction

14.2 Consolidation Servers

14.3 A Connectionless,Multiservice Server Design

14.4 A Connection-Oriented,Multiservice Server Design

14.5 A Concurrent,Connection-Oriented,Multiservice Server

14.6 A Single-Process,Multiservice Server Implementation

14.7 Invoking Separate Programs From A Multiservice Server

14.8 Multiservice,Multiprotocol Designs

14.9 An Example Multiservice Server

14.10 Static and Dynamic Server Configuration

14.11 The UNIX Super Server,Inetd

14.12 An Example Inetd Server

14.13 Summary

Chapter 15 Uniform,Efficient Management Of Server Concurrency

15.1 Introduction

15.2 Choosing Between An Iterative And A Concurrent Design

15.3 Level Of Concurrency

15.4 Demand-Driven Concurrency

15.5 The Cost Of Concurrency

15.6 Overhead And Delay

15.7 Small Delays Can Matter

15.8 Process Percolation

15.8.1 Percolation Techniques

15.8.2 Percolation In A Connection-Oriented Server

15.8.3 Percolation In A Connectionless Server

15.8.4 Percolation Burst Traffic ,And NFS

18.8.5 Preallocation On A Multiprocessor

15.9 Delayed Process Allocation

15.10 The Uniform Basis For Both Techniques

15.11 Combining Techniques

15.12 Summary

Chapter 16 Concurrency In Clients

16.1 Introduction

16.2 The Advantages Of Concurrency

16.3 The Motivation For Exercising Control

16.4 Concurrent Contact With Multiple Servers

16.5 Implementing Concurrent Clients

16.6 Single-Process Implementations

16.7 An Example Concurrent Client That Uses ECHO

16.8 Execution Of The Concurrent Client

16.9 Concurrency In The Example Code

16.10 Summary

Chapter 17 Tunneling At The Transport And Application Levels

17.1 Introduction

17.2 Multiprotocol Environments

17.3 Mixing Network Technologies

17.4 Dynamic Circuit Allocation

17.5 Encapsulation And Tunneling

17.6 Tunneling Through An IP Internet

17.7 Application-Level Tunneling Between Clients And Servers

17.8 Tunneling,Encapsulation,And Dialup Phone Lines

17.9 Summary

Chapter 18 Application Level Gateways

18.1 Introduction

18.2 Clients And Servers In Constrained Environments

18.2.1 The Reality Of Multiple Technologies

18.2.2 Computers With Limited Functionality

18.2.3 Connectivity ConstraintsThat Aries From Security

18.3 Using Application Gateways

18.4 Interoperability Through A Mail Gateway

18.5 Implementation Of A Mail Gateway

18.6 A Comparison Of Application Gateways And Tunneling

18.7 Application Gateways And Limited Functionality Systems

18.8 Application Gateways Used For Security

18.9 Application Gateways And The Extra Hop Problem

18.10 An Example Application Gateway

18.11 Implementation Of An Application Gateway

18.12 Code For The Application Gateway

18.13 An Example Gateway Exchange

18.14 Using RFD With UNIX's forward

18.15 A General-Purpose Application Gateway

18.16 Operation Of SLURP

18.17 How SLURP Handles Connections

18.18 IP A dressing And SLURP

18.19 Summary

Chapter 19 External Data Representation(XDR)

19.1 Introduction

19.2 Representations For Data In Computers

19.3 The N-Squared Conversion Problem

19.4 Network Standard Byte Order

19.5 A De Facto Standard External Data Representation

19.6 XDR Data Types

19.7 Implicit Types

19.8 Software Support For Using XDR

19.9 XDR Library Routines

19.10 Building A Message One Piece At A Time

19.11 Conversion Routines In The XDR Library

19.12 XDR Streams,I/O,and TCP

19.13 Records,Record Boundaries,And Datagram I/O

19.14 Summary

Chapter 20 Remote Procedure Call Concept(RPC)

20.1 Introduction

20.2 Remote Procedure Call Model

20.3 Two Paradigms For Building Distributed Programs

20.4 A Conceptual Model For Conventional Procedure Calls

20.5 An Extension Of the Procedural Model

20.6 Execution Of Conventional Procedure Call And Return

20.7 The Procedural Model In Distributed Systems

20.8 Analogy Between Client-Server And RPC

20.9 Distributed Computation As A Program

20.10 Sun Microsystems'Remote Procedure Call Defamation

20.11 Remote Programs And Procedures

20.12 Reducing The Number Of Arguments

20.13 Identifying Remote programs And Procedures

20.14 Accommodation Multiple Versions Of A Remote Program

20.15 Mutual Exclusion For Procedures In A Remote Program

20.16 Communication Semantics

20.17 At Least Once Semantics

20.18 RPC Retransmission

20.19 Mapping A Remote Program To A Remote Procedure

20.20 Dynamic Port Mapping

20.21 RPC Port Mapped Algorithm

20.22 RPC Message Format

20.23 Marshaling Arguments For A Remote Procedure

20.24 Authentication

20.25 An Example Of RPC Message Representation

20.26 An Example Of The UNIX Authentication Field

20.27 Summary

Chapter 21 Distributed Program Generation(Rpcgen Concept)

21.1 Introduction

21.2 Using Rremote Procedure Calls

21.3 Programming Mechanisms To Support RPC

21.4 Dividing A Program Into Local And Remote Procedures

21.5 Adding Code For RPC

21.6 Stub Procedures

21.7 Multiple Remote Procedures And Dispatching

21.8 Name Of The Client-Side Stub Procedure

21.9 Using Rpcgen To Generate Distributed Programs

21.10 Rpcgen Output And Interface Procedures

21.11 Rpcgen Input And Interface Procedures

21.12 Using Remote To Build A Client And Server

21.13 Summary

Chapter 22 Distributed Program Generation (Rpcgen EXAMPLE)

22.1 Introduction

22.2 An Example To Illustrate Rpcgen

22.3 Dictionary Look Up

22.4 Eight Steps To A Distributed Application

22.5 Step 1 :Build A Conventional Application Program

22.6 Step 1:Dived The Program Into Two Parts

22.7 Step 2:Create An Rrpcgen Specification

22.8 Step 4:Run Rpcgen

22.9 The .h File Produced By Rpcgen

22.10 The XDR Conversion File Produced By Rpcgen

22.11 The Client Code Produced By Rpcgen

22.12 The Server Code Produced By Rpcgen

22.13 Step 5:Write Stub Interface Procedures

22.13.1 Client-Side Interface Routines

22.13.2 Server-Side Interface Routines

22.14 Step 6:Compile And Link The Client Program

22.15 Step 7:Compile And Link The Server Program

22.16 Step 8:Start The Link The Server Program

22.17 Using The UNIX Make Utility

22.18 Summary

Chapter 23 Network File System Concepts(NFS)

23.1 Introduction

23.2 Remote File Access Vs.Transfer

23.3 Operations On Remote FILES

23.4 File Access Among Heterogeneous Computers

23.5 Stateless Servers

23.6 NFS And UNIX File Semantics

23.7 Review Of The UNIX File System

23.7.1 Basic Definitions

23.7.2 A Byte Sequence Without Record Boundaries

23.7.3 A File's Owner And Group Identifiers

23.7.4 Protection And Access

23.7.5 The UNIX Open-Read-Write-Close Paradigm

23.7.6 UNIX Data Transfer

23.7.7 Permission To Search A Directory

23.7.8 UNIX Random Access

23.7.9 Seeking Beyond The End Of A UNIX File

23.7.10 UNIX File Position And Concurrent Access

23.7.11 Semantics Of Write During Concurrent Access

23.7.12 UNIX File Names And Paths

23.7.13 The UNIX Inode:Information Stored With A File

23.7.14 The UNIX Stat Operation

23.7.15 The UNIX File Naming Mechanism

23.7.16 UNIX File System Mounts

23.7.17 UNIX File Name Resolution

23.7.18 UNIX Symbolic Links

23.8 Files Under NFS

23.9 NFS File Types

23.10 NFS File Modes

23.11 NFS File Attributes

23.12 NFS Client And Server

23.13 NFS Client Operation

23.14 NFS Client And UNIX

23.15 NFS Mounts

23.16 File Handle

23.17 Handles Replace Path Names

23.18 An NFS Client In UNIX

23.19 File Positioning With A Stateless Server

23.20 Operations On Directories

23.21 Reading A Directory Statelessly

23.22 Multiple Hierarchies In An NFS Server

23.23 The Mount Protocol

23.24 Summery

Chapter d24 Network File System protocol(NFS,Mount)

24.1 Introduction

24.2 Using RPC To Define A Protocol

24.3 Defining A Protocol With Data Structures And Procedures

24.4 NFS Constant,Type ,And Data Declarations

24.4.1 NFS Constants

24.4.2 NFS Typedef Declarations

24.4.3 NFS Data Structures

24.5 NFS Procedures

24.6 Semantics Of NFS Operations

24.6.1 NFSPROC_NULL

24.6.2 NFSPROC_GETATTR

24.6.3 NFSPROC_SETATTR

24.6.4 NFSPROC_ROOT

24.6.5 NFSPROC_LOOKUP

24.6.6 NFSPROC_READLINK

24.6.7 NFSPROC_READ

24.6.8 NFSPROC_WRITECACHE

24.6.9 NFSPROC_WRITE

24.6.10 NFSPROC_CREATE

24.6.11 NFSPROC_REMOVE

24.6.12 NFSPROC_RENAME

24.6.13 NFSPROC_LINK

24.6.14 NFSPROC_SYMLINK

24.6.15 NFSPROC_MKDIR

24.6.16 NFSPROC_RMDIR

24.6.17 NFSPROC_READDIR

24.6.18 NFSPROC_STATFS

24.7 The Mount Protocol

24.7.1 Mount constant Definitions

27.4.2 Mount Type Definitions

27.7.3 Mount Data Structures

24.8 Procedures In The Mount Protocol

24.9 Semantics of Mount Operations

24.9.1 MNTPROC_NULL

24.9.2 MNTPROC_MNT

24.9.3 MNTPROC_DUMP

24.9.4 MNTPROC_UMNT

24.9.5 MNTPROC_UMNTALL

24.9.6 MNTPROC_EXPORT

24.10 NFS And Mount Authentication

24.11 Changes In NFS Version 3

24.12 Summary

Chapter 25 A TELNET Client (Program Structure)

25.1 Introduction

25.2 Overview

25.2.1 The User's terminal

25.2.2 Command And Control Information

25.2.3 Terminals,Windows ,and Files

25.2.4 The Need for Concurrency

25.2.5 A Thread Modest For A TELNET Client

25.3 A TELNET Client Algorithm

25.4 Terminal I/O In UNIX

25.5 Establishing Terminal Modes

25.6 Global Variable Used For Stored State

25.7 Restoring Terminal Modes Before Exit

25.8 Client Suspension And Resumption

25.9 Finite State Machine Specification

25.10 Embedding Commands In A TELNET Data Stream

25.11 Option Negotiation

25.12 Request/Offer Symmetry

25.13 TELNET Character Definitions

25.14 A Finite State Machine For Data From The Server

25.15 Transitions Among States

25.16 A Finite State Machine Implementation

25.17 A Compact FSM Representation

25.18 Keeping The Compact Representatin At Run-Time

25.19 Implementation Of A Compact Representation

25.20 Building An FSM Transition Machine

25.21 The Socket Output Finite State Machine

25.22 Definitions For The Socket Output FSM

25.23 The Option Subnegotiation Finite State Machine

25.24 Definitions For The Option Subnegotiation FSM

25.25 FSM Initialization

25.26 Arguments For The TELNET Client

25.27 The Heart Of The TELNET Client

25.28 Implementation Of The Main FSM

25.29 Summary

Chapter 26 A TELNET Client (Implementation Details)

26.1 Introduction

26.2 The FSM Action Procedures

26.3 Recording The Type Of An Option Request

26.4 Performing No Operation

26.5 Responding To WILL/WONT For The Echo Option

26.6 Responding To WILL/WONT For Unsupported Options

26.7 Responding To WILL/WONT For The No Go-Ahead Option

26.8 Generating DO/DONT For Binary Transmission

26.9 Responding To DO/DONT For Unsupported Options

26.10 Responding To DO/DONT For Transmit Binary Option

26.11 Responding To DO/DONT For The Terminal Type Option

26.12 Option Subnegotiation

26.13 Sending Terminal Type Information

26.14 Terminating Subnegotiation

26.15 Sending A Character To The Server

26.16 Displaying Incoming Data On The User's Terminal

26.17 Using Tarmac To Control The User's Terminal

26.18 Writing A Block Of Data To The Server

26.19 Interacting With The Client Process

26.20 Responding To Illegal Commands

26.21 Scripting To A File

26.22 Implementation Of Scripting

26.23 Initialization Of Scripting

26.24 Collecting Characters Of The Script File Name

26.25 Opening A Script File

26.26 Terminating Scripting

26.27 Pruning Status Information

26.28 Summary

Chapter 27 Practical Hints And Techniques For UNIX Servers

27.1 Introduction

27.2 Operation In Gakground

27.3 Progranuning A Server To Operate In Background

27.4 Open Descriptors And Inheritance

27.5 Programming A Server To Close Inherited Descriptors

27.6 Signals From The Controlling TTY

27.7 Programming A Server To Change Its Controlling TTY

27.1 Generation Log Messages

27.8 Moving To A Safe And Known Directory

27.9 Programming A Server To Change Directories

27.10 The UNIX Unmask

27.11 Programming A Server To Set Its Unmask

27.12 Process Groups

27.13 Programming A Server To Set Its Pooches Group

27.14 Descriptors For Standard I/O

27.15 Programming A Server To Open Standard Descriptors

27.16 Mutual Exclusion For The Server

27.17 Programming A Server To Avoid Multiple Copies

27.18 Recording A Server's Process ID

27.19 Programming A Server To Record Its Process ID

27.20 Waiting For A Child Process To Exit

27.21 Programming A Server To Wait For Each Child To Exit

27.22 Extremes Sigma's

27.23 Programming A Server To Ignore Extremes Signals

27.24 Using A System Log Facility

27.25 Summary

Chapter 28 Deadlock And Starvation In Client-Server Systems

28.1 Introduction

28.2 Definition Of Deadlock

28.3 Difficulty Of Deadlock Detection

28.4 Deadlock Avoidance

28.5 Deadlock Between A Client And Server

28.6 Avoiding Deadlock In A Single Interaction

28.7 Starvation Among A Set Of Clients And A Server

28.8 Busy Connections And Starvation

28.9 Avoiding Blocking Operations

28.10 Processes,Connections,And Other Limits

28.11 Cycles Of Clients And Servers

28.12 Documenting Dependencies

28.13 Summary

Appendix 1 System Calls And Library Routines Used With Sockets

Appendix 2 Manipulation Of UNIX File And Socket Descriptors

Bibliography

Index