1. Definition

Socket 是应用程序访问网络通信服务的接口(Application Programming Interface)。

它位于应用层和传输层之间:

flowchart TD
    App["Application Layer"] -->|Socket API| Trans["Transport Layer (TCP / UDP)"]
    Trans --> Net["Network Layer (IP)"]

Socket 不是网络协议,而是应用程序使用网络协议的接口。 它也不是独立的协议层,而是操作系统提供给应用程序的抽象接口。


2. Purpose

网络应用程序需要通过 TCP/IP 协议进行通信。

但是应用程序不需要直接处理:

  • TCP 状态机
  • UDP 数据报
  • IP 数据包
  • 网络链路传输

因此,操作系统提供 Socket 抽象。

应用程序通过 Socket:

  • 创建通信端点
  • 建立连接
  • 发送数据
  • 接收数据

而底层协议负责:

  • 数据传输
  • 可靠性
  • 拥塞控制
  • 路由转发

3. Socket 与 Protocol 的区别

错误理解:

Socket = TCP/IP 协议

正确理解:

flowchart TD
    Socket["Socket Interface"] --> TCP["TCP Protocol"]
    Socket --> UDP["UDP Protocol"]

Socket 本身不规定通信规则,与上层运行什么应用层协议(如 HTTP、FTP、DNS、Redis 命令等)完全无关。

对 Socket 而言,所有应用层数据都只是一串无差别的二进制比特流:

flowchart TD
    subgraph AppLayer[应用层协议 HTTP / DNS / 自定义协议]
        Format["负责数据格式拼装与语义解析"]
    end

    subgraph Interface[Socket 接口抽象]
        API["send() / recv() 比特流通道<br>对应用层协议内容完全中立"]
    end

    subgraph Kernel[内核传输层协议栈]
        Stack["TCP / UDP 负责可靠性与传输控制"]
    end

    Format --> API --> Stack

Socket 只是提供访问传输层协议能力的接口。


4. Socket 在网络模型中的位置

flowchart TD
    App["Application Layer (HTTP / DNS / FTP / RPC)"] -->|Socket API| Trans["Transport Layer (TCP / UDP)"]
    Trans --> Net["Network Layer (IP)"]
    Net --> Link["Link Layer"]

Socket 是应用程序进入 TCP/IP 协议栈的入口。


5. Network Socket 类型

5.1 TCP Socket

特点:

  • 面向连接
  • 字节流
  • 可靠传输

典型流程:

flowchart TD
    subgraph ServerFlow[Server Flow]
        S1["socket()"] --> S2["bind()"]
        S2 --> S3["listen()"]
        S3 --> S4["accept()"]
        S4 --> S5["send() / recv()"]
    end

    subgraph ClientFlow[Client Flow]
        C1["socket()"] --> C2["connect()"]
        C2 --> C3["send() / recv()"]
    end

典型应用:

  • HTTP/HTTPS
  • SSH
  • RPC

5.2 UDP Socket

特点:

  • 无连接
  • 数据报
  • 不保证可靠性

流程:

flowchart TD
    U1["socket()"] --> U2["sendto()"]
    U2 --> U3["recvfrom()"]

典型应用:

  • DNS
  • 实时音视频
  • 在线游戏

6. Socket Address

网络通信需要确定通信端点。

Socket 地址通常由:

IP Address + Port Number

组成。

例如:

192.168.1.10:8080

其中:

IP:

标识 Host。

Port:

标识 Host 上的应用进程。


7. Socket 与 Host

在 Internet 模型中:

flowchart TD
    Host["Host"] --> App["Application Process"]
    App --> Sock["Socket Interface"]
    Sock --> Trans["TCP / UDP"]
    Trans --> IP["IP Layer"]
    IP --> Net["Network"]

Socket 属于 Host 提供给应用程序的通信接口。

一个 Host 可以拥有多个 Socket:

flowchart TD
    Host["Host"] --> S1["Socket (HTTP Server :80)"]
    Host --> S2["Socket (SSH Server :22)"]
    Host --> S3["Socket (Database :5432)"]

8. 核心理解

Socket 的本质:

Socket 是 Host 中应用程序访问网络通信能力的抽象接口。

它隐藏:

  • 网络协议细节
  • 数据传输细节
  • 硬件通信细节

向应用程序提供统一通信方式。


9. Summary

  • Socket 不是协议
  • Socket 是应用程序访问网络服务的接口
  • Socket 位于应用层和传输层之间
  • TCP Socket 提供可靠字节流通信
  • UDP Socket 提供无连接数据报通信
  • Socket 地址由 IP + Port 标识
  • Socket 是 Host 中应用程序连接 Internet 的入口

10. 关联概念