计算机网络微课堂(湖科大教书匠)TCP部分

计算机网络微课堂(湖科大教书匠)TCP部分

【计算机网络微课堂(有字幕无背景音乐版)】

TCP的流量控制

一般来说,我们希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。

流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收,利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

在这里插入图片描述

如果主机B接收窗口被调整为0,那么主机A就会启动持续计时器,持续计时器超时,就发送零窗口探测报文(携带1字节数据)。然后主机B要对零窗口探测报文进行确认,并告知自己的接受窗口。

主机B即使接收窗口为0,也必须接受零窗口探测报文段、确认报文段、以及携带有紧急数据的报文段。

零窗口探测报文段也有重传计时器,如果零窗口探测报文段丢失,那么等到重传计时器超时后,零窗口探测报文段会被重传。

在这里插入图片描述

TCP的拥塞控制

在这里插入图片描述

拥塞控制有四种算法:慢开始,拥塞避免,快重传,快恢复。

cwnd:拥塞窗口(动态变化)

cwnd维护原则:没有出现拥塞,cwnd就增大;出现拥塞,cwnd就减少。

拥塞窗口值是几就能发送几个数据报文段。

发送方将cwnd作为发送窗口swnd,cwnd=swnd。

慢开始门限ssthresh:

当 cwnd < ssthreshde 的时候,使用慢开始算法;

当 cwnd > ssthreshde 的时候,使用拥塞控制算法;

当 cwnd = ssthreshde 的时候,可以使用慢开始算法,也可以使用拥塞控制算法;

在这里插入图片描述

慢开始和拥塞避免

**慢开始:**每个传输轮次,发送方每收到一个对新报文段的确认时,就把拥塞窗口值+1。

比如最开始cwnd=1;发送一个,收到一个,cwnd+1=2;第二轮发送两个,收到两个,cwnd+2=4;第三轮发送4个,收到4个,cwnd+4=8。

也就是说,慢开始算法中cwnd值以指数规律增大。

当拥塞窗口值增长到慢开始门限时,就开始拥塞避免算法。

拥塞避免:每个传输轮次后,cwnd值只能线性+1.

在这里插入图片描述

传输图中丢失数据包,出现重传计时器超时的情况,判断网络很可能出现拥塞控制:

将ssthresh值更新为发生拥堵时cwnd值的一半;

将cwnd值减少为1,并重新开始执行慢开始算法。

比如图中的cwnd=24,ssthresh就设置为12.

在这里插入图片描述

全部过程如图所示:

在这里插入图片描述

“慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;
“拥塞避免”并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞;

快重传

在这里插入图片描述

发送M1报文段,接收方立即确认M1,

发送M2报文段,接收方立即确认M2;

发送M3报文段,丢失,接收方无法回复;

发送M4报文段,接收方重复确认M2;

发送M5报文段,接收方重复确认M2;

发送M6报文段,接收方重复确认M2;

发送方立即重传M3报文段,接收方重复确认M2;

在这里插入图片描述

快恢复

发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。

在这里插入图片描述

TCP超时重传时间的选择

如果将报文段超时重传的时间,设置得比往返时间RTT的值小,就会引起不必要的重传加重网络负荷。

在这里插入图片描述

如果将超时重传的值设置的远大于RTT的值,会导致网络的空闲时间增大,降低了传输效率。

在这里插入图片描述

超时重传时间RTO应略大于往返时间RTT。

在这里插入图片描述

但是由于下面层次的结构也很复杂,例如每个IP数据报的转发路由可能不同,所以每次传输的往返时间不同。

如下图,RTO的时间略大于RTT0,但是下一次传输的往返时间RTT1比RTT0要长很多,此时的RTO就不适用于作为RTT1的超时重传时间,会导致没必要的重传。

在这里插入图片描述

所以不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO。

所以我们计算加权平均往返时间RTTs,超时重传时间RTO略大于RTTs。

在这里插入图片描述

RTO计算:

在这里插入图片描述

往返时间RTT比较难测量,如果出现重传,容易导致测量的时间不准。

在这里插入图片描述

利用Karn算法修正版计算RTO的值:

在这里插入图片描述

如下图所示,在第五次传输中,由于RTT5>RTO4的值,所以会发生超时重传,于是此时的RTO5直接等于RTO4的两倍。

在这里插入图片描述

TCP可靠传输的实现

TCP基于以字节为单位的滑动窗口来实现可靠传输。

下图:报文段首部中的窗口字段rwnd的值为20——接收方表明自己的接收窗口尺寸为20字节;确认号的字段为31——接收方希望收到的下一个数据的序号是31。序号30为止的数据已经全部正确接收了。

发送根据这两个字段的值构建自己的发送窗口=20.

在这里插入图片描述

发送方在没有接到确认的情况下可以将发送窗口里面的数据全部发出,凡是没有确认的数据,在确认之前都需要保留,因为可能会超时重传。

在这里插入图片描述

发送窗口的前沿和后沿:

在这里插入图片描述

如何描述发送窗口的状态:

在这里插入图片描述

滑动窗口的滑动过程建议看原视频P63 5.7部分:

【计算机网络微课堂(有字幕无背景音乐版)】

发送窗口的数据已经全部发出后,发送方需要等待接受方的确认才能继续发送数据。

如果迟迟没有确认,重传计时器超时,会重传发生窗口内已发送的数据,并重新启动重传计时器。

在这里插入图片描述

一些其他的要点:

在这里插入图片描述

TCP的连接建立

TCP连接的三个阶段:

在这里插入图片描述

三次握手

TCP规定SYN=1的报文段不能携带数据,但要消耗掉一个序号。

TCP连接由客服端主动发起。

在这里插入图片描述

客户发送对于TCP连接请求的确认的确认是否多余?

在这里插入图片描述

四次挥手

客户发送的TCP报文段中:

序号seq字段的值u为TCP客户进程之前已发送过的、数据的最后一个字节的序号+1;

序号ack字段的值v为TCP客户进程之前已收到的、数据的最后一个字节的序号+1。

服务器发送的:

序号seq字段的值v为TCP服务器进程之前已发送过的、数据的最后一个字节的序号+1(与上面的ack字段值匹配);

序号ack字段的值u+1是对上面客户发送的seq的确认。

在这里插入图片描述

FIN=1和ACK=1表示这是一个TCP释放报文段。

在这里插入图片描述

是否有必要使得客户进入时间等待状态?

是有必要的。如果没有时间等待状态就关闭,那么如果最后一次确认丢失了,服务器就会进入无限等待客户确认的状态里,无法关闭。

在这里插入图片描述

如果客户出现故障,那么服务器怎么关闭连接?

在这里插入图片描述

TCP的首部格式

为了实现可靠传输,TCP采取了面向字节流的方式。

一个TCP报文由首部和数据载荷两部分构成。

**源端口号:**标识发送该TCP报文段的应用进程。

**目的端口号:**标识接收该TCP报文段的应用程序。

在这里插入图片描述

**序号:**指出本TCP报文段数据载荷的第一个字节的序号。

在这里插入图片描述

**确认号:**为n,表明序号到n-1为止的数据都已正确接收,期待接收序号为n的数据。

只有当确认标志位ACK取值为1时,确认号字段才有效。

在这里插入图片描述

在这里插入图片描述

一个全双工通信举例:

可以看到发送端的序号和接收端的确认号是对应的,发送端的确认号和接收端的序号也是对应的。

在这里插入图片描述

**数据偏移:**指出TCP报文段首部的长度。

在这里插入图片描述

保留:占6比特,保留为今后使用,目前为0。

校验和:不重要

**同步标志为SYN:**在TCP建立连接时用来同步序号。

SYN置1表示这是TCP连接报文段。

在这里插入图片描述

终止标志位FIN:用来释放TCP连接。

FIN置1表示这是TCP释放报文段。

在这里插入图片描述

复位标志位RST:用来复位TCP连接。

在这里插入图片描述

推送标志位PSH

在这里插入图片描述

紧急标志位URG和紧急指针

接收方会从数据载荷部分取出紧急数据,直接上交应用进程,而不必在接收缓存中排队。

在这里插入图片描述

扩展首部:

选项:

在这里插入图片描述

填充:

在这里插入图片描述

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

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

相关文章

KV260视觉AI套件--开箱报告

目录 1. 简介 2. 与 Zynq 的渊源 3. 官方的入门步骤 4. 总结 1. 简介 传统的ARMFPGA或DSPFPGA控制方案在软件、逻辑、硬件以及系统工程的协同调试中&#xff0c;往往需要团队成员之间严格按照预定计划和接口规范进行分工合作&#xff0c;这不仅增加了测试过程的复杂性&…

《概率论与数理统计》期末复习笔记_上

目录 第1章 随机事件与概率 1.1 随机事件 1.2 事件的关系与运算 1.3 概率的定义与性质 1.4 古典概型_重点 1.5 几何概型 1.6 条件概率与乘法公式 1.7 全概率公式与贝叶斯公式_重点 1.8 事件的独立性_重点 1.9 伯努利概型_重难点 第2章 随机变量及其分布 2.1 随机变…

实验2 色彩模式转换

1. 实验目的 ①了解常用的色彩模式&#xff0c;理解色彩模式转换原理&#xff1b; ②掌握Photoshop中常用的颜色管理工具和色彩模式转换方法&#xff1b; ③掌握使用Matlab/PythonOpenCV编程实现色彩模式转换的方法。 2. 实验内容 ①使用Photoshop中的颜色管理工具&#xff…

第0章_项目方案介绍

文章目录 第0章 项目方案介绍0.1 功能介绍0.2 硬件方案0.3 软件方案0.3.1 上位机方案0.3.2 **中控方案**0.3.3 **传感器方案**0.3.4 **技术难点** 第0章 项目方案介绍 0.1 功能介绍 本课程来自一个真实项目&#xff1a;多个气体传感器的管理。由于气体传感器比较昂贵&#xf…

比尔盖茨:Agent将是AI最大的赛道

Agent不仅将改变人们与计算机的互动方式&#xff0c;还将颠覆软件行业&#xff0c;引发自从我们从键入命令到点击图标以来计算机领域的最大革命。 保罗艾伦和我一起创立微软的至今&#xff0c;我对软件的热爱至今依然不减。 然而&#xff0c;尽管在过去的几十年中软件已经取得…

Vue.js 和 Node.js 全栈项目的运行与部署指南

Vue.js 和 Node.js 全栈项目的运行与部署指南 前言具体运行方式导入数据库初始化安装配置nodejs启动server后端启动client前端确保前后端正确连接 前言 本博客用来介绍一下一个包含前端和后端代码的全栈项目MoreMall&#xff0c;前端部分使用了 Vue.js&#xff0c;后端部分使用…

多阶段分层构建容器化Spring Boot应用程序

上一节中&#xff0c;容器化spring boot应用程序-CSDN博客我们介绍了基于简单的Dockerfile对spring boot进行容器化的过程&#xff0c;本讲将介绍如何基于Dockerfile进行多阶段的分层构建过程&#xff0c;希望对大家有所帮助。 Spring Boot从版本2.3.0开始支持分层构建容器化的…

Mysql中varchar类型数字排序不对踩坑记录

场景 在进行表设计时将版本号字段设计了为varchar类型&#xff0c;尽量从表设计阶段将数字类型列设计为int型。 再进行排序时如果版本号累计到了10及以上&#xff0c;那么再进行排序时则会出现问题。 比如下面执行排序时发现10被排在了第一位。 这是因为 varchar类型对数字…

已备案网站变更并且不影响现有业务的方案

已备案网站变更并且不影响现有业务的方案 近日有个工作上的需求&#xff0c;已备案网站变更并且不影响现有业务&#xff0c;记录一下。 需求 域名&#xff1a;XXXXXX.com备案变更前主体&#xff1a; 海南XXXXXX科技有限公司 备案变更后主体&#xff1a; 深圳XXXXXX科技有限…

【05】从0到1构建AI生成思维导图应用 -- 前端交互实现

【05】从0到1构建AI生成思维导图应用 – 前端交互实现 大家好&#xff01;最近自己做了一个完全免费的AI生成思维导图的网站&#xff0c;支持下载&#xff0c;编辑和对接微信公众号&#xff0c;可以在这里体验&#xff1a;https://lt2mind.zeabur.app/ 上一章&#xff1a;http…

【图解大数据技术】Hive、HBase

【图解大数据技术】Hive、HBase Hive数据仓库Hive的执行流程Hive架构数据导入Hive HBaseHBase简介HBase架构HBase的列式存储HBase建表流程HBase数据写入流程HBase数据读取流程 Hive Hive是基于Hadoop的一个数据仓库工具&#xff0c;Hive的数据存储在HDFS上&#xff0c;底层基于…

容器进程

一、容器进程和宿主机进程的关系 容器在进程空间上和宿主机是隔离的&#xff0c;每创建一个容器&#xff0c;该容器都有一个独属的进程空间简称PID NameSpace。但是容器本质也是一个进程&#xff0c;自然是由其父进程创建的&#xff0c;这个可以使用ps aux命令验证。 | 容器视…

Tesseract Python 图片文字识别入门

1、安装tesseract Index of /tesseract https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.3.0.20221214.exe 2、安装中文语言包 https://digi.bib.uni-mannheim.de/tesseract/tessdata_fast/ 拷贝到C:\Program Files\Tesseract-OCR\tessdata 3、注…

ISO26262标准

什么是ISO26262&#xff1f; ISO 26262(国际功能安全标准)是一个涵盖整个汽车产品开发过程的汽车功能安全标准。ISO 26262继承或改编自工业自动化行业的安全要求标准IEC61508&#xff0c;但专门为汽车行业量身定制。最新版本是ISO26262-1:2018。 它包括诸如需求分析、安全分析…

STM32CubeMx的学习记录系列(2)- STM32G474RET6

最近有个小比赛&#xff0c;需要用到G4&#xff0c;不过找了一圈没有找到标准库的代码&#xff0c;只能使用hal&#xff0c;用CubeMX来生成配置代码。 共同特点 ARDUINO Uno V3 扩展连接器 ST morpho 扩展引脚接头&#xff0c;可完全访问所有 STM32 I/O 采用LQFP64或LQFP48封…

2-requests模块(6节课学会爬虫)

2-requests模块&#xff08;6节课学会爬虫&#xff09; 1&#xff0c;安装requests2&#xff0c;发送get&#xff0c;post请求&#xff0c;获取响应3&#xff0c;response的方法方法一&#xff08;Response.text&#xff09;方法二&#xff08;response.content.decode()&#…

Docker 查看源地址/仓库地址,更改

一、源地址文件配置路径。若有docker文件夹&#xff0c;没有json&#xff0c;可以新增&#xff0c;复制进去内容 /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"&#xff0c;&q…

【数据分析】1、用Pandas计算数据相关性系数

相关性系数和相关分析是了解变量之间关系的重要工具。通过合理选择相关性系数和科学分析数据&#xff0c;能够有效揭示变量之间的关系&#xff0c;为进一步研究和决策提供有力支持。在实际应用中&#xff0c;应结合业务背景、数据特性和统计原则&#xff0c;谨慎解释和应用相关…

【小学期】常用基于Swing的七个静态界面

示例1&#xff1a;基本的带按钮和标签的界面 import javax.swing.*; import java.awt.*;public class SimpleSwingApp1 {public static void main(String[] args) {JFrame frame new JFrame("Simple Swing App 1");frame.setDefaultCloseOperation(JFrame.EXIT_ON_C…

【linux】从零到入门

linux概述 Linux是一个免费使用和自由传播的一套操作系统。用户可以无偿地得到它地源代码&#xff0c;和大量地应用程序&#xff0c;并且可以随意修改和增加它们。 Linux的内核起初由林纳斯编写。内核是啥&#xff1f; 驱动设备&#xff0c;文件系统&#xff0c;进程管理&…