网络: 传输层

news2024/12/26 3:24:08

功能: 将数据从发送到传给接收端

UDP

  • 无连接状态: 知道对端的IP和端口号就直接进行传输, 不需要建立连接
  • 不可靠:  没有确认机制, 没有重传机制. 出错不会管
  • 面向数据包: 不能够灵活的控制读写数据的次数和数量 
  • 发送速度快: 立即发送

报文结构

TCP

  • 面向连接
  • 可靠
    • 校验和
    • 序列号(按序到达)
    • 确认应答
    • 超时重传
    • 连接管理
    • 流量控制
    • 拥塞控制
  • 性能
    • 滑动窗口
    • 快速重传
    • 延迟应答
    • 捎带应答

报文结构

  • 源/目的端口号: 表示数据是从哪个进程来,到哪个进程去;
  • 32位序号/32位确认号
  • 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60
  • 6位标志位:
    • URG: 紧急指针是否有效
    • ACK: 确认号是否有效
    • PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
    • RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
    • SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
    • FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
  • 16位窗口大小: 提高传输效率
  • 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分.
  • 16位紧急指针: 标识哪部分数据是紧急数据;
  • 40字节头部选项

TCP的"可靠"

确认应答机制(保证数据收到)

TCP将每个字节的数据都进行了编号. 即为序列号 : 保证了数据有序 + 去重

每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据; 下一次你从哪里开始发.

超时重传机制(解决丢包问题)

  • 超时重传: 如果主机A在一个特定时间间隔内没有收到B发来的确认应答, 就会进行重发 
  • 快重传: 如果发送端主机连续三次收到了同样一个确认应答, 发送端会将对应数据重新发送

连接管理机制(确保双方能够正确的发收数据)

TIME_WAIT状态

  • 规定:主动断开连接的一方,要处于TIME_WAIT, 等待两个MSL时间后,才能回到CLOSED
  • MSL:是TCP报文的最大生存时间
  • 等待两个MSL时间:
    • 保证最后一个报文可靠到达. 
    • 保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失

CLOSE_WAIT状态

  • 设A方已经完成数据的传输,发送断开连接请求. 而B方还没有完成数据的传输就会进入该状态
  • 若有大量的CLOSE_WAIT状态可能说明连接没有正确关闭

TCP的"性能"

滑动窗口(提高传输效率)

  • 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值. 上图的窗口大小就是4000个字节(四个段). (一次可以发送多个数据)
  • 发送前四个段的时候, 不需要等待任何ACK, 直接发送;
  • 收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
  • 操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉;
  • 窗口越大, 则网络的吞吐率就越高;

流量控制(解决收发速度不匹配)

接收端处理数据的速度是有限的, TCP支持根据接收端的处理能力来决定发送端的速度

发快, 接收端缓冲区满, 在来的数据接收不了(导致丢包), 导致重传等一系列连锁反应

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 "窗口大小" 字段, 通过ACK端通知发送端;
  • 窗口大小字段越大, 说明网络的吞吐量越高;
  • 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
  • 发送端接受到这个窗口之后, 就会减慢自己的发送速度;
  • 如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端

拥塞控制(缓解网络拥塞)

网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 若还发送大量的数据,是很有可能造成更加拥堵

少量的丢包, 我们仅仅是触发超时重传;  大量的丢包, 我们就认为网络拥塞;

TCP引入慢启动 机制,先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数

  • 此处引入一个概念程为拥塞窗口
  • 发送开始的时候, 定义拥塞窗口大小为1;
  • 每次收到一个ACK应答, 拥塞窗口加1;
  • 每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口;
  • 开始时指数级增长, 达到慢阈值后就变为线性增长

  • 当TCP开始启动的时候, 慢启动阈值等于窗口最大值;
  • 在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1

延迟应答(等待上层读走速度留够空间)

  • 假设接收端缓冲区为1M. 一次收到了500K的数据; 如果立刻应答, 返回的窗口就是500K;
  • 但实际上可能处理端处理的速度很快, 10ms之内就把500K数据从缓冲区消费掉了;
  • 在这种情况下, 接收端处理还远没有达到自己的极限, 即使窗口再放大一些, 也能处理过来;
  • 如果接收端稍微等一会再应答, 比如等待200ms再应答, 那么这个时候返回的窗口大小就是1M

捎带应答

发数据的时候捎带ACK

粘包问题

引发

  • 发送大量小数据包: 小数据包在传输过程中被合并成一个大的TCP数据报
  • 接收方来接收不及时: 接收方接收不及时, 数据包在缓冲区可能会被合并成一个大数据块

解决: 明确包之间的界限

  • 对于定长的包, 保证每次都按固定大小读取即可
  • 对于变长的包, 可以在包头的位置, 约定一个包总长度的字段
  • 对于变长的包, 还可以在包和包之间使用明确的分隔符(协议)

TCP异常

  • 进程终止: 进程终止会释放文件描述符, 仍然可以发送FIN. 和正常关闭没有什么区别.
  • 机器重启: 和进程终止的情况相同.
  • 机器掉电/网线断开: 接收端认为连接还在, 一旦接收端有写入操作, 接收端发现连接已经不在了, 就会进行reset.  即使没有写入操作, TCP自己也内置了一个保活定时器, 会定期询问对方是否还在. 如果对方不在, 也会把连接释放

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

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

相关文章

基于SwinTransformer和Unet的自适应多类别分割

1、介绍 transformer的基于全局信息的把握,使得对图像的处理成为了可能 swin-transformer在图像分类应用的成功,证明了transformer比传统的cnn卷积网络可以更好的提取图像特征。因为图像分割也是基于特征信息的融合,将不同尺度下的信息拼接…

vivado 使用远程主机和计算群集

使用远程主机和计算群集 概述 AMD Vivado™集成设计环境(IDE)支持同时并行合成和实现的执行在多个Linux主机上运行。你可以做到这一点通过配置单个主机或指定要在其上启动作业的命令手动执行现有的计算集群。目前,Linux是Vivado唯一支持远程主…

负氧离子监测站:创造健康生活环境

TH-FZ5在蓝天白云之下,那一座座高耸的全彩屏负氧离子监测站,如同一支支科技的绿芽,静静破土而出,为这片土地带来了新的生命力。这些现代化的设备不仅美化了环境,更是我们呼吸健康守护者,它们的存在让我们的…

STM32F10X开发环境的搭建

一、keil软件安装 找到keil软件包,解压缩,找到keil5安装软件: 鼠标右键选择以管理员权限运行。点击next,直到安装结束。 安装完成后在桌面会出现keil5软件图标: 然后再安装相应的芯片支持包:我们用的是stm…

Leetcode - 2580. 统计将重叠区间合并成组的方案数

文章目录 思路AC CODE总结 题目链接:2580. 统计将重叠区间合并成组的方案数 思路 一个区间合并的板子,计算出区间数目之后,每个区间都有放左和放右两种选法,所以最后的答案就是 2 k 2^k 2k。但是需要用c进行二维数组的排序&…

【深度学习】深度学习md笔记总结第2篇:TensorFlow介绍,学习目标【附代码文档】

深度学习笔记完整教程(附代码资料)主要内容讲述:深度学习课程,深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍,2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

红外遥控NEC协议

红外遥控技术在我们的日常生活中应用非常广泛,比如我们的遥控器。通过遥控器发射红外光,电视,空调装有红外接收管,负责接受红外光。那么本节将重点介绍其中的原理。 一、工作原理 上图的HS0038便是装在空调,电视上的红…

开放大学2024年春《数控技术 060253》综合大作业参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 单选题 1数控系统的核心是( ) …

腾讯云4核8G12M云服务器一年646元,送3个月时长

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

34.HarmonyOS App DevEco Studio中文界面设置

HarmonyOS App DevEco Studio中文界面设置 重新打开DevEcoStudio,显示中文界面

双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟教程

原文链接:双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599209&idx7&sn2fb78bcb18e6ec709853a7595d8822d9&chksmfa82058ecdf58c9852bf4…

任何程序员错过这些宝藏接单平台,都会难过好吗?

财富自由何时才能实现?首先,可以很负责地告诉你:安安心心地当一头牛马肯定是不能!兢兢业业十几年,归来仍是马喽。 说实在的,这两年经济下行,互联网红利又日渐褪去。前者既争又抢,后…

顶会热点!迁移学习9个结合创新思路,让审稿人眼前一亮

为更灵活、更高效地解决各种复杂和动态变化问题,研究者开始着眼于将迁移学习与其他技术相结合。 这种结合充分发挥了迁移学习的优势,如知识转移、数据效率和加速学习过程等,让模型能够从更高的基准开始学习,更快地适应新任务&…

Vue 3中ref和reactive的区别

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

01使用调试工具

文章目录 前言一、用openocd打开单片机二、利用4444端口向单片机写入hex文件三、利用3333端口和gdb进行调试四、之前我出的问题总结 前言 之前写了一篇关于在linux下搭建stm32标准库的文章后,有一些小伙伴们还是出现了一些奇奇怪怪的错误,这一篇文章就是…

Netty服务端基本启动流程源码刨析

前言: 希望看这篇文章之前对Java Nio编程比较熟悉,并有用过Netty开发简单代码 服务端代码 先大致说一下NioEventLoopGroup组件的作用,可以把它看是作内部维护了一个NioEventLoop数组的对象,它的构造方法的参数用来指定维护数组的大小。NioEve…

JVM(六)——内存模型与高效并发

内存模型与高效并发 一、java 内存模型 【java 内存模型】是 Java Memory Model(JMM) 简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序 性、和原子性的规则和保障…

2024年【G2电站锅炉司炉】考试及G2电站锅炉司炉找解析

题库来源:安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉考试考前必练!安全生产模拟考试一点通每个月更新G2电站锅炉司炉找解析题目及答案!多做几遍,其实通过G2电站锅炉司炉复审模拟考试很简单。 1、【多选题】下列为锅炉的…

【MATLAB源码-第170期】基于matlab的BP神经网络股票价格预测GUI界面附带详细文档说明。

操作环境: MATLAB 2022a 1、算法描述 基于BP神经网络的股票价格预测是一种利用人工神经网络中的反向传播(Backpropagation,简称BP)算法来预测股票市场价格变化的技术。这种方法通过模拟人脑的处理方式,尝试捕捉股票…

Echarts 基础柱状图,实现柱体设定颜色且带有图例

摘要:柱状图的最初要求很简单,4个柱体高低显示不同分类的值,逐渐增加的要求有:自定义特定分类颜色、增加图例展示、点击图例控制分类显示和隐藏。记录下遇到的问题和一些不熟悉的属性的使用。 大致的显示结果如上图,下…