伯克利联网程序代码详解:TCP/IP接口与UDP通信示例

需积分: 50 158 下载量 28 浏览量 更新于2024-08-06 收藏 27.27MB PDF 举报
"TCP/IP详解 实现 详细书签版" 这篇文档主要涵盖了TCP/IP协议的接口实现和操作系统中的网络I/O操作,特别是针对伯克利(Berkeley)联网程序代码的介绍。首先,文档引出了在Unix和非Unix系统中编写TCP/IP协议的两种主要编程接口,这些接口在进行网络通信时起着关键作用。 在16.11.3节中,讨论了接收操作的其他选项。这里提到了两个重要的标志:MSG_PEEK和MSG_WAITALL。MSG_PEEK允许进程查看接收到的数据而不实际移除它,以便在后续的非PEEK读取操作中仍能访问这些数据。MSG_WAITALL标志则确保读调用在读取指定数量的数据之前不会返回,除非遇到特定条件,例如连接关闭、接收缓存不足、发生错误、带外数据到达或逻辑记录结尾。 当使用MSG_WAITALL时,接收操作只有在满足以下任一条件时才能返回: 1. 连接的读通道被关闭。 2. 接收缓存不足以容纳所有待读数据。 3. 在等待剩余数据期间出现错误。 4. 带外数据到达。 5. 一个逻辑记录的结尾在写满读缓存之前出现。 在Net/3中,NFs是唯一使用MSG_WAITALL和MSG_DONTWAIT标志的软件。MSG_DONTWAIT标志用于实现非阻塞的I/O操作,使得进程可以在没有等待所有数据到达的情况下立即返回。 此外,文档还提及了接收缓存的组织,特别是对于支持报文边界的协议。每个报文存储在独立的mbuf链中,这有助于保持报文的完整性。接收缓存可以包含多个报文,这些报文分别处理。 在第1章的概述中,介绍了联网程序代码的基本结构,包括源代码的表示方式和组织。作者通过一个简单的UDP通信示例解释了数据报如何通过协议栈发送和接收,展示了核心数据结构和概念,如拥塞窗口、TCP_subr.c文件中的tcp_quench函数等。这一章还讨论了4.4BSD-Lite发布版的代码,以及在展示源代码时的一些格式化和修改。 这份文档详细解析了TCP/IP协议在操作系统层面的实现细节,包括接收操作的选项、接收缓存管理以及编程接口的使用,对于理解和开发网络应用程序具有重要价值。