Linux基础-socket详解、TCP/UDP

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 综上所述,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协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
20天前
|
网络协议 算法 网络性能优化
|
8天前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
19 4
|
14天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
30天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
42 1
TCP和UDP区别?
|
22天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
49 10
|
1月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
28 1
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
36 0
Linux C/C++之TCP / UDP通信
|
1月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
65 1
|
1月前
|
网络协议 IDE 开发工具
主动信息搜集:Scapy完成基于TCP、UDP的主机发现
主动信息搜集:Scapy完成基于TCP、UDP的主机发现