计算机网络微课堂(湖科大教书匠)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包…...
Synology API v0.8架构重构:企业级NAS自动化管理Python SDK深度解析
Synology API v0.8架构重构:企业级NAS自动化管理Python SDK深度解析 【免费下载链接】synology-api A Python wrapper around Synology API 项目地址: https://gitcode.com/gh_mirrors/sy/synology-api Synology API v0.8版本标志着该项目在企业级NAS自动化管…...
ARMv8 PMU架构与性能监控实战指南
1. ARMv8 PMU架构深度解析在ARMv8架构中,性能监控单元(Performance Monitor Unit, PMU)是处理器微架构层面的重要组件,它为开发者提供了硬件级别的性能数据采集能力。不同于传统的软件性能分析工具,PMU通过专用寄存器直接监控处理器内部事件&…...
如何利用QGIS 3.22为机器学习任务高效构建遥感影像切片数据集
1. 为什么需要QGIS处理遥感影像数据 做机器学习项目时,最头疼的就是数据准备环节。特别是处理遥感影像这种"庞然大物",动辄几个GB的高分辨率图像,直接用Python脚本处理不仅效率低,还容易内存溢出。去年我做城市绿地识别…...
基于Docker Compose的容器化数据抓取平台OpenClaw部署与实战
1. 项目概述:一个容器化的开源自动化抓取与处理平台最近在折腾一些数据采集和自动化处理的工作流,发现一个挺有意思的项目:alexleach/openclaw-compose。光看名字,openclaw直译是“开放之爪”,compose则明确指向了 Doc…...
167.YOLOv8口罩检测常见问题避坑(loss为NaN/显存溢出/ONNX导出失败实战版)
摘要 目标检测是计算机视觉领域的核心任务之一。YOLO(You Only Look Once)系列模型凭借其端到端、单阶段、高实时性的特性,已成为工业界和学术界最广泛使用的目标检测框架。本文从零开始,系统讲解YOLOv8的核心原理,并给出从数据准备、模型训练、推理验证到ONNX部署的完整…...
别再卡在‘Setup is running’了!PowerBuilder 9.0保姆级安装避坑指南(附安全模式备用方案)
PowerBuilder 9.0安装全攻略:从卡死困境到高效部署 "Setup is running"这个看似简单的提示框,曾让无数PowerBuilder开发者陷入漫长的等待和反复的重启循环。作为一款承载了二十余年企业级应用开发记忆的经典工具,PowerBuilder 9.0的…...
5个颠覆性文本处理技巧:让notepad--成为你的跨平台效率倍增器
5个颠覆性文本处理技巧:让notepad--成为你的跨平台效率倍增器 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...
数据库——(DB、DBMS、SQL)
数据库——(DB、DBMS、SQL) 前言数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满…...
终极React Native Navigation VR应用开发指南:打造沉浸式虚拟环境和菜单导航体验
终极React Native Navigation VR应用开发指南:打造沉浸式虚拟环境和菜单导航体验 【免费下载链接】react-native-navigation A complete native navigation solution for React Native 项目地址: https://gitcode.com/gh_mirrors/re/react-native-navigation …...
从零到一:基于ESP8266 AT指令与华为云IoT平台构建智能设备原型
1. ESP8266硬件准备与固件烧录 第一次接触ESP8266时,我被这个小巧的Wi-Fi模块惊艳到了——它只有指甲盖大小,却能实现完整的网络连接功能。不过在实际使用中,我发现出厂固件往往功能不全,特别是MQTT支持不够完善,这时候…...
