计算机网络 运输层下 | TCP概述 可靠传输 流量控制 拥塞控制 连接管理

文章目录

  • 3 运输层主要协议 TCP 概述
    • 3.1 TCP概述 特点
    • 3.2 TCP连接
    • RSVP资源预留协议
  • 4 TCP可靠传输
    • 4.1 可靠传输工作原理
      • 4.1.1 停止等待协议
      • 4.1.2 连续ARQ协议
    • 4.2 TCP可靠通信的具体实现
      • 4.2.1 以字节为单位的滑动窗口
      • 4.2.2 超时重传时间的选择
      • 4.2.3 选择确认SACK
  • 5 TCP的流量控制
    • 5.1 滑动窗口实现
  • 6 TCP拥塞控制
    • 6.1 拥塞控制一般原理
    • 6.2 拥塞控制的方法
      • 1 慢开始
      • 2 拥塞避免
      • 3 快重传
      • 4 快恢复
      • 主动队列管理AQM
  • 7 TCP运输连接管理
    • 7.1 TCP的建立
    • 7.2 TCP的连接释放

3 运输层主要协议 TCP 概述

3.1 TCP概述 特点

TCP是面向连接的运输协议

  • 每一条TCP只能有两个端点,点对点
  • 提供可靠的全双工交付
  • 面向字节流,但占用很多资源
  • 不提供广播和多播服务

所以从某种意义来说

UDP是一种更加有效的工作方式

TCP面向流的概念

把字节写入发送缓冲,加上TCP首部构成TCP报文段,从接收缓存读取字节,到接收方

3.2 TCP连接

TCP的连接端点叫做套接字(端口号拼接到IP地址构成了套接字)

套接字socket=(IP地址:端口号) 如(192.268.2.2:80)

对于要实现传送,可靠传送,拥塞控制等,某些状态信息是必要的。从发送方主机和接收方主机上预留的资源,中间系统不必为主机预留资源

RSVP资源预留协议

是在终端和路由器之间进行业务质量参数协商的信令协议

商量预留带宽和缓冲区的大小

双向资源预留

4 TCP可靠传输

4.1 可靠传输工作原理

4.1.1 停止等待协议

就是每发送完一个分组就停止发送,等待对方确认,在收到确认之后再发送下一个分组

全双工通信的双方既是发送方也是接收方

假设我们发送方是A,接收方是B

发送消息 M 0 , M 1 … … M_0,M_1…… M0,M1……

无差错情况

即A发送,B确认后正常返回确认信息

在这里插入图片描述

出现差错

出现差错有两种情况

情况一:发送信息没有到达接收方B,接收方B自然不会向发送方A传输确认信息

情况二:接收方B检测出了错误,直接丢弃,也不会给发送方A传输确认信息

那么A怎么判断是否出现差错呢?就是通过超时重传(设置一个超时计时器) 等一段时间如果没有收到确认信息,则认为传输差错,重传

在这里插入图片描述

确认丢失和确认迟到

在这里插入图片描述

这种情况发生在接收方向发送方发送确认信息的时候,确认信息丢失

导致A以为B没有正确收到,就会导致重复发送M信息,然后B收到重复的M之后,处理是

第一步 丢弃重复的M

第二步 向A再发送确认信息

停止等待协议优点是简单

缺点是信道利用率太低

采用了流水线式的传输

4.1.2 连续ARQ协议

连续ARQ协议会设置一个滑动窗口,窗口内部的是可以进行发送的,发送方每收到一个确认,就把发送窗口向前移动一个分组的位置。

接收方一般都采用累积确认方法,也就是说不必逐个发送确认,而是收到几个分组之后,对按序到达的最后一个分组发送确认(这就表示到目前为止所有分组发送都正确的)

优点是:容易实现

缺点是:不能向发送方及时反映接收方收到的消息

4.2 TCP可靠通信的具体实现

具体实现方式之前,先了解TCP报文段首部格式

TCP面向字节流,但是传输单元是报文段

一个TCP报文段分为首部和数据两部分,而TCP的全部功能体现在它首部中各字段的作用。

TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项

4.2.1 以字节为单位的滑动窗口

首先对于发送方有一个发送窗口,接收方有一个接收窗口

发送方根据接收方传来的确认号与自己的发送窗口大小构建窗口或者移动窗口

接收方不断确认,然后按序交付给高层

4.2.2 超时重传时间的选择

前面我们讲到TCP发送方在规定时间没有收到则要进行重传

重传时间的选择是非常复杂的

TCP采用了一种自适应的算法

它记录一个报文段发送出去的时间,以及收到相应的确认的时间。这两个时间之差就是报文段往返时间 R T T RTT RTT,为了结果更加平滑,引入了加权平均往返时间 R T T s RTT_s RTTs

每测量一个新的RTT样本,进行一次重新的计算

新 R T T S = ( 1 − a ) × ( 旧的 R T T S ) + a × ( 新的 R T T 样本 ) 新RTT_S=(1-a)×(旧的RTT_S)+a×(新的RTT样本) RTTS=(1a)×(旧的RTTS)+a×(新的RTT样本)

a是一个常数,一般选择0.125

最后我们的超时重传时间RTO应略大于上面得出的加权平均往返时间 R T T S RTT_S RTTS

实际计算

R T O = R T T S + R T T D RTO=RTT_S+RTT_D RTO=RTTS+RTTD

R T T D RTT_D RTTD是RTT的偏差加权平均值

4.2.3 选择确认SACK

还有一个问题,就是如果收到的报文没有差错,只是未按序号,中间还缺少一些

那么能否只传输缺少的数据,而不传输已经正确到达的

是可以的,选择确认就是一种可行的处理方法SACK

这个SACK是可以选择的,双方通信可以约定好,如果使用的话会造成更大开销

5 TCP的流量控制

一般来说,我们总是希望数据传输的快一些,但是如果发送方数据传输过快,那么接收方就来不及接收而造成数据丢失,所以需要流量控制——让发送方的发送速率不要太快,让接收方来得及接收

5.1 滑动窗口实现

实际就是通过如果发送方发现发过去会导致丢失,那么则减小滑动窗口的大小

  1. 糊涂窗口综合征:当发送方和接收方对滑动窗口的大小以及如何控制它的方式存在一些不一致或不清晰的理解时,就会出现糊涂窗口综合征。这可能导致以下问题:
    • 窗口过小:如果接收方认为滑动窗口太小,无法有效利用可用的带宽,可能会导致数据传输速度变慢,从而浪费了网络资源。
    • 窗口过大:如果发送方认为滑动窗口可以更大,但接收方不能及时处理或确认所有数据包,就会导致拥塞和丢包问题。
    • 滑动窗口不同步:如果发送方和接收方之间的窗口大小或滑动窗口控制逻辑不一致,可能会导致数据包的重传和混淆,从而使网络性能下降。
  2. 解决方法:要解决糊涂窗口综合征,需要确保发送方和接收方之间对于窗口大小和滑动窗口控制的方式达成一致。这可以通过更好地协调和调整滑动窗口参数,以及在网络中实施拥塞控制策略来实现。

6 TCP拥塞控制

6.1 拥塞控制一般原理

当对网络中的某一资源的需求大于网络能够提供的资源时,则会产生拥塞,导致网络性能变坏,因而要进行拥塞控制

在这里插入图片描述

6.2 拥塞控制的方法

1 慢开始

拥塞窗口用来反映当前网络的这个拥塞情况,越大说明越拥塞

​ 用来确定网络的负载能力,核心由小到大逐渐增大拥塞窗口数值

​ 初始拥塞窗口cwnd的设置:

​ 旧规定,先把初始拥塞窗口cwnd设置为1到2个发送方最大报文段SMSS的数值

​ 新的RFC 5681 把初始拥塞窗口cwnd设置为不超过2到4个SMSS数值

慢开始门限

拥塞窗口控制方法:

​ 在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值

使用慢开始算法后,没经过一个传输轮次,拥塞窗口cwnd就加倍

一个传输轮次所经历的时间就是往返时间RTT。传输轮次更加强调:把拥塞窗口cwnd所允许发送的报文段都连续

设置一个慢开始门限ssthresh,

当cwnd<ssthresh 使用慢开始算法

当cwnd>ssthresh 改为使用拥塞避免算法

2 拥塞避免

​ 让拥塞窗口缓慢增大,即每经过一个往返时间RTT就把发送方的拥塞窗口+1,而不是加倍,使拥塞窗口cwnd按线性规律缓慢增长

因此,在拥塞避免阶段就有点“加法增大”特点

当出现拥塞的时候,减少分组数

3 快重传

让对方尽早知道发生了个别报文段的丢失

快重传算法首先要求接收方不要等待自己发送数据才进行捎带确认,而不是立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认

当发送方一连收到三个重复确认,就知道接收方确实没有收到报文段,因而立即进行重传

4 快恢复

当发送方一连收到三个重复确认,不认为此时发生了拥堵

因而不执行慢开始算法,而是执行快恢复算法

主动队列管理AQM

就是不要等到路由器的队列长度已经达到最大值的时候才不得不丢弃后面到达的分组,这样就太被动了

应当在队列长度到达某个值得警惕的数值时,就主动丢弃到达的分组

7 TCP运输连接管理

7.1 TCP的建立

​ TCP建立的过程叫做握手

​ 握手需要再客户和服务器之间交换三个TCP报文段,称之为三报文段握手

​ 采用三报文段握手主要为了防止已失效的连接请求报文段突然又传送到了,因而产生错误

7.2 TCP的连接释放

​ 四次握手

​ 为什么四次,核心原因就是因为全双工的原因!

TCP的有限状态机

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MAC苹果笔记本电脑如何彻底清理垃圾文件软件?

苹果电脑以其流畅的操作系统和卓越的性能而备受用户喜爱。然而&#xff0c;随着时间的推移&#xff0c;系统可能会积累大量垃圾文件&#xff0c;影响性能。本文将介绍苹果电脑怎么清理垃圾文件的各种方法&#xff0c;以提升系统运行效率。 CleanMyMac X是一款专业的Mac清理软件…

C#中HttpWebRequest的用法

前言 HttpWebRequest是一个常用的类&#xff0c;用于发送和接收HTTP请求。在C#中使用HttpWebRequest可以实现各种功能&#xff0c;包括发送GET和POST请求、处理Cookie、设置请求头、添加参数等。本文将深入介绍HttpWebRequest的用法&#xff0c;并给出一些常见的示例。 目录 前…

01AVue入门(持续学习中)

1.使用AVue开发简单的前端页面直接简单到起飞,他是Element PlusVueVite开发的,不需要向元素的前端代码一样一个组件要传很多参数,他可以使用Json文本来控制我们要传入的数据结构来决定显示什么 //我使用的比较新,我们也可以使用cdn直接使用script标签直接引入 2.开发中遇到的坑…

macOS制作dmg包

macOS制作dmg包 准备&#xff1a;磁盘工具、以及要制作的软件&#xff0c;这里以Firefox为例 图片素材 背景图&#xff1a; 找到Firefox&#xff0c;点击显示简介&#xff0c;查看包的大小 打开磁盘工具 文件–>新建映像–>空白映像 填写信息&#xff0c;大小…

MySQL,使用Union组合查询

1、基本使用 Union可将多条select语句组合成一个结果集&#xff0c;常见的使用场景有2种&#xff1a; 在单个查询中&#xff0c;从不同的表返回类似结构的数据&#xff1b;对单个表执行多个查询&#xff0c;按单个查询返回数据。 例&#xff1a;检索出所有价格<50的产品&…

.Net Attribute 什么是特性、预定义特性使用(一)

什么是特性&#xff1f; 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面…

实时化与 Serverless 是开源大数据 3.0 时代的必然选择

近日在 2023 云栖大会上&#xff0c;阿里云开源大数据产品进行了年度发布&#xff1a;E-MapReduce、Elasticsearch 等开源大数据产品全面 Serverless 化&#xff1b;创新性推出 Flink 与 Paimon 搭档的新一代流式湖仓&#xff1b;拥抱 AI&#xff0c;推出 Milvus 全托管服务&am…

基于SSM+Vue的新闻管理系统

基于SSMVue的新闻管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 新闻列表 管理员界面 用户界面 摘要 新闻管理系统基于SSM&#xff08;Spr…

C# 使用NUnit进行单元测试

写在前面 NUnit是一个开源的.Net单元测试框架&#xff0c;经常被用来在.Net体系下做白盒测试。 NUnit.org GitHub 本文记录一个简单的使用NUnit进行单元测试的完整流程。 代码实现 新建一个目标类库NUnitTester&#xff0c;添加待测试的类文件&#xff0c;内容如下&#…

GLTF/GLB模型在线预览、编辑、动画查看以及材质修改

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 GLTF在线编辑器提供了一个内置的模型查看器&#xff0c;可以加载和预…

最新国内可用使用GPT4.0,GPT语音对话,Midjourney绘画,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而&#xff0c;GP…

使用TikTok云手机轻松拓展全球市场

TikTok作为一款风靡全球的短视频应用&#xff0c;全球影响力不断扩大。越来越多的商家开始借助TikTok分享作品、在海外市场上获取商业机会。要想更好地借助TikTok扩大海外市场&#xff0c;使用TikTok云手机是一个好选择。本文将介绍TikTok云手机的几大作用&#xff0c;以助您更…

LVS+keepalived 高可用负载均衡

目录 工具&#xff1a; keepalived &#xff08;专为LVS和HA设计的一款健康检查工具&#xff09; 协议&#xff1a;VRRP协议 一个合格的集群&#xff0c;应该具备哪些特性&#xff1a; 健康检查&#xff08;探针&#xff09;的方式&#xff1a; 主备切换&#xff1a…

nodejs微信小程序+python+PHP柚子校园影院系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

JavaGUI(但期末速成版)之JFrame和JDialog

前言 学到期末发现越来越没时间来细写这些东西了&#xff0c;毕竟蒟蒻博主的发展方向主要需要学的不是Java&#xff0c;但为了期末高分通过&#xff0c;也不得不花一些精力上来&#xff0c;于是有了这样一篇速成GUI&#xff0c;本篇会以十分精简的语言来学习&#xff0c;主打一…

Linux:(登录后/退出后)—自动执行脚本或者命令

系统:centos7 登录后 自动执行脚本或者命令至少有三种 都是把要执行的语句写进文件里 /etc/profile ~/.bash_profile /etc/rc.d/rc.local 登录后自动执行脚本或者命令的方式有很多&#xff0c;网上大多数说的都是在 /etc/rc.d/rc.local 所以我主要讲解一下后两种。需要第…

nodejs+vue+微信小程序+python+PHP柚子校园影院系统-计算机毕业设计推荐

柚子校园影院综合网络空间开发设计要求。目的是将系统传统管理方式转换为在网上管理&#xff0c;完成信息管理的方便快捷、安全性高、交易规范做了保障&#xff0c;目标明确。柚子校园影院可以将功能划分为管理员功能和用户功能。  而开发本系统&#xff0c;又能够提高系统整体…

2024亚洲(春季)户外露营展览会在深圳启幕!共话户外露营生活流行风向

COSP2024深圳进出口户外用品贸易展&#xff0c;将于2024年3月14日至16日在深圳会展中心&#xff08;福田馆&#xff09;盛大举行。作为华南地区户外行业的顶级开年盛会&#xff0c;本次展会将汇聚600多家行业知名企业和60,000多名专业采购观众&#xff0c;共同聚焦户外全产业链…

大数据处理与分析-Spark

导论 (基于Hadoop的MapReduce的优缺点&#xff09; MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架 MapReduce是一种用于处理大规模数据集的编程模型和计算框架。它将数据处理过程分为两个主要阶段&#xff1a;Map阶…

Leetcode—75.颜色分类【中等】

2023每日刷题&#xff08;六十五&#xff09; Leetcode—75.颜色分类 实现代码 class Solution { public:void sortColors(vector<int>& nums) {int red 0, white 0, blue 0;for(auto num: nums) {if(num 0) {red;} else if(num 1) {white;} else {blue;}}for…