当前位置: 首页 > article >正文

自学嵌入式第27天------TCP和UDP,URL爬虫

1. TCP和UDP区别

**TCP(传输控制协议)UDP(用户数据报协议)**是两种主要的传输层协议,它们在数据传输方式上有显著区别:

  • 连接性

    • TCP是面向连接的协议,通信前需通过三次握手建立连接,通信结束后通过四次挥手断开连接。

    • UDP是无连接的协议,发送数据前无需建立连接,直接发送数据包。

  • 可靠性

    • TCP提供可靠传输,确保数据按序到达,丢失或损坏的数据包会重传。

    • UDP不保证可靠性,数据包可能丢失、重复或乱序。

  • 数据顺序

    • TCP保证数据按发送顺序到达。

    • UDP不保证顺序,数据包可能乱序到达。

  • 速度

    • TCP因连接建立、确认和重传机制,速度较慢。

    • UDP无这些机制,传输速度更快。

  • 头部开销

    • TCP头部较大(20字节),包含序列号、确认号等字段。

    • UDP头部较小(8字节),仅包含基本信息。

  • 适用场景

    • TCP适用于要求可靠传输的场景,如网页浏览、文件传输。

    • UDP适用于实时性要求高的场景,如视频流、在线游戏。

2. TCP和UDP的Socket编写流程

TCP Socket编写流程

  • 服务器端

    1. 创建Socket:socket(AF_INET, SOCK_STREAM, 0)

    2. 绑定地址:bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))

    3. 监听连接:listen(sockfd, backlog)

    4. 接受连接:accept(sockfd, (struct sockaddr*)&cliaddr, &clilen)

    5. 读写数据:read()write()

    6. 关闭Socket:close(sockfd)

  • 客户端

    1. 创建Socket:socket(AF_INET, SOCK_STREAM, 0)

    2. 连接服务器:connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))

    3. 读写数据:read()write()

    4. 关闭Socket:close(sockfd)

UDP Socket编写流程

  • 服务器端

    1. 创建Socket:socket(AF_INET, SOCK_DGRAM, 0)

    2. 绑定地址:bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))

    3. 接收数据:recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&cliaddr, &clilen)

    4. 发送数据:sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&cliaddr, clilen)

    5. 关闭Socket:close(sockfd)

  • 客户端

    1. 创建Socket:socket(AF_INET, SOCK_DGRAM, 0)

    2. 发送数据:sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&servaddr, sizeof(servaddr))

    3. 接收数据:recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL)

    4. 关闭Socket:close(sockfd)

3. TCP为什么安全可靠

TCP的安全可靠性源于以下机制:

  • 三次握手:确保连接建立时双方都准备好通信。

  • 数据包确认与重传:接收方确认收到的数据包,发送方未收到确认则重传。

  • 数据包排序:TCP通过序列号保证数据按序到达。

  • 流量控制:通过滑动窗口机制防止接收方缓冲区溢出。

  • 拥塞控制:通过拥塞窗口和慢启动机制避免网络拥塞。

4. TCP机制

TCP的核心机制包括:

  • 三次握手:建立连接时,客户端和服务器交换SYN和ACK包。

  • 四次挥手:断开连接时,双方交换FIN和ACK包。

  • 数据包确认与重传:接收方确认数据包,发送方未收到确认则重传。

  • 滑动窗口:控制发送方发送数据的速率,防止接收方缓冲区溢出。

  • 拥塞控制:通过慢启动、拥塞避免等算法防止网络拥塞。


TCP(传输控制协议)通过多种机制来保证数据传输的可靠性、效率和流量控制。以下是这些机制的详细解释:


1. 应答机制(Acknowledgment Mechanism)

  • 作用:确保数据包被成功接收。

  • 原理

    • 接收方收到数据后,会向发送方发送一个ACK(确认应答),ACK中包含已成功接收的数据包的序列号。

    • 发送方根据ACK确认数据已成功送达,若未收到ACK,则触发重传机制。

  • 特点

    • 确认的是连续数据的最后一个字节的序列号。

    • 例如,发送方发送序列号为1-1000的数据,接收方收到后会发送ACK=1001,表示期望接收下一个序列号为1001的数据。


2. 超时重传机制(Retransmission Timeout Mechanism)

  • 作用:解决数据包丢失或ACK丢失的问题。

  • 原理

    • 发送方发送数据后启动一个定时器,若在超时时间内未收到ACK,则认为数据包丢失,触发重传。

    • 超时时间(RTO, Retransmission Timeout)是动态计算的,基于网络往返时间(RTT)。

  • 特点

    • 超时重传是TCP可靠性的核心机制之一。

    • 如果多次重传失败,TCP会断开连接。


3. 流量控制机制(Flow Control Mechanism)

  • 作用:防止发送方发送数据过快,导致接收方缓冲区溢出。

  • 原理

    • 接收方通过窗口大小字段(Window Size)告知发送方其缓冲区剩余空间。

    • 发送方根据窗口大小调整发送数据的速率。

  • 特点

    • 窗口大小为0时,发送方会暂停发送,直到接收方通知有可用缓冲区空间。

    • 通过滑动窗口实现动态调整。


4. 滑动窗口机制(Sliding Window Mechanism)

  • 作用:提高数据传输效率,允许发送方在未收到ACK的情况下连续发送多个数据包。

  • 原理

    • 发送方和接收方各自维护一个窗口,窗口大小由接收方的缓冲区空间决定。

    • 发送方窗口内的数据可以连续发送,无需等待ACK。

    • 接收方确认数据后,窗口向前滑动,发送方可以发送新的数据。

  • 特点

    • 滑动窗口大小是动态调整的,受流量控制和拥塞控制影响。

    • 支持累计确认,即ACK确认的是连续数据的最后一个字节。


5. 延时应答机制(Delayed Acknowledgment Mechanism)

  • 作用:减少ACK的数量,提高网络利用率。

  • 原理

    • 接收方收到数据后,不立即发送ACK,而是等待一段时间(通常为200ms)。

    • 如果在等待期间有数据需要发送给发送方,则可以将ACK捎带在数据包中发送。

  • 特点

    • 减少了单独的ACK包,降低了网络开销。

    • 适用于双向通信场景。


6. 捎带应答机制(Piggybacking Acknowledgment Mechanism)

  • 作用:将ACK信息附加在数据包中发送,减少单独发送ACK的开销。

  • 原理

    • 当接收方需要发送数据给发送方时,可以将ACK信息附加在数据包中一起发送。

    • 例如,A发送数据给B,B在回复数据时,将ACK信息附加在回复的数据包中。

  • 特点

    • 适用于双向通信场景,减少了网络中的小包数量。

    • 提高了网络利用率。


总结

机制作用核心原理
应答机制确认数据接收接收方发送ACK确认已接收的数据
超时重传机制解决数据包丢失问题发送方超时未收到ACK时重传数据
流量控制机制防止接收方缓冲区溢出接收方通过窗口大小控制发送方的发送速率
滑动窗口机制提高数据传输效率发送方在窗口内连续发送数据,接收方滑动窗口确认数据
延时应答机制减少ACK数量,提高网络利用率接收方延迟发送ACK,等待可能的捎带机会
捎带应答机制减少单独发送ACK的开销将ACK信息附加在数据包中发送

这些机制共同作用,使得TCP能够在保证可靠性的同时,提高传输效率并适应网络环境的变化。


TCP粘包问题*:

封装自定义数据帧
  • 原理

    • 在每个数据包前添加一个头部,头部包含数据包的长度信息。

    • 接收方先读取头部,获取数据包长度,然后根据长度读取完整的数据包。

相关文章:

自学嵌入式第27天------TCP和UDP,URL爬虫

1. TCP和UDP区别 **TCP(传输控制协议)和UDP(用户数据报协议)**是两种主要的传输层协议,它们在数据传输方式上有显著区别: 连接性: TCP是面向连接的协议,通信前需通过三次握手建立连…...

C++ 学生成绩管理系统

一、项目背景与核心需求 成绩管理系统是高校教学管理的重要工具,本系统采用C++面向对象编程实现,主要功能模块包括: 学生信息管理(学号/姓名/3门课程成绩) 成绩增删改查(CRUD)操作 数据持久化存储 统计分析与报表生成 用户友好交互界面 二、系统架构设计 1. 类结构设计 …...

Spring Cloud Alibaba 实战:轻松实现 Nacos 服务发现与动态配置管理

1. Nacos 介绍 1.1 什么是 Nacos? Nacos(Naming and Configuration Service)是阿里巴巴开源的一个服务注册中心和配置管理中心。它支持动态服务发现、配置管理和服务治理,适用于微服务架构,尤其是基于 Spring Cloud …...

关于sqlalchemy的使用

关于sqlalchemy的使用 说明一、sqlachemy总体使用思路二、安装与创建库、连结库三、创建表、增加数据四、查询记录五、更新或删除六、关联表定义 说明 本教程所需软件及库python3.10、sqlalchemy安装与创建库、连结库创建表、增加数据查询记录 一、sqlachemy总体使用思路 在…...

三维建模与视频融合(3D-Video Integration)技术初探。

三维建模与视频融合(3D-Video Integration)是一种将虚拟三维模型无缝嵌入实拍视频场景的技术,广泛应用于影视特效、增强现实(AR)、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…...

springboot3 RestClient、HTTP 客户端区别

1 RestClient使用 RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端,它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应,这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与…...

分布式存储学习——HBase概述

1.1 HBase概述 1.1.1 理解大数据背景 1.1.2 HBase是什么 1.1.3 HBase与Hadoop的关系 1.1.4 HBase的核心功能模块 1.1.5 HBase的应用场景和经典案例 1.1.6 小结 本文参考于学校《HBase应用于开发》教材 1.1 HBase概述 本节将介绍大数据背景和HBase的基本概念&#xff0c…...

LLM run

lmstudio lmstudio ollama ollama N 卡使用自带UI gpu加速推理 ,选择满足条件的, ds模型选择列表 https://ollama.com/library/deepseek-r1 a卡当前支持的显卡型号 I卡 gpu加速配置 2025.3 intel Official project optimization https://www.modelscope.cn/m…...

HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解

1、HttpServletRequest 所属框架:Java Servlet API(基于阻塞式 I/O)。 使用场景:传统的 Servlet 应用(如 Spring MVC的Tomcat、常用的容器等等)。 作用:表示客户端的 HTTP 请求。 常用方法&a…...

【大模型基础_毛玉仁】2.2 大语言模型架构概览

【大模型基础_毛玉仁】2.2 大语言模型架构概览 2.2 大语言模型架构概览2.2.1 主流模型架构的类别1)Encoder-only 架构2)Encoder-Decoder 架构3)Decoder-only 架构 2.2.2 模型架构的功能对比1)注意力矩阵2)适用任务 2.2…...

微信小程序点击按钮,将图片下载到本地

前言&#xff1a; 最近在公司完成一个小程序的时候需要实现一个功能&#xff1a;点击按钮获取用户相册权限&#xff0c;将图片下载到用户本地相册&#xff0c;经过了好几次的尝试最终算是实现了。将总结的经验在这里分享给小伙伴们。 实现方式&#xff1a; //.wxml文件 <…...

在Linux系统上集成OpenSlide与SpringBoot

本文档详细介绍如何在Linux系统上安装OpenSlide并将其与Spring Boot应用程序集成,以实现数字病理切片的处理和查看功能。 目录 OpenSlide简介在Linux上安装OpenSlide安装OpenSlide Java绑定在Spring Boot项目中集成OpenSlide示例代码性能优化建议常见问题解决参考资源OpenSli…...

现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示

目录 现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示一、前言二、现代密码学体系架构设计原则1. 安全性原则2. 模块化设计3. 最小权限原则4. 加密算法的选择5. 硬件加速与GPU应用6. 可扩展性与可维护性三、主要加密算法解析1. 对称加密算法:AES2. 非对称…...

pt-archiver删除数据库的数据表/各种报错类型

这篇帖子是前面文的一部分延申 mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客 如需转载&#xff0c;标记出处 目录 pt-archiver命令格式 如果执行后出现下面报错 1&#xff09;Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233. …...

LLM 学习(一 序言)

文章目录 LLM 学习&#xff08;一 序言&#xff09;知识点1&#xff1a;“Embedding” 在人工智能领域&#xff1a;知识点2&#xff1a;Embedding 引入位置信息的原因知识点3&#xff1a;在 Transformer 的 Decoder 翻译第 i 个单词时进行 Mask 第 i1 个单词的操作 LLM 学习&am…...

STM32-HAL库初始化时钟

使能和失能外设GPIOA 时钟信号初始化函数 HAL_RCC_OscConfig函数&#xff1a; HAL_StatusTypeDef是该函数的返回值类型,最顶上的那句话只是这个函数的原型 HAL_RCC_ClockConfig函数&#xff1a; 因为FLASH实际上只能支持24MHz的时钟信号所以如果用高于24MHz的信号输入则要用到等…...

MySQL主从架构配合ShardingJdbc实现读写分离

文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...

批量将 Word 拆分成多个文件

当一个 Word 文档太大的时候&#xff0c;我们通常会将一个大的 Word 文档拆分成多个小的 Word 文档&#xff0c;在 Office 中拆分 Word 文档是比较麻烦的&#xff0c;我们需要将 Word 文档的页面复制到另外一个 Word 文档中去&#xff0c;然后删除原 Word 文档中的内容。当然也…...

【算法系列】桶排序算法介绍及实现

文章目录 桶排序算法介绍及实现桶排序的基本原理算法实现步骤Java代码实现性能优化结论 桶排序算法介绍及实现 桶排序的基本原理 桶排序&#xff08;Bucket Sort&#xff09;是一种基于分组的排序算法&#xff0c;其核心思想是将一组数据按某种 规则分配到多个桶中&#xff0…...

当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)

如果你用过deepseek&#xff0c;可能体验过它在几秒内编故事、写代码的震撼。但你是否想过&#xff0c;这种"智能输出"背后存在两种完全不同的底层机制&#xff1f;就像人类需要先学习知识&#xff08;训练&#xff09;才能考试答题&#xff08;推理&#xff09;&…...

13.数据结构(软考)

13.数据结构&#xff08;软考&#xff09; 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的&#xff0c;即在使用数组之前需要分配固定大小的空间。 时间复杂度&#xff1a; 读&#xff1a;O(1) 查询&#xff1a;1&#xff0c;(n1)/2&#x…...

拉拉扯扯adfda

read -p "请输入一个成绩&#xff1a;" sorce if [ "$sorce" -ge 90 -a "$sorce" -le 100 ] thenecho A elif [ "$sorce" -ge 80 -a "$sorce" -lt 90 ] thenecho B elif [ "$sorce" -ge 70 -a "$sorce"…...

【计算机网络】TCP

1.基本概念及报文格式 基本概念&#xff1a; TCP的中文全称为传输控制协议&#xff08;Transmission Control Protocol&#xff09;&#xff0c;是一种可靠的&#xff0c;面向连接的&#xff0c;基于字节流的传输层通信协议。 报文格式&#xff1a; 序号 &#xff1a;占32⽐…...

doris: PostgreSQL

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 PostgreSQL 数据库。本文档介绍如何配置 PostgreSQL 数据库连接。 使用须知​ 要连接到 PostgreSQL 数据库&#xff0c;您需要 PostgreSQL 11.x 或更高版本 PostgreSQL 数据库的 JDBC 驱动程序&#xff0c;您可以从 Maven 仓…...

深度学习笔记——神经网络

本文为在拓尔思智能举办的训练营中学习内容的总结&#xff0c;部分内容摘自百度百科 个人在这里推荐一个好用的软件&#xff0c;Trae&#xff0c;主要是免费。 人工神经元是人工神经网络的基本单元。模拟生物神经元&#xff0c;人工神经元有1个或者多个输入&#xff08;模拟多…...

django中路由配置规则的详细说明

在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...

关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题

如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head标签加入&#xff1a; <meta charset"UTF-8"> 以jsp为例子&#xff0c;我们…...

pytest结合allure

Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…...

机器学习在地图制图学中的应用

原文链接&#xff1a;https://www.tandfonline.com/doi/full/10.1080/15230406.2023.2295948#abstract CSDN/2025/Machine learning in cartography.pdf at main keykeywu2048/CSDN GitHub 核心内容 本文是《制图学与地理信息科学》特刊的扩展评论&#xff0c;系统探讨了机…...

vue2升vue3,uniapp兼容鸿蒙app踩坑记录

前提&#xff1a;最近鸿蒙势头很好&#xff0c;公司的 uniapp vue2 项目&#xff0c;要兼容鸿蒙app。就开始了我的uniapp转鸿蒙踩坑之旅&#xff0c;请看下文&#xff08;注意下文都是在uniapp开发基础上&#xff09; 1. 首先鸿蒙开发只支持Vue3&#xff0c;不支持Vue2、不支持…...