作為網絡程序員,你是否發現自己的應用程序遠遠不夠健壯?那么,你需要了解編寫高效TCP/IP程序所需的各種知識。本書正是這么一本經典著作,它專注于協議族中那些細微的特性,提煉出的44個技巧可立竿見影地提升編程能力。
《TCP/IP高效編程:改善網絡程序的44個技巧》在介紹這些技巧的同時,對TCP/IP編程的基本思想和概念進行了說明,結合大量實例透徹解析了TCP/IP中的實踐經驗以及法則,還說明了如何避免網絡編程中一些最常見的問題。書中提供的框架代碼和常用函數庫讓你能夠方便快捷地編寫出應用程序,而無需操心一些細枝末節。
書中對下列問題提出了寶貴建議:
IP編址、子網以及CIDR的研究
使用套接字接口代替XTI/TLI
使用兩條TCP連接
使應用程序成為事件驅動的
使用一次大規模寫操作代替多次小規模寫操作
避免數據復制
理解TCP可靠性的涵義
認識緩沖區大小帶來的影響
高效使用tcpdump、traceroute、netstat和ping
Jon Snader TCP/IP專家,Paradigm4的資深軟件工程師。他的工作領域包括通信、網絡、編譯器開發、操作系統以及無線網絡控制器等。最近主要從事公共安全市場的報文交換系統方面的工作。
第1章 概述
1.1 幾個約定
1.2 本書其余部分的內容介紹
1.3 客戶端—服務器結構
1.4 對基本套接字API的回顧
1.5 小結
第2章 基本概念
2.1 技巧1:理解面向連接和無連接協議之間的區別
2.2 技巧2:理解子網和CIDR的概念
2.2.1 分類編址
2.2.2 子網劃分
2.2.3 CIDR
2.2.4 子網劃分和CIDR的狀態
2.2.5 小結
2.3 技巧3:理解私有地址和NAT
2.4 技巧4:開發并使用應用程序“框架”
2.4.1 TCP服務器框架
2.4.2 TCP客戶端框架
2.4.3 UDP服務器框架
2.4.4 UDP客戶端框架
2.4.5 小結
2.5 技巧5:套接字接口比XTI/TLI更好用
2.6 技巧6:記住,TCP是一種流協議
2.7 技巧7:不要低估TCP的性能
2.7.1 UDP源程序與接收程序
2.7.2 TCP源程序及接收程序
2.7.3 小結
2.8 技巧8:避免重新編寫TCP
2.9 技巧9:要認識到TCP是一個可靠的,但并不絕對可靠的協議
2.9.1 可靠性——是什么,不是什么
2.9.2 故障模式
2.9.3 網絡中斷
2.9.4 對等實體崩潰
2.9.5 對等實體的主機崩潰
2.9.6 小結
2.10 技巧10:記住,TCP/IP不是輪詢的
2.10.1 保持活躍
2.10.2 心跳信號
2.10.3 另一個例子
2.10.4 小結
2.11 技巧11:提防對等實體的不友好動作
2.11.1 檢測客戶端的終止
2.11.2 檢測無效輸入
2.11.3 小結
2.12 技巧12:成功的LAN策略不一定能推廣到WAN中去
2.12.1 性能問題舉例
2.12.2 隱含錯誤舉例
2.12.3 小結
2.13 技巧13:了解協議是怎樣工作的
2.14 技巧14:不要把OSI七層參考模型太當回事
2.14.1 OSI模型
2.14.2 TCP/IP模型
2.14.3 小結
第3章 構建高效且健壯的網絡程序
3.1 技巧15:理解TCP的寫操作
3.1.1 從應用程序的角度看寫操作
3.1.2 從TCP角度看寫操作
3.1.3 小結
3.2 技巧16:理解TCP的有序釋放操作
3.2.1 shutdown調用
3.2.2 有序釋放
3.2.3 小結
3.3 技巧17:考慮用inetd來裝載應用程序
3.3.1 TCP服務器
3.3.2 UDP服務器
3.3.3 小結
3.4 技巧18:考慮用tcpmux為服務器“分配”知名端口
3.5 技巧19:考慮使用兩條TCP連接
3.5.1 單連接結構
3.5.2 雙連接架構
3.5.3 小結
3.6 技巧20:使應用程序成為事件驅動的(1)
3.7 技巧21:使應用程序成為事件驅動的(2)
3.8 技巧22:不要用TIME-WAIT暗殺來關閉一條連接
3.8.1 它是什么
3.8.2 為什么要使用它
3.8.3 TIME-WAIT暗殺
3.8.4 小結
3.9 技巧23:服務器應該設置SO_REUSEADDR選項
3.10 技巧24:可能的話,使用一個大規模的寫操作,而不是多個小規模的寫操作
3.10.1 禁用Nagle算法
3.10.2 將寫操作合并起來
3.10.3 小結
3.11 技巧25:理解如何使connect調用超時
3.11.1 使用告警
3.11.2 使用select
3.11.3 小結
3.12 技巧26:避免數據復制
3.12.1 共享內存緩沖區
3.12.2 一個共享內存緩沖區系統
3.12.3 一個UNIX實現
3.12.4 一個Windows實現
3.12.5 小結
3.13 技巧27:使用前將結構sockadddr_in清零
3.14 技巧28:不要忘記字節的性別
3.15 技巧29:不要將IP地址或端口號硬編入應用程序中
3.16 技巧30:理解已連接的UDP套接字
3.17 技巧31:記住,并不是所有程序都是用C編寫的
3.18 技巧32:理解緩沖區長度帶來的影響
第4章 工具和資源
4.1 技巧33:熟悉ping實用工具
4.2 技巧34:學習使用tcpdump或類似的工具
4.2.1 tcpdump是如何工作的
4.2.2 使用tcpdump
4.2.3 tcpdump的輸出
4.2.4 小結
4.3 技巧35:學習使用traceroute
4.3.1 traceroute是如何工作的
4.3.2 Windows TRACERT
4.3.3 小結
4.4 技巧36:學習使用ttcp
4.5 技巧37:學習使用lsof
4.6 技巧38:學習使用netstat
4.6.1 活動套接字
4.6.2 接口
4.6.3 路由表
4.6.4 協議統計
4.6.5 Windows版的netstat
4.6.6 小結
4.7 技巧39:學習使用系統中的調用追蹤工具
4.7.1 過早終止
4.7.2 ttcp性能問題
4.7.3 小結
4.8 技巧40:構建并使用捕獲ICMP報文的工具
4.8.1 讀取ICMP報文
4.8.2 打印ICMP報文
4.8.3 小結
4.9 技巧41:讀Stevens的書
4.9.1 《TCP/IP詳解》叢書
4.9.2 《UNIX網絡編程》叢書
4.10 技巧42:閱讀代碼
4.11 技巧43:訪問RFC編輯者的頁面
4.12 技巧44:經常訪問新聞組
附錄A 各種UNIX代碼
附錄B 各種Windows代碼
參考書目
索引