当前位置: 首页 > news >正文

计算机网络微课堂(湖科大教书匠)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和紧急指针

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

在这里插入图片描述

扩展首部:

选项:

在这里插入图片描述

填充:

在这里插入图片描述

相关文章:

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

计算机网络微课堂&#xff08;湖科大教书匠&#xff09;TCP部分 【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 TCP的流量控制 一般来说&#xff0c;我们希望数据传输得更快一些。但如果发送方把数据发送得过快&#xff0c;接收方就可能来不及接收&#…...

C++ 字符串介绍

在C编程中&#xff0c;字符串是非常重要的数据类型之一。字符串用于表示文本信息&#xff0c;处理字符串是许多程序的基本需求。C提供了多种方式来处理字符串&#xff0c;包括C风格的字符串&#xff08;C-strings&#xff09;和C标准库中的std::string类。本文将介绍这两种字符…...

[Cloud Networking] BGP

1. AS (Autonomous System) 由于互联网规模庞大&#xff0c;所以网络会被分为许多 自治系统&#xff08;AS-Autonomous system&#xff09;。 所属类型ASN名称IPv4 数量IPv6数量运营商ISPAS3356LEVEL3 - Level 3 Parent, LLC, US29,798,83273,301,954,048互联网企业AS15169GO…...

Typora failed to export as pdf. undefined

变换版本并没有用&#xff0c;调整图片大小没有用 我看到一个博客后尝试出方案 我的方法 解决&#xff1a;从上图中的A4&#xff0c;变为其他&#xff0c;然后变回A4 然后到处成功&#xff0c;Amazing&#xff01; 参考&#xff1a; Typora 导出PDF 报错 failed to export…...

windows 10 安装tcping 使用教程

1 官网下载:tcping下载 2 复制tcping 到win10系统目录C:\Windows\System32 3 tcping 网址测试,可以指定端口 4 tcping 测试端口联通 5 tcping http模式...

[leetcode hot 150]第一百二十二题,买卖股票的最佳时机Ⅱ

题目&#xff1a; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大…...

openstack Y版在ubuntu22.04上不能创建超过8个cpu的虚拟机问题解决

环境 openstack 版本&#xff1a; Y版25.2.1 操作系统&#xff1a;ubuntu22.04 问题 创建16 vcpu的虚拟机&#xff0c;报错&#xff1a; Failed to build and run instance: libvirt.libvirtError: error from service: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs…...

全国31省细分产品出口数据集(2002-2022年)

数据简介&#xff1a;整理全国31个省直辖市自治区按hs码分的22类细分产品的出口数据&#xff0c;只包含22类的细分&#xff0c;不包含更细的类目。可用来计算出口产品质量&#xff0c;出口产品技术复杂度等指标&#xff0c;数据区间为2002-2022年。 数据名称&#xff1a;31省细…...

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…...

K8S 角色/组件及部署方式的简单概述

1.宏观架构图 2.角色详情 2.1 Master(Controller Plane) 早期是叫 Master 节点&#xff0c;后期改名为 Controller Plane&#xff0c;负责整个集群的控制和管理 Master 不会干活的(当然你让它干也是会干的&#xff0c;涉及到污点容忍)&#xff0c;而是起到访问入口&#xff…...

堆【模板】小根堆堆【模板】大根堆(回)

目录 堆【模板】小根堆 题目描述1 输入1 输出1 样例输入 1 样例输出 1 提示1 代码1 堆【模板】大根堆 题目描述2 输入 输出 样例输入2 样例输出2 提示2 代码2 堆【模板】小根堆 题目描述1 初始小根堆为空&#xff0c;我们需要支持以下3种操作&#xff1a; 操作…...

【JavaScript】JavaScript简介

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 JavaScript入门&#xff08;1&#xff09;————JavaScript简介开篇说明一、什么是JavaScript二、JavaScript的使用2.1 开发工具的选择…...

pg_rman:备份和恢复管理工具#postgresql培训

pg_rman 是 PostgreSQL 的在线备份和恢复工具。 pg_rman 项目的目标是提供一种与 pg_dump 一样简单的在线备份和 PITR 方法。此外&#xff0c;它还为每个数据库集群维护一个备份目录。用户只需一个命令即可维护包括存档日志在内的旧备份。 #PG培训#PG考试#postgresql考试#pos…...

【小学期】常用基于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…...

JavaScript高级程序设计(第四版)--学习记录之迭代器与生成器(上)

什么是迭代&#xff1f; 迭代的意思是按照顺序反复多次执行一段程序。循环是迭代机制的基础&#xff0c;因为它可以指定迭代的次数&#xff0c;以及每次迭代要执行的操作。 迭代器模式 迭代器模式描述了一个方案&#xff0c;可以把有些结构称为“可迭代对象” &#xff0c;这些…...

51单片机第9步_结构和联合

本章重点学习结构和联合。 //结构和联合应用举例 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdio.h> //包含头文件stdio.h //_getkey();从串口读入一个字符; //putchar();向串口发送一个字节; //printf();向串口发送一串字节; /…...

lua5.3.4的Linux的库文件下载地址

从这个链接选lua5.3.4 Lua Binaries (sourceforge.net) 进入-> 这个页面 LuaBinaries - Browse /5.3.4/Linux Libraries at SourceForge.net 之后就可以下载了。...

网盘挂载系统-知识资源系统-私域内容展示系统

系统介绍&#xff1a; 存储&#xff1a;一共支持约30款云盘存储&#xff0c;其中包括主流的&#xff08;百度网盘、阿里云盘、夸克云盘、迅雷云盘、蓝奏云、天翼云盘&#xff09;&#xff0c;部分展示 以及特别的&#xff08;一刻相册、对象存储、又拍云存储、SFTP、MEGA 网盘…...

水位自动监测摄像机

随着科技的不断进步&#xff0c;水位自动监测摄像机作为现代智能监控技术的重要应用&#xff0c;正在广泛应用于水利工程、防洪管理和环境监测等领域&#xff0c;显著提升了监测效率和数据准确性。水位自动监测摄像机利用高精度摄像头和先进的图像处理技术&#xff0c;能够实时…...

基于SSM+Jsp的疫情居家办公OA系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...