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

【计算机网络】第3章:传输层—面向连接的传输:TCP

目录

 一、PPT

二、总结

TCP(传输控制协议)详解

1. 概述

核心特性:

2. TCP报文段结构

关键字段说明:

3. TCP连接管理

3.1 三次握手(建立连接)

3.2 四次挥手(终止连接)

4. 可靠传输机制

4.1 序列号与确认号

4.2 重传机制

4.3 滑动窗口协议

5. 流量控制

接收窗口(rwnd)

零窗口探测

6. 拥塞控制

核心算法:

关键参数:

7. 高级特性

7.1 选项字段

7.2 定时器管理

8. TCP优缺点

优点:

缺点:

9. 典型应用场景


 一、PPT

二、总结

TCP(传输控制协议)详解

1. 概述

TCP(Transmission Control Protocol) 是计算机网络中面向连接的、可靠的、基于字节流的传输层协议。它在IP协议提供的不可靠数据报服务基础上,为应用程序提供可靠的端到端通信服务。

核心特性:
  • 面向连接:通信前需建立连接(三次握手)

  • 可靠传输:确保数据完整有序到达

  • 流量控制:防止接收方被数据淹没

  • 拥塞控制:避免网络过载

  • 全双工通信:双方可同时发送和接收数据

  • 字节流服务:无固定消息边界


2. TCP报文段结构

 0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         源端口 (16位)         |       目的端口 (16位)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       序列号 (32位)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     确认号 (32位)                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 |    控制位    |            窗口大小           |
| (4位)   | (6位)| (URG|ACK|PSH| (16位)                         |
|         |      | RST|SYN|FIN) |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           校验和 (16位)       |        紧急指针 (16位)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   选项 (长度可变,最多40字节)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            数据                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
关键字段说明:
  • 源/目的端口:标识发送/接收进程

  • 序列号:本报文段第一个字节的编号

  • 确认号:期望收到的下一个字节序号

  • 控制位

    • URG:紧急指针有效

    • ACK:确认字段有效

    • PSH:接收方应立即推送数据

    • RST:重置连接

    • SYN:同步序列号(建立连接)

    • FIN:发送方结束传输

  • 窗口大小:接收窗口大小(流量控制)

  • 校验和:首部和数据的校验值

  • 紧急指针:紧急数据结束位置


3. TCP连接管理

3.1 三次握手(建立连接)

  1. SYN:客户端发送SYN报文(随机序列号x)

  2. SYN+ACK:服务器响应SYN-ACK(随机序列号y,确认号x+1)

  3. ACK:客户端发送ACK确认(序列号x+1,确认号y+1)

3.2 四次挥手(终止连接)

  1. FIN:主动关闭方发送FIN报文

  2. ACK:被动方确认FIN

  3. FIN:被动方发送自己的FIN

  4. ACK:主动方确认FIN(等待2MSL后关闭)

TIME_WAIT状态:主动关闭方需等待2MSL(Maximum Segment Lifetime)时间,确保最后ACK到达

4. 可靠传输机制

4.1 序列号与确认号
  • 每个字节都有唯一序列号

  • 确认号采用累计确认:表示该序号之前的所有字节已正确接收

4.2 重传机制
  • 超时重传:为每个报文段设置计时器

  • 快速重传:收到3个重复ACK立即重传

4.3 滑动窗口协议

  • 发送窗口:包含已发送未确认和可发送的数据

  • 接收窗口:指示剩余缓冲区大小(流量控制)


5. 流量控制

接收窗口(rwnd)
  • 通过TCP首部"窗口大小"字段通告接收方缓冲区余量

  • 动态调整发送速率,防止接收方溢出

零窗口探测
  • 当接收窗口=0时,发送方周期性发送探测报文


6. 拥塞控制

核心算法:
阶段拥塞窗口(cwnd)变化触发条件
慢启动指数增长(每RTT翻倍)初始阶段
拥塞避免线性增长(每RTT +1 MSS)cwnd > ssthresh
快速重传cwnd = cwnd/2 + 3收到3个重复ACK
快速恢复线性增长快速重传后
关键参数:
  • ssthresh(慢启动阈值):初始值较大,超时后设为当前cwnd一半

  • AIMD原则:加性增(Additive Increase),乘性减(Multiplicative Decrease)


7. 高级特性

7.1 选项字段
  • MSS(最大报文段大小):协商最大分段长度

  • 窗口缩放因子:扩展窗口大小(最高2^30字节)

  • 时间戳:精确RTT测量和防序列号回绕(PAWS)

7.2 定时器管理
  • 重传定时器:数据包丢失检测

  • 持续定时器:零窗口探测

  • 保活定时器:检测空闲连接状态

  • TIME_WAIT定时器:2MSL等待


8. TCP优缺点

优点:

✅ 数据可靠传输
✅ 保证数据顺序
✅ 动态流量控制
✅ 自适应拥塞控制
✅ 广泛兼容性

缺点:

❌ 连接建立开销(三次握手)
❌ 首部较大(最小20字节)
❌ 队头阻塞问题
❌ 高延迟网络效率低
❌ 缺乏多路复用原生支持


9. 典型应用场景

  • Web浏览(HTTP/HTTPS)

  • 文件传输(FTP)

  • 电子邮件(SMTP/POP3/IMAP)

  • 远程访问(SSH)

  • 数据库访问

对比UDP:TCP适合需要可靠传输的场景(如文件传输),UDP适合实时性要求高的场景(如视频流)

相关文章:

【计算机网络】第3章:传输层—面向连接的传输:TCP

目录 一、PPT 二、总结 TCP(传输控制协议)详解 1. 概述 核心特性: 2. TCP报文段结构 关键字段说明: 3. TCP连接管理 3.1 三次握手(建立连接) 3.2 四次挥手(终止连接) 4. 可…...

从架构视角设计统一网络请求体系 —— 基于 uni-app 的前后端通信模型

在使用 uni-app 开发跨平台应用时,设计一套清晰、统一、可扩展的网络请求模块 是前期架构的关键环节。良好的请求模块不仅提高开发效率,更是保证后期维护、调试和业务扩展的基础。 一、网络请求设计目标 在uni-app中设计网络请求模块,应遵循…...

《信号与系统》--期末总结V1.0

《信号与系统》–期末总结V1.0 学习链接 入门:【拯救期末】期末必备!8小时速成信号与系统!【拯救期末】期末必备!8小时速成信号与系统!_哔哩哔哩_bilibili 精通:2022浙江大学信号与系统(含配…...

第32次CCF计算机软件能力认证-2-因子化简

因子化简 刷新 时间限制: 2.0 秒 空间限制: 512 MiB 下载题目目录(样例文件) 题目背景 质数(又称“素数”)是指在大于 11 的自然数中,除了 11 和它本身以外不再有其他因数的自然数。 题…...

mac笔记本如何快捷键截图后自动复制到粘贴板

前提:之前只会进行部分区域截图操作(commandshift4)操作,截图后发现未自动保存在剪贴板,还要进行一步手动复制到剪贴板的操作。 mac笔记本如何快捷键截图后自动复制到粘贴板 截取 Mac 屏幕的一部分并将其自动复制到剪…...

高考加油!UI界面生成器!

这个高考助力标语生成器具有以下特点: 视觉设计:采用了蓝色为主色调,搭配渐变背景和圆形装饰元素,营造出宁静而充满希望的氛围,非常适合高考主题。 标语生成:内置了超过 100 条精心挑选的高考加油标语&a…...

window ollama部署模型

注意去官网下载ollama,这个win和linux差别不大,win下载exe,linux用官网提供的curl命令 模型下载表:deepseek-r1 使用命令:Ollama API 交互 | 菜鸟教程 示例: 1.查看已加载模型: 2.文本生成接口 curl -X POST http://localhost:11434/v1/completions -H "Conte…...

用mediamtx搭建简易rtmp,rtsp视频服务器

简述: 平常测试的时候搭建rtmp服务器很麻烦,这个mediamtx服务器,只要下载就能运行,不用安装、编译、配置等,简单易用、ffmpeg推流、vlc拉流 基础环境: vmware17,centos10 64位,wi…...

ubuntu安装devkitPro

建议开个魔法 wget https://apt.devkitpro.org/install-devkitpro-pacman chmod x ./install-devkitpro-pacman sudo ./install-devkitpro-pacman(下面这句如果报错也没事) sudo ln -s /proc/self/mounts /etc/mtab往~.bashrc添加 export DEVKITPRO/o…...

Linux(10)——第二个小程序(自制shell)

目录 ​编辑 一、引言与动机 📝背景 📝主要内容概括 二、全局数据 三、环境变量的初始化 ✅ 代码实现 四、构造动态提示符 ✅ 打印提示符函数 ✅ 提示符生成函数 ✅获取用户名函数 ✅获取主机名函数 ✅获取当前目录名函数 五、命令的读取与…...

github actions入门指南

GitHub Actions 是 GitHub 提供的持续集成和持续交付(CI/CD)平台,允许开发者自动化软件工作流程(如构建、测试、部署)。以下是详细介绍: 一、核心概念 Workflow(工作流程) 持续集成的…...

代码随想录算法训练营 Day59 图论Ⅸ dijkstra优化版 bellman_ford

图论 题目 47. 参加科学大会(第六期模拟笔试) 改进版本的 dijkstra 算法(堆优化版本) 朴素版本的 dijkstra 算法解法的时间复杂度为 O ( n 2 ) O(n^2) O(n2) 时间复杂度与 n 有关系,与边无关系 类似于 prim 对应点多…...

HTML实战:响应式个人资料页面

我将创建一个现代化的响应式个人资料页面,展示HTML在实际应用中的强大功能。这个页面将包含多个实战元素:导航栏、个人简介、技能展示、作品集和联系表单。 设计思路 使用Flexbox和Grid布局实现响应式设计 添加CSS过渡效果增强交互体验 实现深色/浅色模式切换功能 创建悬停动…...

Mac电脑上本地安装 MySQL并配置开启自启完整流程

文章目录 一、mysql安装1.1 使用 Homebrew 安装(推荐)1.2 手动下载 MySQL 社区版1.3 常见问题1.4 图形化管理工具(可选) 二、Mac 上配置 MySQL 开机自动启动2.1 使用 launchd 系统服务(原生支持)2.2 通过 H…...

JavaSE:面向对象进阶之内部类(Inner Class)

JavaSE 面向对象进阶之内部类(Inner Class) 一、内部类的核心概念 内部类是定义在另一个类内部的类,它与外部类存在紧密的逻辑关联,主要作用: 封装细节:隐藏实现细节,对外提供简洁接口。访问…...

【HW系列】—安全设备介绍(开源蜜罐的安装以及使用指南)

文章目录 蜜罐1. 什么是蜜罐?2. 开源蜜罐搭建与使用3. HFish 开源蜜罐详解安装步骤使用指南关闭方法 总结 蜜罐 1. 什么是蜜罐? 蜜罐(Honeypot)是一种主动防御技术,通过模拟存在漏洞的系统或服务(如数据库…...

汽车总线分析总结(CAN、LIN、FlexRay、MOST、车载以太网)

目录 一、汽车总线技术概述 二、主流汽车总线技术对比分析 1. CAN总线(Controller Area Network) 2. LIN总线(Local Interconnect Network) 3. FlexRay总线 4. MOST总线(Media Oriented Systems Transport&#x…...

MyBatisPlus--条件构造器及自定义SQL详解

条件构造器 在前面学习快速入门的时候,练习的增删改查都是基于id去执行的,但是在实际开发业务中,增删改查的条件往往是比较复杂的,因此MyBatisPlus就提供了一个条件构造器来帮助构造复杂的条件。 MyBatisPlus支持各种复杂的wher…...

OVD开放词汇检测 Detic 训练COCO数据集实践

0、引言 纯视觉检测当前研究基本比较饱和,继续创新提升空间很小,除非在CNN和transformer上提出更强基础建模方式。和文本结合是当前的一大趋势,也是计算机视觉和自然语言处理结合的未来趋势,目前和文本结合的目标检测工作还是有很…...

docker、ctr、crictl命令简介与使用

概述 在使用k3s过程中,经常需要使用ctr和crictl两个命令,本文记录一下。 ctr 类似docker命令是docker-shim容器运行时的客户端工具,ctr是Containerd的客户端工具。一个简单的CLI接口,用作Containerd本身的一些调试用途&#xf…...

WEB安全--SQL注入--bypass技巧2

继之前文章的补充: WEB安全--SQL注入--bypass技巧_sql注入过滤空格-CSDN博客 Q1:发现sql注入的时间盲注时,如果时间盲注的函数都被过滤了,怎么办? 除了找其他函数替换、编码等方式,还有以下方式绕过&…...

【强化学习哲学 Day 1】Q-Learning - 在不确定中寻找确定

🎭 故事:那些选择的时刻 你还记得那些站在十字路口的时刻吗? 也许是刚进实验室,面对满墙的研究方向海报,不知道哪条路通向你想要的未来;也许是第一份工作的选择,大厂的螺丝钉还是小公司的多面…...

WEB3——什么是ABI

怎么获得ABI? 在编译完合约后,可以在左边下面点击复制ABI ABI(Application Binary Interface,应用二进制接口)是用来让前端或服务端 JavaScript 代码与智能合约进行交互的桥梁,它描述了合约的函数、事件和…...

嵌入式软件--stm32 DAY 8.5 基础复习总结

1.时钟树 在数据手册里面,有一张密密麻麻的图,正是时钟系统里的时钟树。 对于时钟,我们注意有两点。一个是系统时钟SYSCLK,一个是依赖外部晶振生成的RTC. RTC以外部低速晶振作为时钟源或者外部高速晶振128分频后作为时钟源,又或者…...

MMRL: Multi-Modal Representation Learning for Vision-Language Models(多模态表示学习)

摘要 预训练的VLMs,对于跨任务的迁移学习至关重要,然而,在few-shot数据集上微调会导致过拟合,降低在新任务上的性能。为解决这个问题,提出一种新的多模态表征学习框架(MMRL),该框架引入了一个共享、可学习…...

贪心算法求解汽车加油问题

一、问题描述 一辆汽车加满油后可以行驶 n km。在前往目的地的途中,有多个加油站。我们的目标是设计一个有效的算法,确定汽车应该在哪些加油站停靠加油,以使得沿途的加油次数最少。 二、输入输出形式 算法的输入包括两部分:第一…...

JVM Full GC 频繁问题排查、优化及解决方案

引言 在Java应用程序中,JVM(Java虚拟机)通过垃圾回收机制自动管理内存,确保不再使用的对象能够被及时清理和释放。虽然垃圾回收在大多数情况下运行顺利,但当Full GC频繁发生时,它会严重影响应用性能&#x…...

rsync服务的搭建

目录 一、rsync介绍 rsync的安装 二、rsync的语法 三、rsync命令使用 1. 本机同步 2. 远程同步 四、rsync作为服务使用 1、尝试启动rsync程序 2、rsync的配置文件介绍 注意事项: 3. rsyncinotify实时同步 3.依赖服务托管xinetd(CentOS 6中rs…...

JDK21深度解密 Day 8:Spring Boot 3与虚拟线程整合

【JDK21深度解密 Day 8】Spring Boot 3与虚拟线程整合 引言:Spring Boot 3遇上JDK21虚拟线程 在本系列的第8天,我们将聚焦于Spring Boot 3与JDK21虚拟线程的整合实践。作为全网首套完整的JDK21特性解析,我们不仅会探讨虚拟线程如何颠覆传统Java并发模型,还会通过完整的Sp…...

vscode 配置 QtCreat Cmake项目

1.vscode安装CmakeTool插件并配置QT中cmake的路径,不止这一处 2.cmake生成器使用Ninja(Ninja在安装QT时需要勾选),可以解决[build] cc1plus.exe: error: too many filenames given; type ‘cc1plus.exe --help’ for usage 编译时…...