TCP socket VS domain socket

TCP socket VS domain socket

1.异同点:

1.1 类型和地址:
  • TCP Socket:
    • 类型: 面向连接的套接字,提供可靠的、基于流的通信。
    • 地址: 使用IP地址和端口号。
  • Unix Domain Socket:
    • 类型: 也是面向连接的套接字,但在本地计算机上进行通信。
    • 地址: 使用文件路径作为地址。
1.2. 通信范围:
  • TCP Socket:
    • 范围: 适用于网络通信,可以跨越不同计算机。
  • Unix Domain Socket:
    • 范围: 适用于本地通信,仅限于同一台计算机内的进程之间。
1.3. 传输速度:
  • TCP Socket:
    • 速度: 传输速度相对较慢,因为它提供可靠的、面向连接的通信,会有额外的开销用于数据包的确认和重传。
  • Unix Domain Socket:
    • 速度: 通常比TCP Socket快,因为它在本地计算机上进行通信,不涉及网络协议的开销。
1.4. 可靠性:
  • TCP Socket:
    • 可靠性: 提供可靠的、面向连接的通信,确保数据的有序性、完整性、不重复性。
  • Unix Domain Socket:
    • 可靠性: 同样提供可靠的通信,但在本地通信环境中可能会更加可靠。
5. 适用场景:
  • TCP Socket:
    • 适用场景: 用于需要可靠通信的网络应用,如文件传输、Web服务器等。
  • Unix Domain Socket:
    • 适用场景: 适用于本地进程间通信,例如同一台计算机上的各个服务之间的通信。

2.优缺点:

TCP Socket:
  • 优点:
    • 提供可靠的、面向连接的通信。
    • 跨越网络,适用于分布式系统。
  • 缺点:
    • 传输速度相对较慢,有一定的开销。
    • 需要IP地址和端口,不适用于本地通信。
Unix Domain Socket:
  • 优点:
    • 本地通信速度较快,不涉及网络协议的开销。
    • 不需要IP地址和端口,使用文件路径作为地址。
  • 缺点:
    • 仅限于本地通信,无法跨越不同计算机。
    • 在网络通信方面不如TCP Socket可靠。

3.使用方式

在Linux上创建TCP Socket和Unix Domain Socket(也称为Domain Socket)涉及到使用socket系统调用和相关的网络编程库。以下是对这两者的创建过程的详细介绍:

3.1创建TCP Socket:

在Linux中创建TCP Socket的一般步骤如下:

  1. 包含头文件: 在你的C程序中,首先需要包含一些头文件,其中包括 <sys/socket.h><netinet/in.h>

    c 复制代码
    #include <sys/socket.h>
    #include <netinet/in.h>
  2. 创建Socket: 使用socket系统调用创建一个套接字。

    c 复制代码
    int server_socket = socket(AF_INET, SOCK_STREAM, 0);

    这里,AF_INET表示使用IPv4地址,SOCK_STREAM表示创建一个面向连接的TCP Socket。

  3. 配置Socket地址结构: 设置服务器地址和端口等信息。

    c 复制代码
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(8080); // 选择一个合适的端口
    server_address.sin_addr.s_addr = INADDR_ANY;
  4. 绑定Socket: 将套接字绑定到指定的地址和端口。

    c 复制代码
    bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address));
  5. 监听连接: 开始监听连接请求。

    c 复制代码
    listen(server_socket, 5); // 允许最大连接数为5
  6. 接受连接: 当有客户端连接请求时,使用accept函数接受连接。

    c 复制代码
    int client_socket = accept(server_socket, NULL, NULL);

    client_socket就是与客户端通信的套接字。

3.2 创建Unix Domain Socket:

Unix Domain Socket是在本地计算机上进行通信的一种方式。以下是创建Unix Domain Socket的步骤:

  1. 包含头文件: 在你的C程序中,首先需要包含 <sys/socket.h><sys/un.h> 头文件。

    c 复制代码
    #include <sys/socket.h>
    #include <sys/un.h>
  2. 创建Socket: 使用socket系统调用创建Unix Domain Socket。

    c 复制代码
    int server_socket = socket(AF_UNIX, SOCK_STREAM, 0);

    这里,AF_UNIX表示使用Unix域地址,SOCK_STREAM表示创建一个面向连接的Socket。

  3. 配置Socket地址结构: 设置Unix Domain Socket的路径。

    c 复制代码
    struct sockaddr_un server_address;
    server_address.sun_family = AF_UNIX;
    strcpy(server_address.sun_path, "/tmp/my_socket");

    这里/tmp/my_socket是Unix Domain Socket的路径。

  4. 绑定Socket: 将套接字绑定到指定的地址。c听连接:** 开始监听连接请求。

    c 复制代码
    listen(server_socket, 5); // 允许最大连接数为5
  5. 接受连接: 当有客户端连接请求时,使用accept函数接受连接。

    c 复制代码
    int client_socket = accept(server_socket, NULL, NULL);

    client_socket就是与客户端通信的套接字。

这两种套接字的创建过程基本上是类似的,主要区别在于地址结构的设置和socket类型的选择。

相关推荐
你怎么知道我是队长2 小时前
计算机虚拟存储管理与页面置换算法详解
服务器·网络·算法
发量惊人的中年网工3 小时前
工业视觉云边 AI 推理总是卡顿?SD-WAN 打通边缘算力互联
网络·人工智能·网络安全·云计算
AC赳赳老秦3 小时前
软著公开信息批量采集:OpenClaw 抓取软件著作权公开数据,分析企业技术布局方向
大数据·网络·人工智能·python·php·deepseek·openclaw
liuyunshengsir3 小时前
perftest 工具集ib_write_bw中的 RDMA Write 带宽测试工具手册
网络·rdma
tjjingpan3 小时前
HCIP-Datacom Core Technology V1.0_20 IPv6概述
linux·服务器·网络
我命由我123454 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
MartinYeung54 小时前
[论文学习]WASP:面向提示注入攻击的Web代理安全性基准测试
前端·网络·学习
数字融合4 小时前
透明化时空联合无缝追踪,构筑无断点全域态势感知网络专项技术
网络·人工智能·virtualenv
cn分享汇4 小时前
2026免费空间大的网盘软件有哪些推荐,主流网盘拆解
大数据·网络·人工智能
Mr. zhihao4 小时前
Jenkins 从节点连不上主节点?一次网络排查全记录 + 机器间通信“拦截层“全景讲解
网络·servlet·jenkins