01什么是Socket,它在网络编程中的作用是什么?
文章目录
问题: 什么是 Socket,它在网络编程中的作用是什么?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
Socket 在 TCP 通信中的标准工作流程
TCP 协议的 Socket 编程遵循严格的“服务端-客户端”模型,顺序不可颠倒。服务端依次调用 socket() 创建监听套接字,bind() 绑定端口,listen() 进入监听状态,accept() 阻塞等待客户端连接,连接成功后返回新套接字用于数据收发。客户端调用 socket() 后直接 connect() 发起三次握手,连接建立后双方通过 send() 和 recv() 交换数据,最后 close() 关闭连接释放资源。
1 | # 服务端流程(简化伪代码) |
TCP Socket 与 UDP Socket 的行为差异
| 维度 | TCP Socket | UDP Socket |
|---|---|---|
| 连接性 | 需 connect() 建立连接,面向连接 |
无需 connect()(可调用),无连接 |
| 可靠性 | 可靠传输(确认重传、序号机制) | 不可靠(尽最大努力交付,可能丢包乱序) |
| 数据边界 | 流式(无边界,需应用层处理粘包) | 数据报模式(保留消息边界,一次 send 对应一次 recv) |
| 通信模式 | 全双工,send/recv 配对 |
全双工,sendto/recvfrom 需指定目标地址 |
Socket 作为文件描述符的本质
在 Unix/Linux 系统中,Socket 遵循“一切皆文件”哲学,创建成功后会返回一个非负整数(文件描述符 ID),与普通文件使用相同的读写模型。操作系统内核通过该描述符管理发送/接收缓冲区、连接状态和协议控制块。select、poll 和 epoll 等 I/O 复用机制正是基于对 Socket 描述符的监控,实现单线程管理海量连接的高并发模型。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!