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

实现UDP可靠性传输

文章目录

  • 1、TCP协议介绍
    • 1.1、ARQ协议
    • 1.2、停等式
    • 1.3、回退n帧
    • 1.4、选择性重传

1、TCP协议介绍

TCP协议是基于IP协议,面向连接,可靠基于字节流的传输层协议
1、基于IP协议:TCP协议是基于IP协议之上传输的,TCP协议报文中的源端口+IP协议报文中的源地址+TCP协议报文中的目标端口+IP协议报文中的目标地址,组合起来唯一确定一条TCP连接。
2、面向连接:与UDP不同,TCP在传输数据之前,需要进行三次握手,建立一条TCP连接,然后在进行数据传输,释放需要进行四次挥手。
3、基于字节流:流的含义是不间断的数据结构,这里指的是没有边界的报文结构,假如发送内容比较大,TCP协议栈会将数据切成一块一块放入内核中。

在这里插入图片描述
在这里插入图片描述

1.1、ARQ协议

TCP之所以能实现可靠的数据传输,正是因为基于ARQ协议,ARQ协议(Automatic Repeat-reQuest),即自动重传请求,是传输层的纠正协议,在不可靠的网络中实现可靠的信息传输。
ARQ主要有3种模式:
1、停等式
2、回退n帧
3、选择性重传

1.2、停等式

停等式协议工作原理如下:
1、发送方对接收方发送数据包,等待接收方回复ack,并且开始计时
2、在等待过程中发送方停止发送数据
3、当数据包没有成功被接收方接收,接收方是不会发生ack,等待一段时间后,发送方会重新发送数据包
4、反复这个过程直到接收到ack
缺点:较长的等待时间,使发送数据缓慢。

在这里插入图片描述

1.3、回退n帧

为了解决上面的长时间等待ack的缺陷,连续ARQ协议会,连续发送一组数据包,然后会等待这些数据包的ack。

什么是滑动窗口?

发送方和接收方都会维护一个数据帧序列,这个序列被称为窗口,发送方的窗口是由接受方确定的,目的是控制发送方的速度,避免接收方的缓存不够,而导致数据溢出,同时限制网络中的流量,避免网络阻塞,协议中规定,对于窗口内未经确定的分组进行重传。

回退n帧

回退n帧允许发送方在等待超时的间歇,可以继续发送分组,所有分组携带序列号,在GBN协议中,发送方需要响应以下三件事件:
1、上层的调用,上层调用相应send()时,发送方首先要检索发送窗口是否满
2、接收ack,在该协议中,对序号n的分组的确定采取累积确认的方式,表明接收方已正确接收n以前的的所有分组
3、超时,若出现超时,发送方将重传所有已发生但未被确定的分组
下图:序号为2的分组,丢失了,后面的所有分组都需要重新传
GBN采用的技术包括序号、累积确认、检验和以及计时/重传。

在这里插入图片描述

1.4、选择性重传

虽然GBN改善了停等式中等待时间过长的缺陷,但是依旧存在性能问题,而SR协议通过让发送方仅重传在接收时丢失的分组,从而避免不必要的重传。

发送方:

SR协议中发送方需要响应以下三件事:
1、从上层接收数据,当从上层接收数据后,发送方需检查下一个可用于该分组的序号,若序号在窗口中则发送数据。
2、接收ACK。若收到ACK,且该分组在窗口内,则发送方将那个被确认的分组标记为已接收。若该分组序号等于基序号,则窗口序号向前移动到具有最小序号的未确认分组处。若窗口移动后并且有序号落在窗口内的未发送分组,则发送这些分组。
3、超时。若出现超时,发送方将重传已发出但还未确认的分组。与GBN不同的是,
SR协议中的每个分组都有独立的计时器。

接收方:

在SR协议下,接收方需响应以下三种事件:
(假设接收窗口的基序号为4,分组长度也为4)
1、序号在[4,7]内的分组被正确接收。该情况下,收到的分组落在接收方的窗口内,一个ACK
将发送给发送方。若该分组是以前没收到的分组,则被缓存。若该分组的序号等于基序号4,则该分组以及以前缓存的序号连续的分组都交付给上层,然后,接收窗口将向前移动。
2、序号在[0,3]内的分组被正确接收。在该情况下,必须产生一个ACK,尽管该分组是接收方
以前已确认过的分组。若接收方不确认该分组,发送方窗口将不能向前移动。
3、其他情况。忽略该分组对于接收方来说,若一个分组正确接收而不管其是否按序,则接收方会为该分组返回一个ACK给发送方。失序的分组将被缓存,直到所有丢失的分组都被收到,这时才可以将一批分组按序交付给上层。

在这里插入图片描述

相关文章:

实现UDP可靠性传输

文章目录 1、TCP协议介绍1.1、ARQ协议1.2、停等式1.3、回退n帧1.4、选择性重传 1、TCP协议介绍 TCP协议是基于IP协议,面向连接,可靠基于字节流的传输层协议 1、基于IP协议:TCP协议是基于IP协议之上传输的,TCP协议报文中的源端口IP…...

Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动地区金融平等

流支付正在成为一种全新的支付形态,Zebec Protocol 作为流支付的主要推崇者,正在积极的推动该支付方案向更广泛的应用场景拓展。目前,Zebec Protocol 成功的将流支付应用在薪酬支付领域,并通过收购 WageLink 将其纳入旗下&#xf…...

Qt--动态链接库的创建和使用

写在前面 在Qt的实际开发中,免不了使用和创建动态链接库,因此熟悉Qt中动态链接库的创建和使用对后续的库开发或使用是非常用必要的。 在之前的文章https://blog.csdn.net/SNAKEpc12138/article/details/126189926?spm1001.2014.3001.5501中已经对导入…...

设计模式十二:享元模式(Flyweight Pattern)

当我们需要创建大量相似对象时,享元模式可以帮助我们节省内存空间和提高性能。该模式通过共享相同的数据来减少对象的数量。 在享元模式中,有两种类型的对象:享元(Flyweight)和非享元(Unshared Flyweight&a…...

【LeetCode】88. 合并两个有序数组 - 双指针

这里写自定义目录标题 2023-8-7 22:35:41 88. 合并两个有序数组 双指针 2023-8-7 22:35:41 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int last m n ;while(n > 0){if(m > 0 && nums2[n-1] > nums1[m-1]){nums1[las…...

HarmonyOS应用开发的新机遇与挑战

HarmonyOS 4已经于2023年8月4日在HDC2023大会上正式官宣。对广大HarmonyOS开发者而言,这次一次盛大的大会。截至目前,鸿蒙生态设备已达7亿台,HarmonyOS开发者人数超过220万。鸿蒙生态充满着新机遇,也必将带来新的挑战。 HarmonyO…...

Qt中qmake、构建、运行、清理的区别

Qt 中默认的执行顺序:qmake--- 编译 --- 运行。 一、qmake qmake: 根据之前项目指南创建的项目文件 .pro,并且运行 qmake [qmake xx.pro]生成调试 [build-ttt-***-Debug] 或者发布 [build-ttt-***-Release] 目录(这个是影子构建…...

【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入原始方案实现实现问题分析 介绍基础介绍登场角色 案例实现案例一类图实现分析 案例二类图实现 观察者模式在JDK源码的应用总结文章说明 案例引入 有一个天气预报项目,需求如下: 气象站可以将每天测量到的温度、湿度、气压等等以公告的…...

【奇葩瑞萨-004】RX系列单片机的GPIO初始化

RX系列单片机的GPIO初始化 与IO口相关的寄存器端口(PORT)寄存器端口功能控制(MPC)寄存器MPC.PmnFPS的设置过程MPC寄存器设置注意事项 端口Pmn的初始化不同端口模式下,PORT、MCP寄存器的配置顺序 感想:与STM…...

【Git】Git切换地址

如何切换git代码地址? 1、查看当前远程 url git remote -v执行命令后,可以看见当前有2个URL。 远程 URL 在一般情况下有两个,分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时&#xf…...

elementUI点击当前行更改当前行状态(数据更新DOM不更新问题解决)

<template slot-scope"{row,$index}" slot"menu"><el-button v-if"row.editable" type"text" size"small" click"changeStatus(row,$index)">编辑</el-button><el-button v-else type"…...

python爬取阿里巴巴商品页面数据api

以下是使用Python爬取商品页面的示例代码&#xff1a; import requests from bs4 import BeautifulSoup# 定义要爬取的商品链接 url https://www.alibaba.com/product-detail/High-Quality-Custom-Logo-Printing-Black_60802527914.html# 发送请求 response requests.get(ur…...

angular-mat-select 多选 实现按选择顺序排序

mat-select 正常情况下,多选后,已选项是按列表顺序进行排序,如果我想实现按照点击项目的顺序进行排序,我该如何做呢? [参考网址](Angular order of selected option in multiple mat-select - Stack Overflow) sortComparator是Angular Material中mat-select组件的一个属…...

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</...

微服务服务拆分和远程调用

一、服务架构比较 单体架构&#xff1a;简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目。例如&#xff1a;学生管理系统 分布式架构&#xff1a;松耦合&#xff0c;扩展性好&#xff0c;但架构复杂&#xff0c;难度大。适合大型互联网项目&#x…...

MySQL8.1源码安装与部署

官方文档 https://downloads.mysql.com/archives/community/https://dev.mysql.com/doc/refman/8.1/en/binary-installation.html官方文档源码安装步骤 # Preconfiguration setup $> groupadd mysql $> useradd -r -g mysql -s /bin/false mysql # Beginning of source-b…...

algebraic reconstruction technique(ART)

数值线性代数的Kaczmarz方法被Gordon&#xff0c;Bender&#xff0c;Herman引入至CT重建中&#xff0c;称为ART方法。 A x b Axb Axb A A A为 m n m\times n mn的稀疏矩阵。 A A A的元素 a i j a_{ij} aij​表示像素 j j j对射线 i i i投影的贡献。 A A A的行向量 a i T a…...

oracle11g安装

oracle11g安装 安装环境 虚拟机版本&#xff1a;centos7.9 虚拟机ip&#xff1a;192.168.5.144 oracle版本&#xff1a;11g oracle安装包&#xff1a;p13390677_112040_Linux-x86-64_1of7.zip&#xff0c;p13390677_112040_Linux-x86-64_2of7.zip&#xff0c;p13390677_11204…...

网络防御(9)

.一、SSL工作过程是什么&#xff1f; SSL位于应用层和传输层之间&#xff0c;它能够为基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层&#xff1a; 上层为SSL握手协议&#xff08;SSL handshake protocol&#xff09;、SSLpassword变化协议&#xff08;S…...

Spring核心与设计思想

文章目录 Spring是什么&#xff1f;认识Spring IoC容器传统的开发图书管理系统设计可能导致的问题 使用IoC容器 Spring是什么&#xff1f; Spring是一个用于构建企业级应用程序的开源框架&#xff0c;它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...