计算机网络-传输层(TCP可靠传输(校验,序号,确认,重传),TCP流量控制,TCP拥塞控制(慢开始,拥塞避免)(快重传,快恢复))

news2024/11/29 12:41:49

文章目录

  • 1. TCP可靠传输
  • 2. TCP流量控制
  • 3. TCP拥塞控制

1. TCP可靠传输

网络层:提供尽最大努力交付,不可靠传输。
传输层:使用TCP实现可靠传输

可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。

TCP可靠传输机制:

  1. 校验:与UDP校验一样, 增加伪首部

  2. 序号:一个字节占用一个序号,TCP序号字段指的是一个报文段第一个字节的序号。

  3. 确认:接受方收到发送方发送的报文后,回返回一个报文用作确认(这个报文可以带数据,称为捎带应答),这个回复报文首部确认字段是收到报文序号的下一个
    在这里插入图片描述

    TCP使用累计确认机制,确认报文的字段是TCP接收方最近需要接受的字段

    eg:
    在这里插入图片描述
    设黄色报文段丢失,绿色报文段正常接受,TCP确认报文确认号字段为4

  4. 重传:确认重传二者联系紧密,TCP在一段时间(重传时间)没有收到确认报文就要重传刚刚发送的报文。

    TCP采用自适应算法动态改变重传时间RTTS(加权平均往返时间)的方法。

    冗余ACK:(快重传) 每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。

     发送方已发送1,2,3,4,5报文段
     接收方收到1,返回给1的确认(确认号为2的第一个字节)
     接收方收到3,仍返回给1的确认(确认号为2的第一个字节)
     发送方收到2个对于报文段1的冗余ACK 认为2报文段丢失,重传2号报文段﹐快速重传
    

2. TCP流量控制

流量控制:让发送方慢点,要让接收方来得及接收。

TCP使用滑动窗口机制来实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小。
即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。

eg:
TCP在建立连接时,主机B会通过确认报文,告知A自己的接受窗口大小(设为400)。发送端会调整自己的发送窗口大小为这个大小也为400字节。同时设一个报文段长100字节。滑动窗口过程如下图:
在这里插入图片描述
上图接受方进行了三次流量控制,发送方的发送窗口从400->300->100->0

仔细分析上图,当B主机发送响应报文,设置了自己的接受窗口大小为0后,主机A会调整自己的发送窗口为0。
此后,A主机需要等待B发送响应报文,通知其修改自己的发送窗口,继续发送数据。而B需要等待A主机发送数据后才可以发送响应报文。这样就构成了类似死锁的现象。

为了解决这个问题:

  • TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
  • 若持续计时器设置的时间到期,就发送一个窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。

3. TCP拥塞控制

出现拥塞的条件:对资源需求的总和>可用资源

资源:网络带宽,交换机数据缓存等

网络中有许多资源同时呈现供应不足导致网络性能变坏,最终网络吞吐量将随输入负荷增大而下降。

TCP拥塞控制:为了避免过多的数据注入网络中。

注意区分流量控制和拥塞控制:

  1. 拥塞控制针对的是网络全局上,流量控制针对的只是针对发送方和接受方(点对点)
  2. 拥塞是因为网络上很多主机都在发送数据,导致拥塞。而流量控制是因为接受方上层来不及处理发送方 发送的数据。

这里为了方便分析,假设:

  1. 数据单方向传送,而另一个方向只传送确认。(无捎带应答)

  2. 接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度。

    因为:发送窗口=min(接收窗口rwnd,拥塞窗口cwnd)

    接受窗口:接收方根据接受缓存设置的值,并告知给发送方,反映接收方容量。
    拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。

慢开始,拥塞避免:
在这里插入图片描述
ssthresh:慢开始的阻塞窗口到这个位置增长速度减慢。由慢开始过渡到拥塞避免

如果网络发生阻塞,阻塞窗口重置为1,重新开始慢开始,ssthresh减小为发生阻塞时的阻塞窗口值的一半。

之后的过程继续重复即可。

快重传,快恢复:

快重传:因为TCP采用累计确认机制,所以如果收到多个重复的确认报文(冗余ACK),可以确认这个确认数据流ack字节之后的报文数据丢失。需要重传一次。

在这里插入图片描述
当收到冗余ACK时,重发报文后进行快恢复,拥塞窗口大小不是直接重置到1,而是直接将新拥塞窗口大小设置为冗余ACK时的拥塞窗口大小的一半(新ssthresh值)(快恢复)。

TCP Tahoe版本废弃,了解即可。

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

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

相关文章

redis 哨兵

哨兵可以帮助我们解决主从架构中的单点故障问题 哨兵的配置: 新建目录:usr/local/docker/redis/sen/ docker-compose.yml文件如下 version: "3.1" services:redis1:image: daocloud.io/library/redis:5.0.7restart: alwayscontainer_name: …

STL技巧大赏

STL技巧大赏 map insertinsertinsert 不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效beginbeginbeginendendendclearclearclear 清除所有countcountcount 某个元素出现次数lower/upperboundlower/upper boundlower/upperbound set 比 mapmapm…

半导体新能源智能装备上位机工业软件设计方案

一、什么是上位机软件 如果说PLC是工业控制的小脑,那么上位机软件就是其大脑。在概念上,控制者和提供服务者是上位机,被控制者和被服务者是下位机,上位机往往是数字信号的处理和命令的下发,下位机往往是模拟量的处理和…

【Linux】初识系统调用进程状态

文章目录1. 什么是系统调用1.1 通过系统调用获取进程标示符通过其他方式查看PIDTopPS使用PID1.2 通过系统调用创建进程-fork初识2. 进程状态看看Linux内核源代码怎么定义查看状态Z(zombie)-僵尸进程僵尸进程危害孤儿进程1. 什么是系统调用 在linux中,系统调用是指操…

[附源码]java毕业设计校园志愿者服务管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Node_exporter主机探针部署

部署需求分析 使用ansible批量部署node-exporter监控客户端 node-exporter解压安装目录为home 添加至Linux服务重新加载,启动模块并设置开机启动 测试环境(centos 7——3.10.0-1160.el7.x86_64)运行成功 因为部署步骤较少,单个pla…

主从延迟读写不一致解决方案分析

具体业务场景方案分析 问题背景: 虽然强制走写库,避免了主从延迟带来的读库数据不一致问题,但是增加了写库的QPS,带来了巨大压力,所以通过限流来保护db,但这样会降低QPS。 业务上暂时不清楚,所…

[附源码]java毕业设计校园新闻管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

转铁蛋白修饰脂质体定制,Transferrin-Liposome

人转铁蛋白(Human Transferrin)主要在肝脏合成,是由位于同源N-端和C-端的两个叶片(Lobe)组成的一种单链糖蛋白。人转铁蛋白共含678个氨基酸残基,等电点为5.9、分子量为76kD。每分子的转铁蛋白能携带2个三价…

Mybatsi从入门到精通、从精通到卸载,这一篇就足够了【中篇】

资料下载 链接: https://pan.baidu.com/s/1i_D3hSkMElUyxBC0OJqRRg?pwdthg4提取码: thg4 简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简…

深度学习入门(四十七)计算机视觉——SSD和YOLO简介

深度学习入门(四十七)计算机视觉——SSD和YOLO简介前言计算机视觉——SSD和YOLO简介课件(单发多框检测SSD)生成锚框SSD模型效果总结课件(YOLO)YOLO(你只看一次)效果前言 核心内容来…

nvm的下载,安装与使用详解

一、安装nodejs方式有很多种 第一种:官网下载  通过nodejs官网下载安装 ,但有个缺陷,不同版本的nodejs无法顺利的切换。 第二种: NVM安装  NVM可以帮助我们快速切换 node版本。 二、 下载nvm安装包 官方下载地址:http://​ h…

力扣(LeetCode)41. 缺失的第一个正数(C++)

类计数排序 小于 111 ,大于 nnn 的数,不会对答案造成影响。所以只要考虑 1——n1——n1——n 的数。 由于题目要求 O(1)O(1)O(1) 空间,参考计数排序思想,利用原数组 numsnumsnums 存储 1——n1——n1——n ,需要将 1…

网易有道三季报解读:转型“有道”,但依旧道阻且长

11月17日晚间,美股上市公司网易有道(以下简称“有道”)发布2022年第三季度财报,营收同比大幅增长,亏损大幅收窄,成绩喜人。有道去年三季度自7月24日“双减”政策出台后被迫开始转型,整整一年过去…

MySQL-Day02 数据库以及数据表的基本操作

目录 一、数据库的基本操作 1.1 创建数据库 1.2 删除数据库 1.3 使用创建的数据库 1.4 扩展知识:InnoDB表 面试题:InnoDB和MyISAM的区别? 二、数据表的基本操作 2.1 创建数据表 MySQL数据类型 2.2 表约束 2.2.1 主键约束 2.2.2 非…

求求了!这份GitHub 70K+的纯手写RabbitMQ 笔记都给我码住好吗!

说到消息中间件,大部分人的第一印象可能是Kafka。毕竟Kafka自问世以来,就顶着高并发,大流量的光环。当然了Kafka也不负众望,在大数据处理方面一直独领风骚。 这里想说说另一款同样优秀的消息中间件RabbitMQ。 选RabbitMQ还是Kaf…

一种多源信息融合方法及其应用(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

基于armv8的kvm实现分析(三)kvm初始化流程

本文基于以下软硬件假定: 架构:AARCH64 内核版本:5.14.0-rc5 1 kvm概述 kvm是基于linux内核实现的一种type 2虚拟化方案,它作为内核的一个模块负责虚拟化环境初始化,虚拟机和虚拟cpu模拟,以及IO捕获与转…

发布适用于 .NET 7 的 .NET MAUI

我们在六个月前向您介绍了 .NET 多平台应用程序 UI (MAUI),现在我们很高兴地宣布 .NET MAUI 在我们的下一个主要版本 .NET 7 中普遍可用。在此短的时间范围内,我们在 .NET MAUI 中的主要工作是解决您的主要反馈报告、改进 CollectionView 的性能&#xf…

P8842 [传智杯 #4 初赛] 小卡与质数2 垃圾筛

题目: 思路: 首先排除比较每一个比X小的数去看结果,因为一定会tle 然后考虑去和每一个比X小的数去看结果,去判定是否比它小,看起来是优秀了一些,但是 n以内的质数比例大约是1ln(n)\frac{1}{ln(n)}ln(n)1​…