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

article/2025/8/4 12:39:09

目录

 一、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适合实时性要求高的场景(如视频流)


http://www.hkcw.cn/article/KdccUcLxAy.shtml

相关文章

python打卡 DAY 18 推断聚类后簇的类型

目录 聚类结果分析与簇类型推断学习笔记 一、聚类后分析基础流程 1.1 基本分析步骤 1.2 常用可视化工具 二、簇特征分析方法 2.1 数值型特征分析 簇中心对比 雷达图展示 2.2 类别型特征分析 频数统计 卡方检验 三、簇类型推断技术 3.1 基于统计特征的推断 关键指标…

【RocketMQ 生产者和消费者】- 生产者发送同步、异步、单向消息源码分析(2)

文章目录 1. 前言2. InvokeCallback#operationComplete3. onExceptionImpl 异常处理4. 定时任务扫描 responseTable5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 【RocketMQ】- 源码系列目录【RocketMQ 生产者消费者】- 同步、异步、单向发送消费消息【RocketMQ 生产者和消费者…

【大模型DA】Unified Language-driven Zero-shot Domain Adaptation

Motivation 本文动机在于解决现有方法对 domain-ID 和多模型的依赖问题,提出一个更实用、更通用的新设定 ULDA,使模型仅通过语言描述就能在不访问目标图像的前提下一次性适应多个未知目标域 这篇文章的方法部分提出了一个统一框架来解决Unified Language…

Tomcat 线程模型详解性能调优

1. Tomcat I/O模型详解**(了解)** 1.1 Linux I/O模型详解 I/O要解决什么问题 I/O:在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令,数据从外部设备拷贝至内存需要一段时间,这段时间CPU就…

Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory

文章目录 摘要Abstract1. 引言2. Mem03. graph-based Mem0参考总结 摘要 Mem0是一种针对AI智能体的长时记忆架构,旨在解决大型语言模型固定上下文窗口导致的跨会话连贯性问题。其基础版本采用两阶段处理范式:提取阶段通过结合对话摘要、近期消息序列和新…

C++构造函数详解:从基础到高级

文章目录 1. 摘要2. 默认构造函数3. 无参构造函数4. 带参构造函数5. 拷贝构造函数6. 移动构造函数 (C11)7. 委托构造函数 (C11)8. 转换构造函数9. 默认拷贝构造函数10. 总结 1. 摘要 构造函数是C类的重要组成部分,负责对象的初始化工作。本文将详细讲解8种构造函数…

day16 leetcode-hot100-32(链表11)

138. 随机链表的复制 - 力扣(LeetCode) 1.哈希表 思路 第一次遍历创建新节点并将原节点与新节点同时放入哈希表中 第二次遍历为新节点加入next与random 具体代码 /* // Definition for a Node. class Node {int val;Node next;Node random;public N…

52. N-Queens II

题目描述 52. N-Queens II 回溯法 这道题与第51题是一样的。51. N-Queens-CSDN博客 class Solution {int columns; //从低位到高位起算,第i位为0表示棋盘第i列可以放置皇后,第i位为1表示棋盘第i列不能放置皇后//边长为n的棋盘分别有2n-1条正斜线和反…

关于adb devices无法找到设备:error: device not found 的解决办法

一、此类问题出现的原因,一般是设备所使用的端口被占用,需要找到被占用的端口。 二、操作步骤 1、打开命令窗口。 2、输入adb shell 会发现提示error:device not found! 3、输入adb kill-server ,然后启动adb start-server 4、输入 net…

关于不同平台微信多开的解决方案(WIN/MAC/IOS/Andriod)

日常生活跟工作中需要用到多开微信,本次分享下在不同平台上解决微信多开的方法。这些方法我都用了超过1年以上,都比较稳定。中间遇到的一些问题我也有说明,包括每个方法的优缺点,每个平台的操作等。 先说下我自己体验下来的结论&a…

Flutter项目兼容鸿蒙Next系统

一、环境搭建: 1.1 下载鸿蒙DevEco Studio开发工具。 下载地址:下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生态 下载之前需要先登录,后面的模拟器创建还要开发者验证、审核啥的,好在审核进度还可以&am…

无需密码强制移除Apple ID 工具! iOS 11.3以下可用 ipad和iphone通用!还不快快收藏起来

无需密码强制移除Apple ID 工具! iOS 11.3以下可用 ipad和iphone通用!还不快快收藏起来 ✅ 支持的设备范围注意事项使用方法如何下载? 很多朋友在不再使用某个Apple 帐户或是转卖旧的iPhone,为了防止 ID 被盗导致个人信息泄露&…

Mac 散热救星:Macs Fan Control,让你的苹果电脑“冷静”又安静!

各位果粉们,是不是经常遇到这样的烦恼:用着用着电脑,突然就发热卡顿,风扇狂转噪音大得跟拖拉机似的?别担心,今天给大家安利一款超实用的软件 —— Macs Fan Control,它可是让苹果电脑“冷静”又…

mac 安装idea,碰到“已损坏,无法打开,您应该推出磁盘映像”的解决办法

1.打开终端,先输入如下命令,之后回车操作,碰到输入密码时,正常输入密码即可 sudo spctl --master-disable 2.打开系统设置-安全与隐私性-找到‘允许以下来源的应用程序’ ,更改为任何来源,碰到输入密码时&…

k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、k8s概述 2、Service在Kubernetes中的作用 二、ClusterIP类型 1、ClusterIP 类型的特点和用途 2、ClusterIP 的工作机制 3、…

Android studio 模拟器运行时弹窗显示The emulator process for AVD 模拟器的名字 has terminated 的解决方法

Android studio 问题解决方案 一:.运行模拟器报错展示二.解决步骤第一步:找到.android的文件夹第二步:剪切该文件到SDK的下载路径第三步:点开该文件第四步:找到配置文件第五步:编辑配置文件 三:设置环境变量…

Android Studio快速配置国内镜像源和HTTP代理

最近开始学习Android Studio开发,发现老是连接超时,下面配置下国内镜像源和HTTP代理,而且通过尝试发现最快下载速度方法 一.配置 SDK 镜像源 打开 Android Studio。 进入 File > Settings 然后点击 System Settings,点击 Android SDK。 …

mac/Windows安装python+pycharm【小白操作】

macOS通常自带Python,但建议安装最新版本的Python。你可以通过Homebrew来安装Python。 方法一:通过Homebrew安装Python 安装Homebrew(如果尚未安装): 打开终端,输入以下命令并按回车: /bin/bas…

Mac电脑安装Postman教程

Postman 是一款非常常用的 API 调试工具,支持接口测试、自动化测试等功能,本文将分享在 Mac 电脑上安装 Postman 的完整步骤。 1. 下载 Postman 安装包 方法一:官网下载 打开 Postman 官方网站:https://www.postman.com/downlo…

MySQL连接报错处理:1130-host ... is not allowed to connect to this MySql server

在MySQL安装完成后,很多开发者会遇到这样一个问题: 错误代码 1130:host xxx.xxx.xxx.xxx is not allowed to connect to this MySql server 这个错误通常出现在你尝试通过远程工具(如 Navicat、DBeaver 等)连接 MySQL …