具体描述
内容简介
《TCP/IP详解·卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》是“TCP/IP详解系列”的延续。主要内容包括:TCP事务协议,即T/TCP,这是对TCP的扩展,使客户-服务器事务更快、更高效和更可靠;TCP/IP应用,主要是HTTP和NNTP;UNIX域协议,这些协议提供了进程之间通信的一种手段。当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍。《TCP/IP详解·卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》同样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序。适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。
内页插图
目录
译者序
前言
第一部分 CP事务协议
第1章 /CP概述
1.1 概述
1.2 UDP上的客户-服务器
1.3 CP上的客户-服务器
1.4 /CP上的客户-服务器
1.5 测试网络
1.6 时间测量程序
1.7 应用
1.8 历史
1.9 实现
1.10 小结
第2章 /CP协议
2.1 概述
2.2 /CP中的新CP选项
2.3 /CP实现所需变量
2.4 状态变迁图
2.5 /CP的扩展状态
2.6 小结
第3章 /CP使用举例
3.1 概述
3.2 客户重新启动
3.3 常规的/CP事务
3.4 服务器收到过时的重复SY
3.5 服务器重启动
3.6 请求或应答超出报文段最大长度MSS
3.7 向后兼容性
3.8 小结
第4章 /CP协议(续)
4.1 概述
4.2 客户的端口号和IME_WAI状态
4.3 设置IME_WAI状态的目的
4.4 IME_WAI状态的截断
4.5 利用A跳过三次握手
4.6 小结
第5章 /CP协议的实现:插口层
5.1 概述
5.2 常量
5.3 ssed函数
5.4 小结
第6章 /CP的实现:路由表
6.1 概述
6.2 代码介绍
6.3 radix_de_head结构
6.4 rery结构
6.5 r_merics结构
6.6 i_iihead函数
6.7 i_addrue函数
6.8 i_marue函数
6.9 i_clsrue函数
6.10 i_rqim函数
6.11 i_rqkill函数
6.12 小结
第7章 /CP实现:协议控制块
7.1 概述
7.2 i_pcbladdr函数
7.3 i_pcbcec函数
7.4 小结
第8章 /CP实现: CP概要
8.1 概述
8.2 代码介绍
8.3 CP的prsw结构
8.4 CP控制块
8.5 cp_ii函数
8.6 cp_slwim函数
8.7 小结
第9章 /CP实现:CP输出
9.1 概述
9.2 cp_upu函数
9.2.1 新的自动变量
9.2.2 增加隐藏的状态标志
9.2.3 在SY_SE状态不要重传SY
9.2.4 发送器的糊涂窗口避免机制
9.2.5 有RS或SY标志时强制发送报文段
9.2.6 发送MSS选项
9.2.7 是否发送时间戳选项
9.2.8 发送/CP的CC选项
9.2.9 根据CP选项调整数据长度
9.3 小结
第10章 /CP实现:CP函数
10.1 概述
10.2 cp_ewcpcb函数
10.3 cp_rlkup函数
10.4 cp_geacache函数
10.5 重传超时间隔的计算
10.6 cp_clse函数
10.7 cp_msssed函数
10.8 cp_mssrcvd函数
10.9 cp_dpis函数
10.10 cp_reass函数
10.11 小结
第11章 /CP实现:CP输入
11.1 概述
11.2 预处理
11.3 首部预测
11.4 被动打开的启动
11.5 主动打开的启动
11.6 PAWS:防止序号重复
11.7 ACK处理
11.8 完成被动打开和同时打开
11.9 ACK处理(续)
11.10 FI处理
11.11 小结
第12章 /CP实现:CP用户请求
12.1 概述
12.2 PRU_CEC请求
12.3 cp_cec函数
12.4 PRU_SED和PRU_SED_EF请求
12.5 cp_usrclsed函数
12.6 cp_syscl函数
12.7 /CP的前景
12.8 小结
第二部分 CP的其他应用
第13章 HP:超文本传送协议
13.1 概述
13.2 HP和HML概述
13.3 HP
13.3.1 报文类型:请求与响应
13.3.2 首部字段
13.3.3 响应代码
13.3.4 各种报文头举例
13.3.5 例子:客户程序缓存
13.3.6 例子:服务器重定向
13.4 一个例子
13.5 HP的统计资料
13.6 性能问题
13.7 小结
第14章 在HP服务器上找到的分组
14.1 概述
14.2 多个HP服务器
14.3 客户端SY的到达间隔时间
14.4 R的测量
14.5 用lise设置入连接队列的容量
14.6 客户端的SY选项
14.7 客户端的SY重传
14.8 域名
14.9 超时的持续探测
14.10 /CP路由表大小的模拟
14.11 mbuf的交互
14.12 CP的PCB高速缓存和首部预测
14.13 小结
第15章 P:网络新闻传送协议
15.1 概述
15.2 P
15.3 一个简单的新闻客户
15.4 一个复杂的新闻客户
15.5 P的统计资料
15.6 小结
第三部分 Uix域协议
第16章 Uix域协议:概述
16.1 概述
16.2 用途
16.3 性能
16.4 编码举例
16.5 小结
第17章 Uix域协议:实现
17.1 概述
17.2 代码介绍
17.3 Uix dmai和prsw结构
17.4 Uix域插口地址结构
17.5 Uix域协议控制块
17.6 uipc_usrreq函数
17.7 PRU_AACH请求和up_aach函数
17.8 PRU_DEACH请求和up_deach函数
17.9 PRU_BID请求和up_bid函数
17.10 PRU_CEC请求和up_cec函数
17.11 PRU_CEC2请求和up_cec2函数
17.12 sckepair系统调用
17.13 pipe系统调用
17.14 PRU_ACCEP请求
17.15 PRU_DISCEC请求和up_discec函数
17.16 PRU_SHUDW请求和up_shudw函数
17.17 PRU_ABR请求和up_drp函数
17.18 其他各种请求
17.19 小结
第18章 Uix域协议:I/和描述符的传递
18.1 概述
18.2 PRU_SED和PRU_RCVD请求
18.3 描述符的传递
18.4 up_ieralize函数
18.5 up_exeralize函数
18.6 up_discard函数
18.7 up_dispse函数
18.8 up_sca函数
18.9 up_gc函数
18.10 up_mark函数
18.11 性能(再讨论)
18.12 小结
附录A 测量网络时间
附录B 编写/CP应用程序
参考文献
缩略语
前言/序言
深入探索网络协议的精髓:理解TCP/IP的底层运作与应用 这本书旨在为那些渴望深入理解网络通信底层机制的读者提供一份详尽的指南。我们将从最基础的网络协议模型入手,逐层剖析各个协议栈的功能与交互,重点聚焦于TCP/IP协议族的核心组成部分。这不仅仅是一次对技术细节的梳理,更是一次对互联网如何运作的哲学性探索,帮助读者构建起坚实而全面的网络知识体系。 第一部分:网络通信的基石——OSI模型与TCP/IP模型 我们将从宏观角度审视网络通信的复杂性,首先介绍通用的OSI(开放系统互连)参考模型。通过对OSI七层模型的深入剖析,读者将理解从物理连接到应用层服务的各个抽象层次,以及它们之间清晰的功能划分和接口定义。这一过程将帮助读者建立起一个逻辑框架,以便更有效地理解后续的协议细节。 接着,我们将重点转向事实上的网络标准——TCP/IP模型。我们将详细比较OSI模型与TCP/IP模型的异同,阐述TCP/IP模型如何在其四个(或五个)层次上实现了OSI模型的精髓,并解释为何TCP/IP模型更具实际应用价值。理解这两种模型是深入研究任何网络协议的基础,能够帮助读者在纷繁的网络技术中找到清晰的脉络。 第二部分:可靠传输的保障——TCP协议的深度解析 TCP(传输控制协议)作为TCP/IP协议族中最关键的传输层协议之一,其可靠性、有序性和流量控制机制是网络通信的生命线。本部分将对TCP进行前所未有的细致剖析: TCP的连接建立与终止(三次握手与四次挥手): 我们将详细讲解TCP三次握手过程的每一个步骤,揭示其如何实现可靠的连接建立,并分析其中可能出现的 SYN Flood 等攻击的原理。随后,我们将深入探讨四次挥手过程,解释为何需要四次,以及各种关闭连接状态的含义,如 `TIME_WAIT`、`CLOSE_WAIT` 等。 TCP的可靠数据传输机制: 序号(Sequence Numbers)与确认应答(Acknowledgments): 详细阐述TCP如何利用序号来确保数据的有序到达,以及接收方如何通过确认应答来告知发送方数据已成功接收。我们将探讨重传计时器的工作原理,以及如何处理重复确认。 超时重传(Timeout Retransmission): 深入分析TCP如何通过估计往返时间(RTT)来设置重传计时器,以及当数据包丢失时,发送方如何检测并进行重传。我们将讨论Karn算法和Jacobson算法在RTT估计中的应用,以及它们如何提高重传的效率。 快速重传(Fast Retransmit): 讲解快速重传机制,即在接收到多个重复确认时,发送方不必等待超时即可立即重传丢失的数据包,从而显著提升TCP的性能。 TCP的流量控制(Flow Control): 滑动窗口(Sliding Window): 详细解释滑动窗口的概念,包括发送窗口和接收窗口。我们将分析接收窗口的大小如何指示接收方的缓冲区容量,以及发送方如何根据接收窗口的大小来调整发送数据的速率,防止发送方过快地发送数据淹没接收方。 窗口更新与窗口探测: 讲解接收方如何通过发送窗口更新来通知发送方可用空间,以及在某些情况下,发送方如何进行窗口探测以避免死锁。 TCP的拥塞控制(Congestion Control): 拥塞窗口(Congestion Window, `cwnd`): 详细阐述拥塞窗口的概念,它是限制发送方发送数据的另一重要机制,与接收窗口协同工作。 慢启动(Slow Start): 解释慢启动阶段,发送方如何指数级增长拥塞窗口,以快速探测网络的可用带宽。 拥塞避免(Congestion Avoidance): 讲解拥塞避免阶段,发送方如何线性增长拥塞窗口,以避免引起网络拥塞。 快重传与快恢复(Fast Recovery): 结合快重传,解释快恢复算法如何处理在拥塞期间数据包丢失的情况,以及其对网络性能的影响。 不同拥塞控制算法的演进: 简要介绍TCP Tahoe, Reno, NewReno, CUBIC等经典拥塞控制算法的发展历程和各自的特点。 TCP的服务质量(Quality of Service)增强: 探讨TCP选项(如MSS, SACK, Timestamp等)的作用,它们如何影响TCP的性能和健壮性。 TCP的端口与套接字(Ports and Sockets): 详细解释端口号的意义,以及套接字(Socket)作为应用程序与TCP/IP协议栈交互的编程接口。 第三部分:高效可靠的网络服务——UDP协议的特性与应用 与TCP的严谨可靠不同,UDP(用户数据报协议)以其简洁高效的特点在特定场景下发挥着重要作用。本部分将深入探究UDP的特性: UDP的无连接性与不可靠性: 详细解释UDP为何是无连接的,即不需要提前建立连接。同时,深入分析UDP为何是不可靠的,其数据包可能丢失、乱序或重复,不提供任何可靠性保障。 UDP的首部结构与校验和: 讲解UDP首部包含的字段,如源端口、目的端口、长度和校验和,以及校验和的作用。 UDP的应用场景: 重点阐述UDP在哪些场景下优于TCP,例如: DNS(域名系统): 解释为什么DNS查询通常使用UDP,以及其高效性。 DHCP(动态主机配置协议): 分析DHCP协议为何选择UDP,以及其工作流程。 VoIP(网络电话)与视频流: 解释在实时通信场景下,UDP的低延迟特性远比TCP的可靠性更为重要。 在线游戏: 说明游戏中对数据包延迟的敏感性,UDP成为首选。 UDP的缺点与权衡: 讨论使用UDP时需要应用程序开发者自行处理的可靠性、顺序性等问题,以及何时需要考虑构建基于UDP的可靠传输层。 第四部分:互联网的基石——IP协议的运作原理 IP(网际协议)是网络层最重要的协议,负责将数据包从源主机路由到目标主机。本部分将全面解析IP协议: IP数据报(IP Datagram)的结构: 详细讲解IP数据报的各个字段,包括版本、头部长度、服务类型(TOS)、总长度、标识、标志、片偏移、生存时间(TTL)、协议类型、头部校验和、源IP地址和目的IP地址。 IP的路由选择(Routing): 路由表(Routing Table): 解释路由表的作用,以及路由器如何根据目的IP地址查找路由表来转发数据包。 静态路由与动态路由: 介绍静态路由和动态路由的区别,以及常见的动态路由协议(如RIP, OSPF, BGP)的基本原理。 IP地址(IP Addresses)与子网划分(Subnetting): 深入讲解IPv4地址的结构(类别A, B, C, D, E),以及子网划分的必要性、方法和优点,如提高网络利用率和安全性。 NAT(网络地址转换): 详细解释NAT的工作原理,其如何实现私有IP地址与公有IP地址的转换,以及它在缓解IPv4地址枯竭方面的作用。 IP的片断与重组(Fragmentation and Reassembly): 讲解当IP数据报在传输过程中超过MTU(最大传输单元)时,如何被分割成多个小的数据片段,以及接收方如何将这些片段重组成完整的数据报。分析片断可能带来的问题,如安全性和效率。 IP的生存时间(TTL): 解释TTL的作用,它如何防止数据包在网络中无限循环,以及TTL值如何随路由器转发而减少。 IPv6的引入与演进: 简要介绍IPv6的地址结构、优势以及向IPv6过渡的重要性。 第五部分:网络互联的桥梁——ARP与ICMP协议 ARP(地址解析协议)和ICMP(Internet控制消息协议)虽然不直接传输应用层数据,但它们在IP网络中扮演着至关重要的角色: ARP协议: ARP的工作原理: 详细讲解ARP如何将IP地址解析为MAC地址(物理地址),以及ARP请求和ARP应答的报文格式。 ARP缓存(ARP Cache): 解释ARP缓存的作用,以及如何提高IP到MAC地址解析的效率。 ARP欺骗(ARP Spoofing)攻击: 分析ARP欺骗的原理,以及它可能造成的网络安全威胁。 ICMP协议: ICMP消息类型: 详细介绍ICMP协议支持的各种消息类型,如目标不可达(Destination Unreachable)、超时(Time Exceeded)、回声请求(Echo Request)和回声应答(Echo Reply)。 `ping`命令的原理: 以`ping`命令为例,详细解析ICMP回声请求和回声应答如何工作,以及它们在网络故障诊断中的应用。 `traceroute`命令的原理: 深入讲解`traceroute`(或`tracert`)命令如何利用ICMP的TTL机制和目标不可达消息来追踪数据包的路由路径。 ICMP在网络管理中的作用: 讨论ICMP在网络监控、故障排除和诊断中的重要性。 第六部分:底层的通信机制——以太网帧与MAC地址 为了理解IP数据报如何在局域网中传输,我们将回溯到数据链路层: 以太网帧(Ethernet Frame)结构: 详细讲解以太网帧的组成部分,包括前导码、目的MAC地址、源MAC地址、类型/长度字段、数据载荷以及帧校验序列(FCS)。 MAC地址(Media Access Control Address): 解释MAC地址的唯一性、其表示的物理设备以及在局域网中的作用。 CSMA/CD(带冲突检测的载波侦听多路访问): 简要介绍以太网最初的介质访问控制方法,以及其在避免和处理冲突方面的机制。 网络接口卡(NIC)与MAC地址的绑定: 说明MAC地址如何与物理网络接口卡相关联。 第七部分:构建现代网络应用——Socket编程与网络服务实例 理论知识最终需要转化为实际应用。本部分将聚焦于如何利用TCP/IP协议族构建网络应用程序: Socket API(套接字应用程序接口): 详细介绍Socket API的核心函数,包括`socket()`、`bind()`、`listen()`、`accept()`、`connect()`、`send()`、`recv()`、`close()`等,并提供相应的代码示例(可能以C或Python为例)。 客户端/服务器模型(Client/Server Model): 通过具体的客户端/服务器程序设计,演示如何使用TCP和UDP实现基本的网络服务,如简单的文件传输、消息传递等。 网络协议分析工具的使用: 介绍`Wireshark`等网络协议分析工具,演示如何捕获和分析网络流量,以理解协议的实际运作,并用于排查网络问题。 安全通信的概念: 简要介绍SSL/TLS等安全协议如何为TCP/IP通信提供加密和认证,为构建安全的网络应用奠定基础。 通过对以上内容的深入学习,读者将能够: 构建全面的网络知识体系: 从OSI和TCP/IP模型到具体的传输层、网络层、数据链路层协议,形成一个完整的认知框架。 深刻理解网络通信的原理: 掌握TCP的可靠传输、流量控制、拥塞控制等核心机制,理解IP协议的路由转发和数据报结构。 掌握网络诊断和排错能力: 能够利用ICMP等协议以及网络分析工具,定位和解决常见的网络问题。 具备开发网络应用的基础: 理解Socket API,为开发各种网络应用程序打下坚实基础。 为进一步学习网络安全、分布式系统等高级主题做好准备。 本书以详实的代码示例、清晰的图示和深入的原理剖析,力求让复杂的网络协议知识变得易于理解和掌握。我们相信,通过系统性地学习本书内容,读者将能够真正理解互联网的底层运作,并具备解决实际网络问题的能力。