计算机网络微课堂(湖科大教书匠)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部分
计算机网络微课堂(湖科大教书匠)TCP部分 【计算机网络微课堂(有字幕无背景音乐版)】 TCP的流量控制 一般来说,我们希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收&#…...
C++ 字符串介绍
在C编程中,字符串是非常重要的数据类型之一。字符串用于表示文本信息,处理字符串是许多程序的基本需求。C提供了多种方式来处理字符串,包括C风格的字符串(C-strings)和C标准库中的std::string类。本文将介绍这两种字符…...
[Cloud Networking] BGP
1. AS (Autonomous System) 由于互联网规模庞大,所以网络会被分为许多 自治系统(AS-Autonomous system)。 所属类型ASN名称IPv4 数量IPv6数量运营商ISPAS3356LEVEL3 - Level 3 Parent, LLC, US29,798,83273,301,954,048互联网企业AS15169GO…...
Typora failed to export as pdf. undefined
变换版本并没有用,调整图片大小没有用 我看到一个博客后尝试出方案 我的方法 解决:从上图中的A4,变为其他,然后变回A4 然后到处成功,Amazing! 参考: 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]第一百二十二题,买卖股票的最佳时机Ⅱ
题目: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大…...
openstack Y版在ubuntu22.04上不能创建超过8个cpu的虚拟机问题解决
环境 openstack 版本: Y版25.2.1 操作系统:ubuntu22.04 问题 创建16 vcpu的虚拟机,报错: Failed to build and run instance: libvirt.libvirtError: error from service: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs…...
全国31省细分产品出口数据集(2002-2022年)
数据简介:整理全国31个省直辖市自治区按hs码分的22类细分产品的出口数据,只包含22类的细分,不包含更细的类目。可用来计算出口产品质量,出口产品技术复杂度等指标,数据区间为2002-2022年。 数据名称:31省细…...
1,Windows-本地Linux 系统(WSL)
目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…...
K8S 角色/组件及部署方式的简单概述
1.宏观架构图 2.角色详情 2.1 Master(Controller Plane) 早期是叫 Master 节点,后期改名为 Controller Plane,负责整个集群的控制和管理 Master 不会干活的(当然你让它干也是会干的,涉及到污点容忍),而是起到访问入口ÿ…...
堆【模板】小根堆堆【模板】大根堆(回)
目录 堆【模板】小根堆 题目描述1 输入1 输出1 样例输入 1 样例输出 1 提示1 代码1 堆【模板】大根堆 题目描述2 输入 输出 样例输入2 样例输出2 提示2 代码2 堆【模板】小根堆 题目描述1 初始小根堆为空,我们需要支持以下3种操作: 操作…...
【JavaScript】JavaScript简介
希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 JavaScript入门(1)————JavaScript简介开篇说明一、什么是JavaScript二、JavaScript的使用2.1 开发工具的选择…...
pg_rman:备份和恢复管理工具#postgresql培训
pg_rman 是 PostgreSQL 的在线备份和恢复工具。 pg_rman 项目的目标是提供一种与 pg_dump 一样简单的在线备份和 PITR 方法。此外,它还为每个数据库集群维护一个备份目录。用户只需一个命令即可维护包括存档日志在内的旧备份。 #PG培训#PG考试#postgresql考试#pos…...
【小学期】常用基于Swing的七个静态界面
示例1:基本的带按钮和标签的界面 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高级程序设计(第四版)--学习记录之迭代器与生成器(上)
什么是迭代? 迭代的意思是按照顺序反复多次执行一段程序。循环是迭代机制的基础,因为它可以指定迭代的次数,以及每次迭代要执行的操作。 迭代器模式 迭代器模式描述了一个方案,可以把有些结构称为“可迭代对象” ,这些…...
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 之后就可以下载了。...
网盘挂载系统-知识资源系统-私域内容展示系统
系统介绍: 存储:一共支持约30款云盘存储,其中包括主流的(百度网盘、阿里云盘、夸克云盘、迅雷云盘、蓝奏云、天翼云盘),部分展示 以及特别的(一刻相册、对象存储、又拍云存储、SFTP、MEGA 网盘…...
水位自动监测摄像机
随着科技的不断进步,水位自动监测摄像机作为现代智能监控技术的重要应用,正在广泛应用于水利工程、防洪管理和环境监测等领域,显著提升了监测效率和数据准确性。水位自动监测摄像机利用高精度摄像头和先进的图像处理技术,能够实时…...
基于SSM+Jsp的疫情居家办公OA系统
开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
