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

计算机网络 (33)传输控制协议TCP概述

一、定义与基本概念

        TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同,TCP提供的是可靠的数据传输服务,而UDP则更注重传输的速度和效率。

二、工作原理

  1. 三次握手

    • 当客户端想要与服务器建立连接时,会首先发送一个SYN(同步)报文给服务器,服务器收到后会回复一个SYN+ACK(同步+确认)报文,表示同意建立连接。
    • 然后,客户端再发送一个ACK(确认)报文给服务器,确认收到服务器的SYN+ACK报文。至此,TCP连接建立完成。
  2. 四次挥手

    • 当客户端或服务器想要关闭连接时,会发送一个FIN(结束)报文给对方,对方收到后会回复一个ACK报文,表示同意关闭连接。
    • 然后,发送方再发送一个FIN报文,对方再次回复ACK报文,确认收到FIN报文。这样,一个TCP连接就被关闭了。

三、主要特点

  1. 面向连接:TCP协议在数据传输前需要先建立连接,确保双方都已准备好进行数据交换。这种连接是全双工的,即数据可以在两个方向上同时传输。
  2. 可靠性:TCP协议通过一系列机制确保数据的可靠传输,包括序号机制、确认应答机制、超时重传机制等。
  3. 基于字节流:TCP协议将应用层发送的数据视为无结构的字节流,并按照字节流的方式传输数据。
  4. 流量控制:TCP协议使用滑动窗口机制实现流量控制,以防止发送方发送过多的数据导致接收方无法处理。
  5. 拥塞控制:TCP协议还包含拥塞控制机制,以避免网络拥塞,确保网络资源的合理利用。拥塞控制是TCP协议中一个至关重要的部分,它旨在防止过多的数据注入网络,从而导致网络性能下降甚至崩溃。

四、报文格式

       TCP报文由TCP首部(报头)和应用数据构成,其中TCP首部是TCP协议的核心所在,应用数据部分是TCP报文的负载。TCP报文的主要字段包括:

  1. 源端口和目的端口:长度各为16位,分别指示发送端的应用程序使用的端口号以及接收端的应用程序期望接收的端口号。
  2. 序列号:长度为32位,用于标识发送的数据字节流中的每个字节的位置。
  3. 确认号:长度为32位,用于确认已经成功接收的数据的序列号。
  4. 数据偏移:长度为4位,指示TCP报文的“数据”起始处距离TCP报文起始处的距离有多远。
  5. 控制标志:长度为9位,用于控制和管理TCP连接,包括NS、CWR、ECE、URG、ACK、PSH、RST、SYN等标志位。

五、应用场景与局限性

       TCP协议适用于对可靠性要求高的数据传输场景,如网页浏览、文件传输、电子邮件等。然而,TCP协议也存在一些局限性,如传输速度相对较慢、开销较大等,因此在一些对实时性要求较高或传输数据量较小的场景中,可能会选择使用UDP协议。

总结

       综上所述,TCP协议作为互联网中最重要的传输层协议之一,具有面向连接、可靠传输、流量控制和拥塞控制等特点,为数据的稳定传输提供了有力的保障。然而,TCP协议也存在一些缺点和限制,需要在具体的应用场景中进行权衡和选择。

 结语    

这世上有些事情是永远不会变的

但有些事情却改变了

!!!

相关文章:

计算机网络 (33)传输控制协议TCP概述

一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同&…...

Python3 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集,但JSON是独立于语言的,很多编程语言都支持JSON格式数据的…...

Leetcode 698 Partition to K Equal Sum Subsets

题意 给一个数组,要求把数组里的元素分成k个子集,满足每个子集中数的总和是相等的。问是否能分成k个子集 题目链接 https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/ 思考 想象你有k个桶,然后你有n个小球&…...

可靠的人形探测,未完待续(III)

一不小心,此去经年啊。问大家新年快乐! 那,最近在研究毫米波雷达模块嘛,期望用在后续的产品中,正好看到瑞萨的活动送板子,手一下没忍住。 拿了板子就得干活咯,我一路火花带闪电,开整…...

Git文件夹提交错了,怎么撤销?

最近提交了一些不应该提交的文件夹到git中,现在需要移除它们,现在简单记录一下操作日志: 情况一 文件夹已经被添加到 Git,但未提交 如果文件夹已经被 git add 添加到暂存区中,但尚未提交,你可以使用以下命令将其从暂存区中移除: git rm -r …...

小程序textarea组件键盘弹起会遮挡住输入框

<textarea value"{{remark}}" input"handleInputRemark" ></textarea> 如下会有遮挡&#xff1a; 一行代码搞定 cursor-spacing160 修改后代码 <textarea value"{{remark}}" input"handleInputRemark" cursor-spacin…...

Android车机DIY开发之学习篇(二)编译Kernel以正点原子为例

Android车机DIY开发之学习篇(二)编译Kernel以正点原子为例 1.代码在/kernel-5.10文件夹下 2.在kernel-5.10目录下执行如下命令编译 &#xff1a; 编译之前&#xff0c;需要将 clang 导出到 PATH 环境变量&#xff1a; 如果是 Android12 执行下面这条命令 export PATH../pr…...

qt 窗口(window/widget)绘制/渲染顺序 QPainter QPaintDevice Qpainter渲染 失效 无效

qt窗体布局 窗体渲染过程 qt中窗体渲染逻辑顺序为 本窗体->子窗体/控件 递归&#xff0c;也就是说先渲染父窗体再渲染子窗体。其中子窗体按加入时的先后顺序进行渲染。通过下方的函数调用堆栈可以看出窗体都是在widget组件源码的widgetprivate::drawwidget中进行渲染的&am…...

Ubuntu下载时不显示无线网图标并显示Cable unplugged

我用的是ubuntu22-04-5.iso一下载出来发现无法连接网络甚至直接显示Wired是Cable unplugged. 下面是解决方法&#xff1a; step1: step2:点击编辑中的虚拟网络编辑器 step3: step4: step5: step6:取消勾选自动检测可用的DNS服务器 step7&#xff1a;在window上按下winR输入c…...

微信小程序实现人脸识别登录

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…...

atoi函数的概念和使用案例

atoi 函数是 C 语言标准库中的一个函数&#xff0c;它用于将字符串转换为整数。atoi 的名称是 “ASCII to integer” 的缩写。该函数定义在 <stdlib.h> 头文件中。 概念 atoi 函数会从字符串的开始位置开始转换&#xff0c;直到遇到第一个非数字字符或遇到字符串结束符…...

Mysql--运维篇--日志管理(连接层,SQL层,存储引擎层,文件存储层)

MySQL提供了多种日志类型&#xff0c;用于记录不同的活动和事件。这些日志对于数据库的管理、故障排除、性能优化和安全审计非常重要。 一、错误日志 (Error Log) 作用&#xff1a; 记录MySQL服务器启动、运行和停止期间遇到的问题和错误信息。 查看&#xff1a; 默认情况下…...

poi处理多选框进行勾选操作下载word以及多word文件压缩

一、场景 将数据导出word后且实现动态勾选复选框操作 eg: word模板 导出后效果&#xff08;根据数据动态勾选复选框&#xff09; 二、解决方案及涉及技术 ① 使用poi提供的库进行处理&#xff08;poi官方文档&#xff09; ② 涉及依赖 <!-- excel工具 --><depen…...

QT 键值对集合QMap

在QT中&#xff0c;可以使用QMap作为键值对的集合。QMap是Qt的一个模板类&#xff0c;它存储了键值对&#xff0c;并且可以通过键来快速查找值。 导入 #include <QMap> 以下是一些使用QMap的方法&#xff1a; 1.创建并初始化一个 QMap<int, QString> UserDepa…...

NetMQ里Push-Pull模式,消息隔一收一问题小记

问题&#xff1a; 本机环境下&#xff0c;在push端向pull端发送消息的过程中&#xff0c;发现同一个进程里的pusher和puller代码&#xff0c;可以准确地完成收发&#xff1b; 然而&#xff0c;将代码放在两个进程里&#xff0c;将pusher发送的消息从1计数&#xff0c;puller端竟…...

见微知著:Tripo 开创 3D 生成新时代

关于 VAST VAST 成⽴于 2023 年 3 ⽉,是⼀家致⼒于通⽤ 3D 大模型研发的 AI 公司,公司⽬标是通过打造⼤众级别的 3D 内容创作⼯具,建⽴ 3D 的 UGC 内容平台,让基于 3D 的空间成为⽤户体验、内容表达、提升新质⽣产⼒的关键要素。 2024 年初,VAST 推出数⼗亿参数级别的 3…...

消息队列与中间件:Java的秘密传输带

消息队列与中间件技术是分布式系统中的重要组件&#xff0c;它们主要解决应用耦合、异步消息处理、流量削峰等问题&#xff0c;并实现高性能、高可用、可伸缩和最终一致性的架构。 2.1 消息队列的基本概念 消息队列是一种应用程序间传递消息的技术&#xff0c;它允许应用程序发…...

Bytebase 3.1.0 - 通过 Google / GitHub SSO 功能开放给专业版

&#x1f680; 新功能 支持在 PostgreSQL DML/DDL 工单中选择执行角色。 在项目设置中增加 PostgreSQL 数据库租户模式配置选项。 在数据库页面和 SQL 编辑器为 ORACLE 数据库展示 package 元数据。 支持为环境配置颜色&#xff0c;方便区分。 新增管理员可关闭数据导出…...

EdgeOne安全专项实践:上传文件漏洞攻击详解与防范措施

靶场搭建 当我们考虑到攻击他人服务器属于违法行为时&#xff0c;我们需要思考如何更好地保护我们自己的服务器。为了测试和学习&#xff0c;我们可以搭建一个专门的靶场来模拟文件上传漏洞攻击。以下是我搭建靶场的环境和一些参考资料&#xff0c;供大家学习和参考&#xff0…...

k8s部署rocketmq踩坑笔记

给团队部署一个rocketmq4.8.0. k8s上部署的broker&#xff0c;注册到nameserver上是自己的pod ip&#xff0c;导致本机连接到的broker的pod ip&#xff0c;这个ip k8s集群外的机器是无法联通的。 nameserver上注册的是这个pod ipv4 尝试将broker的配置brokerIP1修改为注册到na…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...