Linux——TCP和UDP

news2025/6/10 2:59:47

一、TCP协议

1.特点

TCP提供的是面向连接、可靠的、字节流服务。

2.编程流程

(1)服务器端的编程流程

①socket() 方法创建套接字

②bind()方法指定套接字使用的IP地址和端口。

③listen()方法用来创建监听队列。

④accept()方法处理客户端的连接。

⑤recv()接收客户端发送的数据。

⑥send()向客户端发送数据。

⑦close()关闭连接。

(2)客户端的编程流程

①socket() 方法创建套接字

②connect()与服务器端建立连接。

③send()向服务器端发送的数据。

④recv()接收服务器发送的数据。

⑤close()关闭连接。

(3)注意点

TCP协议只允许一个服务器同时被一个客户端访问,如果想要多个客户端同时访问则需要使用多进程或者多线程处理。

①listen()监听队列,队列有两种,一个是存放未完成3次握手的连接,另一个是存放已完成3次握手的连接。listen()的第二个参数在Linux下表示的是已完成三次握手队列的长度。

②accept()是从已完成3次握手连接的队列中取数据。如果队列中此时没有连接,则会阻塞。

③connect()会进行3次握手,建立连接。

④send()表示已成功将数据发送到发送缓冲区中。

recv()表示从接受缓冲区中数据,如果缓冲区此时没有数据,则会阻塞。

⑤close()方法关闭TCP连接,会进行4次挥手。

3.三次握手和四次挥手

(1)三次握手(客户端connect)

首先,客户端向服务器端发送SYN数据包,表示请求建立连接。

然后,服务器回复ACK和SYN包,确认请求并同步连接参数。

最后,客户端再次确认,发送一个ACK包确认连接建好。

(2)四次挥手(close())

 首先,主动断开方发送FIN包,表示没有数据要发送了。进入FIN_WAIT_1状态。

然后,被动断开方回复ACK确认。被动断开方进入CLOSE_WAIT状态,主动断开方接收到后,变为FIN_WAIT_2的状态。

接着,被动断开方也要准备关闭连接, 发送FIN给另一方。进入到LAST_ACK状态。

最后,另一方回复ACK确认。主动断开方变为TIME_WAIT 状态,被动断开方变为CLOSED状态。

4.对TCP特点的理解

(1)面向连接:连接时需要建立3次握手,4次挥手。

(2)可靠的 :提供应答确认、超时重传、乱序重排和去重的机制。

(3)字节流服务:发送的次数与接收的次数不一样。(因为几次发送的数据会被一次接收到)

二、UDP协议

1.特点

无连接、不可靠的数据报服务。

2.编程流程

(1)服务器端的编程流程

①socket() 方法创建套接字

②bind()方法指定套接字使用的IP地址和端口。

③recvfrom()接收客户端发送的数据。

④sendto()向客户端发送数据。

⑤close()关闭连接。

(2)客户端的编程流程

①socket() 方法创建套接字

②sendto()向服务器发送数据。

③recvfrom()接收服务器发送的数据。

⑤close()关闭连接。

(3)注意点

UDP协议允许一个服务器被多个客户端同时访问。

3.对UDP的理解

无连接:不需要建立连接,直接通过参数进行连接。

不可靠:不提供应答确认等机制。

数据报服务:发送的次数与接收的次数数目相同。因为发送端每执行一次写操作,UDP就将其封装成一个UDP数据报发送。它不会重新传入数据,会直接丢失数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Settings 数据库生成、监听与默认值配置

一、Settings 数据库生成机制​ ​传统数据库生成(Android 6.0 前)​​ ​路径​:/data/data/com.android.providers.settings/databases/settings.db​创建流程​: ​SQL 脚本初始化​:通过 sqlite 工具创建数据库文件…

SeaweedFS S3 Spring Boot Starter

SeaweedFS S3 Spring Boot Starter 源码特性环境要求快速开始1. 添加依赖2. 配置文件3. 使用方式方式一:注入服务类方式二:使用工具类 API 文档SeaweedFsS3Service 主要方法SeaweedFsS3Util 工具类方法 配置参数运行测试构建项目注意事项集成应用更多项目…

智慧城市项目总体建设方案(Word700页+)

1 背景、现状和必要性 1.1 背景 1.1.1 立项背景情况 1.1.2 立项依据 1.2 现状 1.2.1 党建体系运行现状 1.2.2 政务体系运行现状 1.2.3 社会治理运行现状 1.2.4 安全监管体系现状 1.2.5 环保体系运行现状 1.2.6 城建体系运行现状 1.2.7 社区体系运行现状 1.2.8 园区…

详解ZYNQ中的 RC 和 EP

详解ZYNQ中的 RC 和 EP 一、ZYNQ FPGA 开发板基础( ZC706 ) 1. 核心特点 双核大脑 灵活积木: ZC706 集成了 ARM Cortex-A9 双核处理器(相当于电脑 CPU)和 FPGA 可编程逻辑单元(相当于可自定义的硬件积木…

STM32CubeMX-H7-19-ESP8266通信(中)--单片机控制ESP8266实现TCP地址通信

前言 上篇文章我们已经能够使用串口助手实现esp8266的几种通信,接下来我们使用单片机控制实现。这篇文章会附带教程,增加.c和,.h,把串口和定时器放到对应的编号,然后调用初始化就可以使用了。 先讲解,然后末尾再放源码…

【汇编逆向系列】四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型

一、汇编代码 上一节开始,讲到了很多debug编译独有的汇编方式,为了更好的区分release的编译器优化和debug的区别,从本章节开始将会提供debug和release的汇编用作对比 Debugb编译 single_double_param:00000000000000A0: F2 0F 11 44 24 08…

【AI学习】wirelessGPT多任务无线基础模型摘要

收看了关于WirelessGPT多任务无线基础模型的演讲视频,边做一个记录。 应该说,在无线通信大模型的探索方面,有一个非常有益的尝试。 在沈学明院士带领下开展 https://www.chaspark.com/#/live/1125484184592834560

docker 部署redis集群 配置

docker的网络模式 网桥模式每次重启容器都有可能导致容器ip地址变化,需要固定ip的自己自定义网络,这里介绍的是默认网络模式 docker创建容器 docker run --name redis6379 -p 6379:6379 -p 16379:16379 -v /etc/redis/redis6379:/etc/redis -d --r…

Ansys Maxwell:线圈和磁体的静磁 3D 分析

本博客展示了如何在 Ansys Maxwell 中执行静磁 3D 分析,以计算载流线圈和永磁体之间相互作用产生的扭矩。在这个例子中,线圈中的电流产生一个沿 Y 轴指向的磁场,而永磁体沿 X 轴被磁化。这种配置导致围绕 Z 轴的扭矩。分步工作流程包括构建几…

【计算机网络】SDN

SDN这种新型网络体系结构的核心思想:把网络的控制层面与数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备。 OpenFlow协议可以被看成是SDN体系结构中控制层面与数据层面之间的通信接口。 在SDN中取代传统路由器中转发表的是“流表”&…

成工fpga(知识星球号)——精品来袭

(如需要相关的工程文件请关注知识星球:成工fpga,https://t.zsxq.com/DMeqH,关注即送200GB学习资料,链接已置顶!) 《孩子都能学会的FPGA》系列是成工完成的第一个系列,也有一年多的时…

spring中的@KafkaListener 注解详解

KafkaListener 是 Spring Kafka 提供的一个核心注解,用于标记一个方法作为 Kafka 消息的消费者。下面是对该注解的详细解析: 基本用法 KafkaListener(topics "myTopic", groupId "myGroup") public void listen(String message)…

NoSQL——Redis配置与优化

目录 关系型&非关系型数据库 一、核心原理对比‌ ‌二、核心特性对比‌ ‌三、关键区别剖析‌ ‌四、典型产品示例‌ ‌总结‌ Redis Redis核心原理 核心特性 技术意义 配置文件解析 1. 基础配置 2. 持久化配置 3. 内存管理 4. 高可用配置 5. 性能调优 6.…

CKA考试知识点分享(2)---ingress

CKA 版本:1.32 第二题是涉及ingress相关。本文不是题目,只是为了学习相关知识点做的实验。 1. 环境准备 需要准备一套K8S集群。 1.1 安装ingress-nginx 下载deploy文件: wget -O controller-v1.12.2.yaml https://raw.githubusercontent…

动态生成element-plus的scss变量;SCSS中实现动态颜色变体生成

文章目录 一、动态css变量1.生成内容2.动态生成css变量2.1新增_color-utils.scss(不推荐)2.2新增_color-utils.scss(推荐)2.3theme.scss引入使用 一、动态css变量 1.生成内容 在我们修改element-plus主题色时候,会自…

Linux 内核内存管理子系统全面解析与体系构建

一、前言: 为什么内存管理是核心知识 内存管理是 Linux 内核最核心也最复杂的子系统之一,其作用包括: 为软件提供独立的虚拟内存空间,实现安全隔离分配/回收物理内存资源,维持系统稳定支持不同类型的内存分配器,最优…

Tableau for mac 驱动

Tableau 驱动程序安装指南 对于希望在 Mac OS 上使用 Tableau 进行数据分析的用户来说,确保正确安装相应的驱动程序至关重要。Tableau 支持多种数据库连接方式,并提供官方文档指导如何设置这些连接。 安装适用于 Mac 的 JDBC 或 ODBC 驱动程序 为了使…

fast-reid部署

配置设置: 官方库链接: https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安装依赖: pip install -r docs/requirements.txt 编译:切换到fastreid/evaluation/rank_cylib目录下&a…

大陆4D毫米波雷达ARS548调试

本文介绍了大陆ARS548毫米波雷达的调试与测试流程,主要包括以下内容: 设备参数:最大检测距离301m(可调93-1514m),支持gPTP时间同步。 接线调试: Windows需使用USB-RJ45转换器 Linux可直接连接网…

大语言模型解析

1. Input Embedding embedding:将自然语言翻译成index 每个index对应一个embedding,embedding需要训练,embedding是一个数组