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

news2025/3/11 3:21:57

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粘包问题*:

封装自定义数据帧
  • 原理

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

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

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

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

相关文章

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

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

分布式存储学习——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…

【大模型基础_毛玉仁】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…

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

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

LLM 学习(一 序言)

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

STM32-HAL库初始化时钟

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

批量将 Word 拆分成多个文件

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

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

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

13.数据结构(软考)

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

拉拉扯扯adfda

read -p "请输入一个成绩:" 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.基本概念及报文格式 基本概念: TCP的中文全称为传输控制协议(Transmission Control Protocol),是一种可靠的,面向连接的,基于字节流的传输层通信协议。 报文格式: 序号 :占32⽐…

关于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文档…

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

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

DeepSeek × 豆包深度整合指南:工作流全解析

DeepSeek 豆包深度整合指南&#xff1a;工作流全解析 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 DeepSeek 豆包深度整合指南&#xff1a;工…

海思Hi3516DV300交叉编译opencv

OpenCV是一个开源的跨平台计算机视觉库&#xff0c;支持C、Python等多种语言&#xff0c;适用于图像处理、目标检测、机器学习等任务。其核心由C编写&#xff0c;高效轻量&#xff0c;提供实时视觉处理功能&#xff0c;广泛应用于工业自动化、医疗影像等领域。 1 环境准备 1…

[FE] React 初窥门径(五):React 组件的加载过程(commit 阶段)

1. 回顾 前一篇文章我们看到&#xff0c;ReactDOM.render 总共包含这些步骤&#xff0c; 然后介绍了 performSyncWorkOnRoot 做的事情&#xff0c;它主要做了两件事&#xff0c; renderRootSync 可称之为 render 阶段&#xff1a;创建了一颗 Fiber Tree&#xff08;包含 html …

java环境部署

java环境部署 一、准备工作 jrejdkeclipse jdk下载&#xff1a;21和1.8-----官网&#xff1a;Oracle&#xff1a;Java 下载 |神谕 该处选择要依据自身的系统类型选择下载 idea的下载安装&#xff1a;IntelliJ IDEA | Other Versions 二、安装 三、环境配置 四、使用 五、i…

100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)

文章目录 一、curl是什么&#xff1f;二、爬虫在线小工具&#xff08;牛逼puls&#xff09;三、实战操作 一、curl是什么&#xff1f; 基本概念&#xff1a;curl 支持多种协议&#xff0c;如 HTTP、HTTPS、FTP、SFTP 等&#xff0c;可用于从服务器获取数据或向服务器发送数据&a…