套接字(Socket)是计算机网络编程中的一个重要概念,它定义了不同类型的接口以适应不同的网络通信需求。以下是三种主要的套接字类型:
流式套接字(Stream Socket/ SOCK_STREAM):
- 流式套接字基于TCP(传输控制协议)提供可靠的、面向连接的服务。
- 数据传输有序且无差错,确保数据到达的顺序与发送时一致,并且有重传机制来处理丢包问题。
- 这种套接字类型支持全双工通信,即同时支持双向的数据传输,并且内置了流量控制和拥塞控制机制。
数据报套接字(Datagram Socket/ SOCK_DGRAM):
- 数据报套接字基于UDP(用户数据报协议)提供不可靠的、无连接服务。
- 每个数据报文都是独立传输和处理的,不保证顺序到达,可能丢失或重复,且无重传机制。
- 数据报套接字适合实时性要求较高但容忍一定数据丢失的场景,例如VoIP或在线游戏等。
原始套接字(Raw Socket/ SOCK_RAW):
- 原始套接字允许直接访问底层网络协议,甚至包括IP层及其以下的协议数据单元(如IP包头)。
- 使用原始套接字可以直接构造和发送任意格式的数据包,或者接收网络层的数据包。
- 常用于网络诊断、抓包工具(如ping命令使用ICMP协议)、以及实现特定网络协议栈未提供的高级功能。
此外,在特定环境下还有其他类型的套接字,例如Unix域套接字(Unix Domain Socket/ UDS),它不是用于网络通信,而是在同一台主机上的进程间通信;以及其他特定于平台或系统的套接字类型,比如X.25套接字等。