传输层协议—网络

文章目录

  • 1.TCP
    • 1.1TCP协议段格式
    • 1.2可靠机制
      • 1.2.1确认应答机制
      • 1.2.2超时重传机制
      • 1.2.3连接管理机制
      • 1.2.4流量控制机制
      • 1.2.5拥塞控制机制
    • 1.3效率机制
      • 1.3.1滑动窗口机制
      • 1.3.2延迟应答机制
      • 1.3.3捎带应答机制
    • 1.4粘包问题(tcp问题,应用层的数据包)
  • 2.UPD和TCP
    • 2.1UPD和TCP的区别
    • 2.2UDP问题

1.TCP

1.1TCP协议段格式

在这里插入图片描述
TCP:传输的数据的控制,可靠和效率是成反比:越可靠,效率越低,TCP是综合考虑了两者,取的一个均衡,不是保证绝对意义的可靠,也不是绝对意义的效率最高

1.2可靠机制

1.2.1确认应答机制

(1)发送的数据,接收端需要返回确认接收到数据报的应答
在这里插入图片描述

(2)数据会进行编号,并使用32位序号保存
(3)ack的标志位是1,会使用32位确认序号保存
(4)下一个是接受到的数据报连续序号的最大值+1(说明接收端将之前的数据全部接收到了)

1.2.2超时重传机制

(1)发送端超过一定的时限没有接收到ack应答包,就会进行重传
(2)这里的时限是动态变化的,与网络的环境有关,时限是成指数级增长的,重传达到一定的次数就会关闭连接
(3)没有接收到ack应答包,可能是发送数据丢包,也可能是ack应答丢包
(4)重传指的是数据包重新发送
在这里插入图片描述
在这里插入图片描述

1.2.3连接管理机制

  1. 建立连接:三次握手(建立连接本质是双方保存了一个连接状态)
    流程:
    (1)客户端发送syn,申请建立客户端到服务端的连接;
    (2)服务端返回syn+ack,申请建立服务端到客户端的连接,其中ack是对第一个数据包的应答(注意:ack和syn可以合并一起发送,也可以分开发送,合并一起发送就是一个数据包,两个标志位置为1);
    (3)客户端返回ack,对第二个数据包的应答;
    (3)

  2. 断开连接:四次挥手
    流程:
    (1)客户端发送syn到服务端,申请关闭客户端到服务端的连接
    (2)服务端返回ack,服务端的状态置为close_wait
    (3)服务端发送fin到客户端,申请关闭服务端到客户端的连接,客户端的状态置为time_wait
    (4)客户端返回ack,服务端状态置为closed,客户端等待一定的时间将状态置为closed
    在这里插入图片描述

  3. 重点问题:
    (1)双方的连接状态,为什么最后才是closed
    客户端接收到第三个数据报不能马上置为closed,因为第四个数据报可能会发生丢包(服务端无法断开连接),服务端就会根据超时重传机制重新发送第三个数据报,此时如果客户端是closed就无法接收了,双方都要保证可靠的关闭连接,如果是一端关闭,一端还存在就会出现藕断丝连的情况
    (2)第2,3个数据报为什么没有合并
    第二个数据报是系统内核返回的,不需要程序写代码来发送,而第三个数据报是程序调用close方法发送的(服务端在关闭连接前可能还需要做一些其他的工作)
    (3)第2,3个数据报是否可以合并
    将第二个数据报放在缓冲区(可能立即发也可能不是),对应的第三个数据报也是发送到缓冲区,此时,如果第二个数据报还在缓冲区就可能合并发送
    (4)服务端出现大量的close_wait的原因
    服务端没有执行close方法(因为只有执行了close才会发送第三个数据报)
    (5)客户端接收第三个数据报状态是time_wait需要等待多久
    2msl,1msl是单个报文传输的最大时间,需要等待的是第四个返回及可能的重传数据

1.2.4流量控制机制

(1)发送端发送速度如果快于接收端,程序读取速度就可能导致接收缓冲区被打断进而引起系统丢包,重传再次丢包的问题(程序读取指的是程序从缓冲区读取接收的数据)
(2)tcp协议首部:16位窗口大小指的是流量窗口大小
(3)接收端接收能力有限,主动告诉发送端自己的接收能力(接收能力指的是接收端接收缓冲区后剩余的空间大小,返回的ack应答包还会使用窗口大小字段来设置接收能力的大小)

1.2.5拥塞控制机制

(1)网络状态不明的情况下,贸然的发送大量的数据报就可能产生网络拥塞
(2)含义:发送端发送数据之前先根据“拥塞窗口”来进行探路(拥塞窗口是动态变化的)
(3)如何变化:从1开始,先指数增长,再线性增长,网络拥塞导致大量丢包后重置为1
在这里插入图片描述

1.3效率机制

1.3.1滑动窗口机制

(1)作用:以并发的方式发送数据报,减少等待时间(通过叠加等待时间),提高数据传输效率
(2)窗口大小指无需等待应答而可以继续发送的数据报最大值
(3)窗口大小确定:窗口大小=min(流量窗口大小,拥塞窗口大小)
(4)滑动窗口的大小决定吞吐率(一定时间网络数据传输数量越大,吞吐率越高)
(5)滑动窗口滑动的方式:可以滑动的位置是下一个序号的最大值减去窗口的起始位置(下一个是x代表接收端在x序号之前的数据报都已接收)
(6)已确认接收的数据都是保存在缓冲区的(发送端保存在发送缓存区(可能需要重传),接收端保存在接收缓冲区(可能需要去重))
(7)发生丢包的情况:
①ack丢包:没有影响,后续的ack也能表示序号前的全部接收
②发送的数据报丢包:接收的ack下一个序号是接收端,接收到的连续序号最大值+1(如果中间有部分没有接收到就相当于不连续);快重传:连续3次接收到下一个是x就表示从x开始的数据报丢包,需要重传
(8)理解缓冲区:把网络数据传输理解为发快递对方返回一个应答在这里插入图片描述

1.3.2延迟应答机制

(1)接收端返回流量窗口代表接收缓冲区的可用空间大小,如果立即返回流量窗口大小就会比较小,不划算(不划算的原因是接收端可能接收速度比较快,读走以后就可以设置的更大)
(2)接收端返回的流量窗口,不是立即返回而是等待一定的时间(等待一定的时间就是延迟应答的由来),这样返回的流量窗口大小就可能更大(流量窗口是滑动窗口大小的决定因素之一,而滑动窗口大小又是网络吞吐量的决定因素之一,所以是效率机制延迟时间应答效率就更高)
(3)延迟的条件是由数量和时间来限制(数量指的是每几个包)(时间指的是不能超过最大延迟时间,超过时间发送端就认为丢包会进行超时重传)

1.3.3捎带应答机制

不管是客户端还是服务端都既可以是发送端也可以是接收端,不管是客户端还是服务端接收到数据后返回的ack应答包(作为接收端),可以和发送的数据报(作为发送端)合并在一起发送给对方

1.4粘包问题(tcp问题,应用层的数据包)

  1. 应用层需要约定统一的协议,明确包与包之间的边界
  2. 没有明确边界就会出现粘包问题
    (1)在传输层,如果基于tcp协议,面向字节流,没有关闭流可以一直收发数据
  3. 解决方案:明确包之间的边界
    (1)固定大小的包:读、写都按照固定大小来发送\接收
    (2)可变大小的包:发送时包含长度的信息,接收时就按照这个信息读取相应大小的数据,也可以使用分隔符
  4. udp协议:因为是面向数据报(发送数据是一整块的发,接收也是一整块的收),固不存在粘包问题

2.UPD和TCP

2.1UPD和TCP的区别

在这里插入图片描述

2.2UDP问题

(1)基于传输层udp协议设计一个可靠的/大小不限的数据传输?
在应用层自己写代码来实现类似tcp的可靠机制:引入tcp类似的字段(序号、确认序号等),引入可靠机制(连接管理机制等)

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

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

相关文章

【uni-app】常用图标、头像汇总

在做小程序的时候,有时候需要各种图标和头像素材,而百度一堆基本都是收费的。所以,整理一些免费好用的图标,头像库: 1、iconfont-阿里巴巴矢量图标库 基本上常用的矢量图标,在这儿都有,而且可…

rt-thread rtc设备驱动开发

基于pico rtc设备驱动开发 I/O设备框架RTC设备功能配置——启用Soft RTC功能配置——启用NTP时间自动同步功能配置——启用硬件RTC RT-Thread 的 RTC (实时时钟)设备为操作系统的时间系统提供了基础服务。应用层对于 RTC 设备一般不存在直接调用的 API &…

基于ZYNQ阵列涡流检测系统硬件设计(一)

为实现阵列涡流检测系统总体功能,需研制一套多通道信号采集硬件系统,以搭配 软件编程实现分时激励和分时采集。基于以上要求,本章介绍了阵列涡流检测系统的硬 件模块设计。 3.1 阵列涡流检测系统总体设计 阵列涡流检测系统需要利用 DA …

分布式软件架构——传输链路

传输链路 链路指无源的点到点的物理连接。链路是计算机网络中的一个重要概念,它指的是连接两个网络设备的物理或逻辑路径。简单来说,链路就是电信号或数据在网络中传输的路径。在计算机网络中,链路可以分为物理链路和逻辑链路两种。物理链路…

【UI自动化测试】appium+python+unittest+HTMLRunner

进阶Python接口自动化测试必备教程(2023全网最详细) 简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自…

举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

我们将通过一个简单的例子来说明基于线性回归的单层神经网络,以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集,表示学生的学习时间(小时)与他们的考试分数: 学习时间(X)&#xff1a…

线程池学习(五)线程工厂、线程池工厂

Executors 定义的Executor, ExecutorService, ScheduledExecutorService, ThreadFactory和Callable类的工厂和实用程序方法,我们称为线程池工厂。ThreadFactory 为定制化创建新线程的对象,我们称为线程工厂 前面几期的学习中,我已经初步会使用线程池了&…

MySQL内置函数

内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数,获取MySQL信息函数、聚合函数等。 1.数值函数 来源: 版权声明:本文为CSDN博主「清风拂来水波不兴」的原创文章,遵循CC 4…

Ceph简介及部署

Ceph Ceph一、存储基础1、单机存储设备2、Ceph 简介3、Ceph 优势5、Ceph 架构6、Ceph 核心组件7、OSD 存储后端8、Ceph 数据的存储过程9、Ceph 版本发行生命周期10、Ceph 集群部署 二、部署ceph-deploy Ceph 集群前环境配置1、关闭 selinux 与防火墙2、根据规划设置主机名3、配…

数据中心水浸事件,该如何找回安全?

数据中心是现代企业和组织中不可或缺的基础设施,承载着大量的敏感数据和关键业务运作。然而,水浸事件可能成为数据中心的巨大威胁,可能导致设备故障、数据丢失以及业务中断,给组织带来严重的损失和风险。 因此,为了保护…

gd32f103vbt6 串口OTA升级3-linux端的部分

一. 简介 本文主要是对linux端升级单片机程序的功能部分做一些介绍,包括一些软件流程。 二.硬件部分 2.1 rk3399cpugd32f103 2.2 连接方式:串口(115200,8N1)或者iic(本文没有介绍iic) 三、其…

WebRTC不同方案对比

1.功能上会有一些出入,尤其是国内的metaRTC版本迭代很快, 2.后续的ffmpeg也在进行支持webrtc特性,obs新的版本好像已经支持了webrtc, 3.对于webrtc部分缺少的信令部分的标准化也有了对应的标准whip和whep协议 所以,如…

一道SQL题

有个搞数仓的朋友不知道从哪儿弄了个题。。。 做了做体验了一下。。。 记录记录。 分析 要保证每天都要做新题 5天必须都做题,不然GG 最后一天必须做新题,如果最后一天做新题了,前面那几天没做新题,做的是老题 最后一天&#…

QT:问题、解决与原因

在这里记录一些自己遇到的在QT开发上面的小问题和tips 目录 QComboBox 设置qss样式不生效qt按钮设置点击释放效果实现效果 QComboBox 设置qss样式不生效 我设置的样式是: box->setStyleSheet("QComboBox {""border: none;""padding:…

支付宝支付上线准备工作(商家自研接入)

商家自研流程 1.创建应用 登录支付宝开放平台创建 网页/移动应用 说明:生成的应用唯一标识 APPID 可用于调用开放产品接口。 2.配置应用 2.1 应用详情 2.2 产品绑定 2.3 开发设置 在开发 > 开发设置 中配置应用信息。 2.3.1 接口加密方式 按操作步骤进行…

抖音seo源码部署/开源不加密可二开/抖音seo优化开发方案

一、前言 抖音是目前国内非常流行的短视频平台之一,用户数量庞大,更是吸引了许多企业和个人在上面开设账号,通过发布内容来进行流量变现。但是,在一个账号发布内容的同时,管理员又需要同时关注多个账号,对账…

mysql中的行格式之compact格式分析

mysql中的行格式之compact格式分析 mysql行格式 所谓行格式,就是指mysql一行数据的存储格式。 InnoDB 储存引擎支持有四种行储存格式:Compact、Redundant、Dynamic 和 Compressed。 Redundant是很古老的行格式了,因为占用空间最多&#x…

基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度道路瑕疵(裂纹(Crack)、检查井(Manhole)、网(Net)、裂纹块(Patch-Crack)、网块(Patch-Net)、坑洼块&#x…

【C++】模板进阶—非类型模板参数、模板特化及模板的分离编译

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C 🛹Linux 📕 学习格言:博观而约取&#xff0…

什么是云应用程序?

应用程序优先的云服务的日益普及导致应用程序与云服务的融合程度比以前更深。应用程序和云之间的运行时边界正在从虚拟机转移到容器和函数。集成边界正在从仅访问数据库和消息代理转向应用程序的机械部分混合并在云中运行的边界。在这个最终架构中,应用程序是“云绑…