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

需积分: 50 158 下载量 201 浏览量 更新于2024-08-06 收藏 27.27MB PDF 举报
"TCP/IP详解 实现 详细书签版" 本文档主要讨论了TCP/IP协议栈中的绑定、连接和分用机制,特别是针对JPEG标准的中文文档。首先,它解释了在服务器和客户端中如何使用绑定IP地址和端口号的过程。绑定操作允许进程指定其监听或通信的网络接口和端口。 1. 绑定本地IP地址和端口号: - 服务器通常绑定到特定的知名端口(well-known port),而客户端通常使用临时端口(ephemeral port)。知名端口是预定义的,如HTTP的80端口,FTP的21端口等,而临时端口由操作系统自动分配,确保在本地主机上唯一。 - 图22-8展示了六种不同的绑定组合,包括绑定到特定的单播、广播或多播地址,以及绑定到通配地址(*)表示任意接口或多播组。 - 绑定到特定IP地址的服务器只接收目标IP与之匹配的数据报。绑定到通配地址的进程允许内核根据路由选择合适的接口。 2. 连接和分用: - 连接通常涉及到TCP协议,它在三次握手过程中建立。连接过程确保数据包能准确地从一个进程发送到另一个进程。 - 分用则是指内核根据IP数据报的目的端口将数据报交付给正确的套接字。对于TCP,这发生在连接建立后;对于UDP,分用基于目的端口进行,无需预先建立连接。 3. 绑定限制与错误处理: - 如果尝试绑定的端口已经在使用(即EADDRINUSE错误),默认情况下,进程无法绑定该端口。这意味着存在一个协议控制块(PCB)已经将该端口作为其本地端口。 - “正在被使用”是相对于特定协议(TCP或UDP)而言的,因为它们各自维护独立的端口状态。 4. TCP/IP编程接口: - 文档提到了在Unix和非Unix系统中用于TCP/IP编程的两种主要接口。这些接口允许开发者创建能够利用TCP/IP协议栈的程序。 5. UDP时间戳程序示例: - 提到了一个简单的UDP程序,它向远程服务器发送请求以获取当前时间,然后接收包含服务器时间的UDP响应。这个例子揭示了协议栈的工作原理,包括数据报的发送和接收,以及核心数据结构和概念。 6. 源代码表示和组织: - 文档还介绍了源代码的表示方式,包括行号、文件引用和代码注解,以及对4.4BSD-Lite发布版代码的修改和调整。 该文档深入探讨了TCP/IP协议栈中的关键概念,包括绑定、连接和分用机制,以及如何在实际编程中应用这些概念。此外,它还提供了源代码的组织和表示方法,有助于读者理解底层实现细节。