UNIX网络编程基础:TCP/UDP套接字与I/O复用

需积分: 0 0 下载量 171 浏览量 更新于2024-06-30 收藏 154KB DOCX 举报
"UNIX网络编程卷1--591" 本书深入探讨了在UNIX系统上进行网络编程的各种核心概念和技术。以下是其中的关键知识点: 1. **端口号与套接字** - **端口号**:是区分网络上不同服务的标识,分为熟知端口(0-1023)、注册端口(1024-49151)和动态/私有端口(49152-65535)。临时端口通常指动态/私有端口,用于短暂的、非标准的服务通信。 - **套接字**:是网络通信的基本单元,它包含了连接的本地IP地址、本地端口号、远程IP地址和远程端口号,形成唯一的套接字对,定义了网络连接。 2. **套接字地址结构** - **值-结果参数**:在函数调用中,地址结构作为参数传递,可能被函数修改以填充具体信息。 - **字节操纵函数**:如`htons`和`htonl`用于将主机字节序转换为网络字节序,`ntohs`和`ntohl`反之,确保数据在网络间正确传输。 - **地址转换**:`inet_aton`和`inet_addr`处理IPv4地址,而`inet_pton`和`inet_ntop`同时支持IPv4和IPv6。 3. **基本TCP套接字编程** - **连接管理**:涉及`connect`、`bind`、`listen`和`accept`等函数,用于建立和管理TCP连接。 - **缓冲区**:处理发送和接收的数据流,需要考虑合适的缓冲区大小以避免数据丢失或溢出。 - **相关函数**:包括`socket`创建套接字,`close`关闭套接字,`shutdown`部分或完全关闭套接字的读写,以及`getsockname`和`getpeername`获取套接字自身和对端的信息。 4. **基本UDP套接字编程** - UDP是无连接的协议,使用`recvfrom`和`sendto`函数发送和接收数据,可能需要手动处理连接和错误。 - `connect`在UDP中可以预先指定默认的远端地址,简化后续的发送操作。 5. **I/O复用** - **select**:监控多个描述符的就绪状态,适用于小规模的并发连接。优点是跨平台,缺点是最大描述符数目有限制。 - **pselect**:与select类似,但增加了信号掩码,更安全。 - **poll**:比select能处理更多的描述符,支持事件类型的概念。 - **epoll**:提供高效I/O复用,支持水平触发和边缘触发两种模式,适用于大规模并发。 6. **套接字选项** - **获取及设置函数**:`getsockopt`和`setsockopt`用于获取和设置套接字选项,`fcntl`和`ioctl`则用于控制套接字描述符的行为。 - **套接字选项**:包括通用选项如SO_REUSEADDR允许快速重用套接字地址,TCP选项如TCP_NODELAY禁用Nagle算法以减少延迟。 7. **名字与数值转换** - **主机名字与IP地址转换**:`gethostbyname`和`gethostbyaddr`用于IPV4地址的转换。 - **服务名字与端口号转换**:`getservbyname`和`getservbyport`帮助识别服务及其对应的端口号。 这些知识点构成了UNIX系统下网络编程的基础,对于开发网络应用和服务至关重要。理解和掌握这些内容能帮助程序员创建高效、可靠的网络程序。