第l章 引言和概述
1. 1 TCP/IP的使用
1. 2 為分布式環(huán)境設計應用程序
1. 3 標準和非標準的應用協(xié)議
1. 4 使用標準應用協(xié)議的例子
1. 5 一個連接的例子
1. 6 使用TELNET訪問其他服務
1. 7 應用協(xié)議和軟件的靈活性
1. 8 從提供者的角度看服務
1. 9 本教材的其余部分
1. 10 小結
第2章 客戶機—服務器模型與軟件設計
2. 1 引言
2. 2 動機
2. 3 術語和概念
2. 3. 1 客戶機和服務器
2. 3. 2 特權和復雜性
2. 3. 3 標準的和非標準的客戶機軟件
2. 3. 4 客戶機的參數(shù)化
2. 3. 5 無連接的和面向無連接的服務器
2. 3. 6 無狀態(tài)的和有狀態(tài)的服務器
2. 3. 7 一個有狀態(tài)的服務器的例子
2. 3. 8 無狀態(tài)是一個協(xié)議問題
2. 3. 9 作為客戶機的服務器
2. 4 小結
第3竄 客戶機—服務器軟件中的并發(fā)處理
3. 1 引言
3. 2 網絡中的并發(fā)性
3. 3 服務器中的并發(fā)性
3. 4 術語和概念
3. 4. 1 進程概念
3. 4. 2 程序與進程
3. 4. 3 過程調用
3. 5 一個創(chuàng)建并發(fā)進程的例子
3. 5. 1 一個順序執(zhí)行的C實例
3. 5. 2 程序的并發(fā)版
3. 5. 3 時間分片
3. 5. 4 使各進程分離
3. 6 執(zhí)行新的代碼
3. 7 上下文切換和協(xié)議軟件設計
3. 8 并發(fā)性和異步I/O
3. 9 小結
第4章 協(xié)議的程序接口
4. 1 引言
4. 2 不精確指明的協(xié)議軟件接口
4. 2. 1 優(yōu)點與缺點
4. 3 接口功能
4. 4 概念性接口的規(guī)格說明
4. 5 系統(tǒng)調用
4. 6 網絡通信的兩種基本方法
4. 7 UNIX中所提供的基本I/O功能
4. 8 用UNIX I/O結合TCP/IP
4. 9 小結
第5章 插口接口
5. 1 引言
5. 2 Berkeley的插口
5. 3 指明一個協(xié)議接口
5. 4 插口的抽象
5. 4. 1 插口描述符和文件描述符
5. 4. 2 針對插口的系統(tǒng)數(shù)據(jù)結構
5. 4. 3 使用插口
5. 5 指明端點地址
5. 6 類屬地址結構
5. 7 與插口一同使用的主要的系統(tǒng)調用
5. 7. 1 socket調用
5. 7. 2 connect調用
5. 7. 3 write調用
5. 7. 4 read調用
5. 7. 5 c1ose調用
5. 7. 6 bind調用
5. 7. 7 1isten調用
5. 7. 8 accept調用
5. 7. 9 TCP所使用的插口調用小結
5. 8 用于整數(shù)轉換的實用例程
5. 9 在程序中使用插口調用
5. 10 插口調用的參數(shù)所使用的符號常量
5. 11 小結
第6章 客戶機軟件設計中的算法和問題
6. 1 引言
6. 2 不是研究細節(jié)而是學習算法
6. 3 客戶機體系結構
6. 4 標識一個服務器的位置
6. 5 分析地址參數(shù)
6. 6 查找域名
6. 7 由名字查找某個知名端口
6. 8 端口號和網絡字節(jié)序
6. 9 由名字查找協(xié)議
6. 10 TCP客戶機算法
6. 11 分配一個插口
6. 12 選擇一個本地協(xié)議端口號
6. 13 選擇本地IP地址中的一個基本問題
6. 14 將一個TCP插口連接到某個服務器
6. 15 使用TCP與服務器通信
6. 16 從一個TCP連接中讀取響應
6. 17 關閉TCP連接
6. 17. 1 對部分關閉(partial close)的需要
6. 17. 2 部分關閉的操作
6. 18 UDP客戶機的編程
6. 19 連接的和非連接的UDrP插口
6. 20 對UDP使用connect
6. 21 使用UDP與服務器通信
6. 22 關閉一個使用UDP的插口
6. 23 對UDP的部分關閉
6. 24 關于UDP不可靠性的警告
6. 25 小結
第7章 客戶機軟件舉例
7. 1 引言
7. 2 小例子的重要性
7. 3 隱藏細節(jié)
7. 4 針對客戶機程序的過程庫例子
7. 5 connectTCP的實現(xiàn)
7. 6 connectUDP的實現(xiàn)
7. 7 構成連接的過程
7. 8 使用例子庫
7. 9 DAYTIME服務
7. 10 針對DAYTIME的TCP客戶機實現(xiàn)
7. 11 從TCP連接中進行讀
7. 12 TIME服務
7. 13 訪問TIME服務
7. 14 精確時間和網絡時延
7. 15 針對TIME服務的UDP客戶機
7. 16 ECHO服務
7. 17 針對ECHO服務的TCP客戶機
7. 18 針對ECHO服務的UDP客戶機
7. 19 小結
第8章 服務器軟件設計的算法和問題
8. 1 引言
8. 2 概念性的服務器算法
8. 3 并發(fā)服務器和循環(huán)服務器
8. 4 面向連接的和無連接的訪問
8. 5 面向連接的服務器
8. 6 無連接的服務器
8. 7 故障. 可靠性和無狀態(tài)
8. 8 優(yōu)化無狀態(tài)服務器
8. 9 四種基本類型的服務器
8. 10 請求處理時間
8. 11 循環(huán)服務器的算法
8. 12 一種循環(huán)的. 面向連接的服務器的算法
8. 13 用INADDR_ANY綁定一個知名端口
8. 14 將插口置于被動模式
8. 15 接受連接并使用這些連接
8. 16 一個循環(huán)的. 無連接的服務器的算法
8. 17 在無連接的服務器中構造一個應答
8. 18 并發(fā)服務器的算法
8. 19 主進程和從進程
8. 20 并發(fā)的. 無連接的服務器的算法
8. 21 并發(fā)的. 面向連接服務器的算法
8. 22 把單獨的程序作為從進程來使用
8. 23 使用單個進程獲得表面上的并發(fā)性
8. 24 各服務器類型所適用的場合
8. 25 服務器類型小結
8. 26 重要問題——服務器死鎖
8. 27 其他的實現(xiàn)方法
8. 28 小結
第9章 循環(huán)的. 無連接服務器(UDP)
9. 1 引言
9. 2 創(chuàng)建一個被動插口
9. 3 進程結構
9. 4 TIME服務器舉例
9. 5 小結
第10章 循環(huán)的. 面向連接的服務器(TCP)
10. 1 引言
10. 2 分配一個被動的TCP插口
10. 3 用于DAYTIME服務的服務器
10. 4 進程結構
10. 5 DAYTIME服務器舉例
10. 6 關閉連接
10. 7 連接終止和服務器的脆弱性
10. 8 小結
第11章 并發(fā)的. 面向連接的服務器(TCP)
11. 1 引言
11. 2 并發(fā)ECHO
11. 3 循環(huán)與并發(fā)實現(xiàn)的比較
11. 4 進程結構
11. 5 并發(fā)ECHO服務器舉例
11. 6 清除游離(errant)進程
11. 7 小結
第12章 單進程. 并發(fā)服務器(TCP)
12. 1 引言
12. 2 服務器中的數(shù)據(jù)驅動處理
12. 3 用單個進程進行數(shù)據(jù)驅動處理
12. 4 單個進程服務器的進程結構
12. 5 單進程ECHO服務器舉例
12. 6 小結
第13章 多協(xié)議服務器(TCP, UDP)
13. 1 引言
13. 2 減少服務器數(shù)量的動機
13. 3 多協(xié)議服務器的設計
13. 4 進程結構
13. 5 一個多協(xié)議DAYTIME服務器的例子
13. 6 共享代碼的概念
13. 7 并發(fā)多協(xié)議服務器
13. 8 小結
第14章 多服務服務器(TCP, UDP)
14. 1 引言
14. 2 合并服務器
14. 3 無連接的. 多服務服務器的設計
14. 4 面向連接的. 多服務服務器的設計
14. 5 并發(fā)的. 面向連接的. 多服務服務器
14. 6 單進程的. 多服務服務器的實現(xiàn)
14. 7 從多服務服務器調用單獨的程序
14. 8 多服務. 多協(xié)議設計
14. 9 多服務服務器的例子
14. 10 靜態(tài)的和動態(tài)的服務器配置
14. 11 UNIX超級服務器, inetd
14. 12 inetd服務器的例子
14. 13 小結
第15章 服務器并發(fā)性的統(tǒng)一. 高效管理
15. 1 引言
15. 2 在循環(huán)設計和并發(fā)設計間選擇
15. 3 并發(fā)等級
15. 4 需求驅動的并發(fā)
15. 5 并發(fā)的代價
15. 6 額外開銷和時延
15. 7 小時延可能出麻煩
15. 8 進程預分配
15. 8. 1 UNIX中的預分配
15. 8. 2 面向連接服務器中的預分配
15. 8. 3 無連接服務器中的預分配
15. 8. 4 預分配. 突發(fā)通信量和NFS
15. 8. 5 多處理器上的進程預分配
15. 9 延遲的進程分配
15. 10 兩種技術統(tǒng)一的基礎
15. 11 技術的結合
15. 12 小結
第16章 客戶機中的并發(fā)
16. 1 引言
16. 2 并發(fā)的優(yōu)點
16. 3 運用控制的動機
16. 4 與多個服務器的并發(fā)聯(lián)系
16. 5 實現(xiàn)并發(fā)客戶機
16. 6 單個進程的實現(xiàn)
16. 7 一個使用ECHO的并發(fā)客戶機
16. 8 并發(fā)客戶機的執(zhí)行
16. 9 例子代碼中的并發(fā)性
16. 10 小結
第17章 運輸層和應用層的隧道技術
17. 1 引言
17. 2 多協(xié)議環(huán)境
17. 3 混合網絡技術
17. 4 動態(tài)電路分配
17. 5 封裝和隧道技術
17. 6 通過IP互連網的隧道技術
17. 7 客戶機和服務器之間的應用級隧道技術
17. 8 隧道技術. 封裝和電話撥號線
17. 9 小結
第18章 應用級網關
18. 1 引言
18. 2 在受約束的環(huán)境中的客戶機和服務器
18. 2. 1 多種技術的現(xiàn)實
18. 2. 2 有限功能的計算機
18. 2. 3 安全性引起的連通性約束
18. 3 使用應用網關
18. 4 通過郵件網關互操作
18. 5 郵件網關的實現(xiàn)
18. 6 應用網關與隧道技術的比較
18. 7 應用網關和有限功能系統(tǒng)
18. 8 為解決安全問題而使用的應用網關
18. 9 應用網關和額外跳問題
18. 10 應用網關舉例
18. 11 一個應用網關的實現(xiàn)
18. 12 應用網關的代碼
18. 13 網關交換的例子
18. 14 使用rfcd和UNIX的. forward文件
18. 15 一個通用的應用網關
18. 16 SURP的運行
18. 17 SLIRP如何處理連接
18. 18 IP尋址和SLIRP
18. 19 小結
第19章 外部數(shù)據(jù)表示(xDR]
19. 1 引言
19. 2 計算機中的數(shù)據(jù)表示
19. 3 N平方轉換問題
19. 4 網絡標準字節(jié)序
19. 5 外部數(shù)據(jù)表示的事實上的標準
19. 6 XDR數(shù)據(jù)類型
19. 7 隱含類型
19. 8 使用XDR的軟件支持
19. 9 XDR庫例程
19. 10 一次一片地構造一個報文
19. 11 XDR庫中的轉換例程
19. 12 XDR流. I/O和TCP
19. 13 記錄. 記錄邊界和數(shù)據(jù)報I/O
19. 14 小結
第20章 遠程過程調用(RPC)的榴念
20. 1 引言
20. 2 遠程過程調用模型
20. 3 構建分布式程序的兩種模式
20. 4 傳統(tǒng)的過程調用的概念性模型
20. 5 過程模型的擴充
20. 6 傳統(tǒng)過程調用的執(zhí)行和返回
20. 7 分布式系統(tǒng)中的過程模型
20. 8 客戶機—服務器和RPC之間的類比
20. 9 作為一個程序的分布式計算
20. 10 Sun Microsystems的遠程過程調用定義
20. 11 遠程程序和過程
20. 12 減少參數(shù)的數(shù)量
20. 13 標識遠程程序和過程
20. 14 適應遠程程序的多個版本
20. 15 遠程程序中的互斥
20. 16 通信語義
20. 17 至少一次語義
20. 18 RPC重傳
20. 19 將一個遠程程序映射到一個協(xié)議端口
20. 20 動態(tài)端口映射
20. 21 RPC端口映射器算法
20. 22 ONCRPC的報文格式
20. 23 對遠程過程進行參數(shù)序列化
20. 24 鑒別
20. 25 RPC報文表示的一個例子
20. 26 UNIX鑒別字段的例子
20. 27 小結
第21章 分布式程序的生成
21. 1 引言
21. 2 使用遠程過程調用
21. 3 支持RPC的編程工具
21. 4 將一個程序劃分成本地過程和遠程過程
21. 5 為RPC增加代碼
21. 6 stub過程
21. 7 多個遠程過程和分派
21. 8 客戶機端的stub過程的名字
21. 9 使用rpcgen生成分布式程序
21. 10 rpcgen輸出和接口過程
21. 11 rpcgen的輸入和輸出
21. 12 使用rpcgen構建客戶機和服務器
21. 13 小結
第22章 分布式程序的生成(rpcgen的例子)
22. 1 引言
22. 2 一個說明rpcgen的例子
22. 3 查找字典
22. 4 一個分布式程序的八個步驟
22. 5 步驟1:構建一個常規(guī)的應用程序
22. 6 步驟2:將程序劃分成兩部分
22. 7 步驟3:創(chuàng)建一個rpcgen規(guī)格說明
22. 8 步驟4:運行rpcgen
22. 9 rpcgen產生的. h文件
22. 10 rpcgen產生的XDR轉換文件
22. 11 rpcgen產生的客戶機代碼
22. 12 rpcgen產生的服務器代碼
22. 13 步驟5:編寫stub接口過程
22. 13. 1 客戶機端接口例程
22. 13. 2 服務器端接口例程
22. 14 步驟62編譯并鏈接客戶機程序
22. 15 步驟7:編譯和鏈接服務器程序
22. 16 步驟8:啟動服務器和執(zhí)行客戶機
22. 17 使用UNIX的make實用程序
22. 18 小結
第23章 網絡文件系統(tǒng)(NFS)的概念
23. 1 引言
23. 2 遠程文件存取和傳輸
23. 3 對遠程文件的操作
23. 4 異構計算機之間的文件存取
23. 5 無狀態(tài)服務器
23. 6 NFS和UNIX的文件語義
23. 7 UNIX文件系統(tǒng)的回顧
23. 7. 1 基本定義
23. 7. 2 無記錄界限的字節(jié)序列
23. 7. 3 文件擁有者和組標識符
23. 7. 4 保護和存取
23. 7. 5 打開—讀—寫—關閉范例
23. 7. 6 數(shù)據(jù)傳輸
23. 7. 7 允許搜索目錄
23. 7. 8 隨機存取
23. 7. 9 搜索超過文件的結束
23. 7. 10 文件位置和并發(fā)存取
23. 7. 11 在并發(fā)存取時的“寫(write)”語義
23. 7. 12 文件名和路徑
23. 7. 13 索引結點(inode):存儲在文件中的信息
23. 7. 14 stat操作
23. 7. 15 文件命名機制
23. 7. 16 文件系統(tǒng)mount
23. 7. 17 UNIX文件名解析
23. 7. 18 符號鏈接
23. 8 NFS下的文件
23. 9 NFS的文件類型
23. 10 NFS文件模式
23. 11 NFS文件屬性
23. 12 NFS客戶機和服務器
23. 13 NFS客戶機操作
23. 14 NFS客戶機與UNIX
23. 15 NFS mount
23. 16 文件句柄
23. 17 句柄取代路徑名
23. 18 在UNIX中的NFS客戶機
23. 19 無狀態(tài)服務器的文件定位
23. 20 對目錄的操作
23. 21 無狀態(tài)地讀目錄
23. 22 NFS服務器中的多個分層結構
23. 23 安裝(mount)協(xié)議
23. 24 小結
第24章 網餡文件系統(tǒng)協(xié)議(NFS, Mount)
24. 1 引言
24. 2 用RPC定義協(xié)議
24. 3 用數(shù)據(jù)結構和過程定義協(xié)議
24. 4 NFS常數(shù). 類型和數(shù)據(jù)聲明
24. 4. 1 NFS常數(shù)
24. 4. 2 NFS的typedef聲明
24. 4. 3 NFS數(shù)據(jù)結構
24. 5 NFS過程
24. 6 NFS操作的語義
24. 6. 1 NFSPROC—NULL(過程0)
24. 6. 2 NFSPROC_GETATTR(過程1)
24. 6. 3 NFSPROC_SETATTR(過程2)
24. 6. 4 NFSPROC_ROOT(過程3)[在NFS3中已經不用]
24. 6. 5 NFSPROC_LOOKUP(過程4)
24. 6. 6 NFSPROC_READLINK(過程5)
24. 6. 7 NFSPROC_READ(過程6)
24. 6. 8 NFSPROC_WRITECACHE(過程7)[在NFS3已經不用]
24. 6. 9 NFSPROC_WRITE(過程8)
24. 6. 10 NFSPR(Xi—敝EAT2(過程9)
24. 6. 11 NFSPROC_REMOVE(過程10)
24. 6:12 NFSPROC_RENAME(過程11)
24. 6. 13 NFSPROC_LINK(過程12)
24. 6. 14 NFSPROC_SYMLINK(過程13)
24. 6. 15 NFSPROC_MKDIR(過程14)
24. 6. 16 NFSPROC_RMDIR(過程15)
24. 6. 17 NFSPROC_READDIR(過程16)
24. 6. 18 NFSPROC_STATFS(過程17)
24. 7 安裝協(xié)議
24. 7. 1 安裝協(xié)議的常數(shù)定義
24. 7. 2 安裝協(xié)議的類型定義
24. 7. 3 安裝數(shù)據(jù)結構
24. 8 安裝協(xié)議中的過程
24. 9 安裝操作的語義
24. 9. 1 MNTPROC_NULL(過程0)
24. 9. 2 MNTPROC_MNT(過程1)
24. 9. 3 MNTPROC_DUMP(過程2)
24. 9. 4 MNTPROC_UMNT(過程3)
24. 9. 5 MNTPROC_UMNTALL(過程4)
24. 9. 6 MN了PROC_ExPORT(過程5)
24. 10 NFS和安裝鑒別
24. 11 NFS版本3中的改變
24. 12 小結
第25章 TELNET客戶機(程序結構)
25. 1 引言
25. 2 概述
25. 2. 1 用戶終端
25. 2. 2 命令和控制信息
25. 2. 3 終端. 窗口和文件
25. 2. 4 對并發(fā)性的需要
25. 2. 5 TELNET客戶機的一個過程模型
25. 3 TELNET客戶機算法
25. 4 UNIX中的終端I/O
25. 4. 1 控制設備驅動器
25. 5 建立終端模式
25. 6 用于保存狀態(tài)的全局變量
25. 7 在退出之前恢復終端模式
25. 8 客戶機掛起與恢復
25. 9 有限狀態(tài)機的規(guī)格說明
25. 10 在TELNET數(shù)據(jù)流中嵌入命令
25. 11 選項協(xié)商
25. 12 請求/提供的對稱性
25. 13 TELNET字符定義
25. 14 針對來自服務器數(shù)據(jù)的有限狀態(tài)機
25. 15 在各種狀態(tài)之間轉移
25. 16 有限狀態(tài)機的實現(xiàn)
25. 17 壓縮的FSM表示
25. 18 在運行時維持壓縮表示
25. 19 壓縮表示的實現(xiàn)
25. 20 構造FSM轉移矩陣
25. 21 插口輸出有限狀態(tài)機
25. 22 插口輸出FSM的相關定義
25. 23 選項子協(xié)商有限狀態(tài)機
25. 24 選項子協(xié)商FSM的相關定義
25. 25 FSM初始化
25. 26 TELNET客戶機的參數(shù)
25. 27 TELNET客戶機的核心
25. 28 主FSM的實現(xiàn)
25. 29 小結
第26章 TELNET客戶機(實現(xiàn)細節(jié))
26. 1 引言
26. 2 FSM動作過程
26. 3 記錄選項請求的類型
26. 4 完成空操作
26. 5 對回顯選項的WILL/WONT做出響應
26. 6 對未被支持之選項的WILL/WONT做出響應
26. 7 對no g0—ahead選項的WILL/WONT做出響應
26. 8 生成用于二進制傳輸?shù)腄O/DONT
26. 9 對未被支持的選項的DO/DoNT做出響應
26. 10 對傳輸二進制選項的DO/DONT做出響應
26. 11 對終端類型選項的DO/DONT做出響應
26. 12 選項子協(xié)商
26. 13 發(fā)送終端類型信息
26. 14 終止子協(xié)商
26. 15 向服務器發(fā)送字符
26. 16 顯示在用戶終端上出現(xiàn)的入數(shù)據(jù)
26. 17 使用tenncap控制用戶終端
26. 18 將數(shù)據(jù)塊寫到服務器
26. 19 與客戶機進程交互
26. 20 對非法命令做出響應
26. 21 腳本描述文件
26. 22 腳本描述的實現(xiàn)
26. 23 初始化腳本描述
26. 24 收集腳本文件名的字符
26. 25 打開腳本文件
26. 26 終止腳本描述
26. 27 打印狀態(tài)信息
26. 28 小結
第27章 UNIX服務器中的實用技巧和技術
27. 1 引言
27. 2 后臺操作
27. 3 編寫在后臺運行的服務器
27. 4 打開描述符和繼承
27. 5 對服務器編程以關閉所繼承的描述符
27. 6 來自控制TTY的信號
27. 7 對服務器編程以改變它的控制TTY
27. 8 轉移到一個安全的和已知的目錄
27. 9 對服務器編程以改變目錄
27. 10 UNIX umask
27. 11 對服務器編程以設置其umask
27. 12 進程組
27. 13 對服務器編程以設置其進程組
27. 14 用于標準I/O的描述符
27. 15 對服務器編程以打開標準描述符
27. 16 服務器用的互斥
27. 17 對服務器編程以避免多個副本
27. 18 記錄服務器的進程ID
27. 19 對服務器編程以記錄其進程ID
27. 20 等待一個子進程退出
27. 2l 對服務器編程以等待每個子進程退出
27. 22 外來信號
27. 23 對服務器編程以忽略外來信號
27. 24 使用系統(tǒng)日志設施
27. 24. 1 產生日志報文
27. 24. 2 間接方式和標準差錯的優(yōu)點
27. 24. 3 I/O重定向的限制
27. 24. 4 客戶機—服務器的解決方案
27. 24. 5 syslog機制
27. 24. 6 syslog吧的報文類
27. 24. 7 syslog的設施
27. 24. 8 syslog的優(yōu)先級
27. 24. 9 使用syslog
27. 24. 10 syslog配置文件舉例
27. 25 小結
第28章 客戶機—服務器系統(tǒng)中的死鎖和餓死
28. 1 引言
28. 2 死鎖的定義
28. 3 死鎖檢測的難度
28. 4 避免死鎖
28. 5 一個客戶機和服務器間的死鎖
28. 6 在單個交互中避免死鉸
28. 7 一組客戶機和一個服務器之間的餓死
28. 8 忙連接和餓死
28. 9 避免阻塞的操作
28. 10 進程. 連接和其他限制
28. 11 客戶機和服務器的循環(huán)
28. 12 用文檔確認依賴性
28. 13 小結
附錄1 系統(tǒng)調用與插口使用的庫例程
附錄2 UNIX文件和插口描述符的操作
參考文獻