TCP(上):成熟可靠的传输层协议

欢迎浏览高耳机的博客

希望我们彼此都有更好的收获

感谢三连支持!  

        TCP(传输控制协议)是位于传输层的通信协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。主要负责在不可靠的网络环境中提供可靠的端到端字节流传输服务。TCP是互联网协议套件的核心组成部分,它为应用程序提供了一种可靠的数据传输服务,确保数据在不同网络设备间正确、完整地传输。   

        深入探讨TCP,有几个核心概念和机制是不可忽视的。包括TCP的三次握手和四次挥手过程,它们在网络通信中扮演着至关重要的角色。除此之外,还有滑动窗口、拥塞窗口、捎带应答、延迟应答以及粘包等问题,这些都是TCP协议的关键组成部分。

        由于篇幅限制,我们将在后续的文章“TCP(下)”中详细探讨这些高级主题。在本文中,我们将针对TCP的特性,报文结构,连接过程以及相对于其他协议的区别进行探讨👍,为读者提供一个初步的理解和概览。

目录

TCP协议的特性

TCP报文结构

TCP核心机制

确认应答:

超时重传:

​ TCP与UDP 


TCP协议的特性

1. 面向连接:

        🙉TCP在数据传输前需要建立连接,通过三次握手来同步连接双方的序列号和确认号,确保数据传输的可靠性。

2. 可靠传输:

        🙈TCP通过序列号、确认应答、超时重发、连接管理等机制确保数据的可靠传输。

3.面向字节流:

        🙊TCP作为面向字节流的协议,意味着数据在发送端被切割成字节流并在接收端按照相同的字节顺序重组。这里的“字节流”指的是一串没有特定边界或大小的字节序列。TCP对于传输的数据并不关心消息的含义或结构,它仅仅关心数据的传输顺序和完整性。

4.全双工:

        🐵全双工通信意味着数据可以在两个方向上同时进行传输,即在发送数据的同时也能够接收数据,两者同步进行。这类似于我们打电话时既能说话也能同时听到对方的声音。这种通信方式提高了数据传输的效率,因为它不需要等待一方发送完毕后另一方才能开始发送.

5. 流量控制:

        🙉TCP使用滑动窗口机制来控制发送方的发送速率,根据接收方的处理能力调整窗口大小,防止接收方缓冲区溢出。

6. 拥塞控制:

        🙈TCP通过慢启动、拥塞避免、快速重传等算法动态调整发送窗口大小,避免网络拥塞。

7. 有序性:

        🙊TCP为发送的每个字节都分配一个序列号,接收方根据序列号对数据包进行排序,保证数据的有序性。

8. 端到端:

        🐵TCP提供端到端的通信,即数据从发送端直接传输到接收端,中间不需要存储和转换。

TCP报文结构

1. 源端口和目的端口(各16位)

🙉标识发送和接收的应用程序。

2. 序列号(32位)

🙈标识从TCP源到目的端发送的字节流的每个字节。

3. 确认号(32位)

🙊期望收到的下一个序列号,用于确认收到的数据。

4. TCP报头长度

🐵对TCP来说,报头长度是可变的,这里的单位是 '4字节' 而不是 '字节'!

5. 保留(6位)

🙉相较于UDP的固定长度做出了改进,即使当前没有需求,也可为了将来的使用保留。

6. 标志位

🙈这几个标志位,和TCP的核心操作密切相关:

URG:紧急指针是否有效

ACK:确认号是否有效

PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走

RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段

SYN:请求建立连接;我们把携带SYN标识的称为同步报文段

FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段

7. 窗口大小(16位)

🙊用于流量控制,指示接收端能够接受的未被确认的数据量。

8. 校验和(16位)

🐵用于错误检测,包括TCP头部、数据和一些伪头部。

9. 紧急指针(16位)

🙉只有当URG标志位被设置时才有意义,指示紧急数据的结束位置。

10. 选项(可变长)

🙈包括最大报文段尺寸(MSS)、窗口扩大因子、时间戳等。

11. 填充(可变长)

🙊确保TCP头部是32位字的整数倍。

 

TCP核心机制

确认应答

        在TCP协议中,接收方在收到数据包后,会发送一个确认应答(ACK)给发送方,以告知数据包已经成功接收。这个确认应答包含一个序列号,表明接收方期望接收的下一个数据包的序列号。如果发送方在一定时间内没有收到确认应答,它会认为数据包在传输过程中丢失,从而触发超时重传机制。

 

TCP将每个字节的数据都进行了编号,即为序列号

 每一个ACK都带有对应的确认序列号,意在告知发送者已经接收了哪些数据,下一次该从哪里开始发送.

超时重传

        当发送方发送一个数据包后,它会启动一个计时器等待接收方的确认应答。如果在设定的超时时间内没有收到确认应答,发送方会认为数据包丢失,并将该数据包重新发送。这个超时时间通常是基于网络的往返时间(RTT)来动态调整的,以适应网络条件的变化。

主机A发送数据给主机B后,可能因为网络拥堵等原因,数据无法到达主机B.

如果主机A在一个特定的时间间隔内没有收到主机B发来的确认应答,就会进行重新发送.

但是,主机A没有收到主机B的确认应答,也有可能是因为ACK丢失了.

因此,主机B会收到很多重复数据。那么TCP协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉。 这时候我们可以利用前面提到的序列号,就可以很容易做到去重的效果。 那么,如果超时的时间如何确定?

  • 最理想的情况下,找到一个最小的时间,保证“确认应答一定能在这个时间内返回”。
  • 但是这个时间的长短,随着网络环境的不同,是有差异的。
  • 如果超时时间设的太长,会影响整体的重传效率;
  • 如果超时时间设的太短,有可能会频繁发送重复的包; TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。
  • Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍。
  • 如果重发一次之后,仍然得不到应答,等待2*500ms后再进行重传。
  • 如果仍然得不到应答,等待4*500ms进行重传。依次类推,以指数形式递增。
  • 累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接。

 TCP与UDP 

TCP与UDP都是主要的传输层协议,我们来对比一下

🐵连接性:

        TCP是面向连接的协议,需要在数据传输前建立连接,通过三次握手过程。

        UDP是无连接的协议,数据传输前不需要建立连接,直接发送数据。

🙊可靠性:

        TCP提供可靠的数据传输服务,包括数据包确认、超时重传、数据排序和错误检测。

        UDP不提供可靠性保证,数据包可能会丢失、重复或乱序到达。

🙈速度:

        TCP由于需要确认和重传机制,速度通常比UDP慢。

        UDP由于没有这些额外的机制,速度通常比TCP快。

🙉开销:

        TCP由于需要维护连接状态和序号,协议开销较大。

        UDP协议开销较小,只包含最基本的头部信息。

🙉流量控制:

        TCP提供流量控制机制,防止发送方过快发送数据导致接收方处理不过来。

        UDP不提供流量控制。

🙈拥塞控制:

        TCP提供拥塞控制机制,根据网络状况调整发送速率。

        UDP不提供拥塞控制。


        本篇博客,我们了解了TCP的基本特性,报文结构还有部分核心机制,那么下一篇,我们将深入探讨TCP,包括TCP的三次握手和四次挥手过程,还有滑动窗口、拥塞窗口、捎带应答、延迟应答以及粘包等问题,这些都是TCP协议的关键组成部分。

 

希望这篇博客能为你理解TCP及网络提供一些帮助

如有不足之处请多多指出

我是高耳机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8279.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Windows中检查是否安装了GPU

文章目录 1. 系统设备管理器1.1 打开设备管理器1.2 查找显示适配器 2. 命令行工具2.1 打开命令提示符2.2 执行WMIC命令 3. DirectX诊断工具3.1 运行DirectX诊断工具3.2 查看显示信息 在Windows操作系统中,了解您的电脑是否配备了图形处理单元(GPU&#x…

网络技术----wireshark抓包出现1500以上的大包原因分析

网络技术----wireshark抓包出现1500以上的大包原因分析 背景描述原因分析TSO(TCP segment offload,TSO)linux中关闭/开启TSO功能:其他类似TSO的机制 wireshark抓包来源 背景描述 我们在使用抓包工具的过程中,经常发现…

3.3 软件需求:面对对象分析模型

面对对象分析模型 1、对象2、面对对象的软件开发模型3、用例图建模基础3.1 用例图基本符号参与者用例系统执行关联 3.2 用例建模过程3.3 用例图初步3.4 用例图进阶关联Association泛化Inheritance包含Include扩展Extend示例 1、对象 在现实世界中有意义的,与所要解…

跑批为什么这么难

业务系统产生的明细数据通常要经过加工处理,按照一定逻辑计算成需要的结果,用以支持企业的经营活动。这类数据加工任务一般会有很多个,需要批量完成计算,在银行和保险行业常常被称为跑批,其它像石油、电力等行业也经常…

深⼊理解指针(3)【数组与指针】

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. 冒泡排序 5. ⼆级指针 6. 指针数组 7. 指针数组模拟⼆维数组 一 数组名的理解 由上图可知我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址…

ubuntu【桌面】 配置NAT模式固定IP

DHCP分配导致虚拟机IP老变,SSH老要重新配置,设成静态方便些 一、设NAT模式 1、设为NAT模式 2、看模式对应的虚拟网卡 - VMnet8 3、共享主机网卡网络到虚拟网卡 - VMnet8 二、为虚拟网卡设置静态IP 记住这个IP IP不要与网关重复 这里网关注意要与虚拟…

最强攻略密码 | 腾讯云双十一活动爆款直击底价

前言 每年双十一,腾讯云都会推出一系列的优惠活动,吸引着大量的消费者和开发者参与。作为国内领先的云计算服务商之一,腾讯云不仅提供强大的云计算基础设施服务,还涉及云存储、大数据分析、人工智能等多个领域,而双十…

c# 动态lambda实现二级过滤(多种参数类型)

效果 调用方法 实体类(可以根据需求更换) public class ToolStr50 {public bool isSelected { get; set; }public string toolStr1 { get; set; }public string toolStr2 { get; set; }public string toolStr3 { get; set; }public string toolStr4 { …

5万加购上线即断货,双11洗衣机品类打破增长难关

距离2024年双11结束仅剩最后几天。据网经社报告,目前各电商平台累计销售额已超8000亿元。 其中,家电品类已超1000亿元的销额位居前列,市场占有率达15.7%。天猫平台数据显示,预售日开售后1小时,大家电整体成交同比增长7…

[全网最细数据结构完整版]第六篇:3分钟带你吃透栈并模拟实现

目录 1->栈的概念和结构 1.1栈的概念 1.2栈的结构 2->栈的实现 2.1定义关于栈的结构体和各种函数 2.2栈的初始化 STInit 函数 2.3栈的销毁 STDestroy 函数 2.4栈的插入操作 STPush 函数 2.5栈的判断是否为空操作 STEmpty 函数 2.6栈的删除操作 STPop 函数 2.7…

Xfce桌面设置右键菜单:用右键打开VSCode

前言 AlmaLinux安装VSCode之后始终没有找到如何用右键菜单打开VSCode,比Windows麻烦多了。每次都需要先找到文件夹,然后用系统自带的Open In Terminal打开终端,再输入code .,才能够在当前文件夹中快速打开VSCode。那么&#xff0…

使用docker形式部署jumpserver

文章目录 前言一、背景二、使用步骤1.基础环境准备2.拉取镜像3.进行部署4.备份记录启动命令 前言 记录一下使用docker形式部署jumpserver服务的 一、背景 搭建一个jumpserver的堡垒机,但是发现之前是二进制文件部署的,会在物理机上部署污染环境&#x…

我谈正态分布——正态偏态

目录 pdf和cdf参数 标准正态分布期望和方差分布形态 3 σ 3\sigma 3σ原则 正态和偏态正态偏态瑞利分布偏度 (Skewness)峰度 (Kurtosis) 比较 正态分布的英文是Normal Distribution,normal是“正常”或“标准”的意思,中文翻译是正态,多完美的…

【嵌入式】STM32中的SPI通信

SPI是由摩托罗拉公司开发的一种通用数据总线,其中由四根通信线,支持总线挂载多设备(一主多从),是一种同步全双工的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文…

大A终究是逃不过高开低走的魔咒

大A终究是逃不过高开低走的魔咒,早盘高开太多,周末休市,今天会议结束,各种不确定因素增加等原因导致午盘普跌。其实还是那句话,股市嘛,涨多了会跌,跌多了会涨,别急也别慌。 周末&…

知识付费小程序搭建,线上网课平台开发

我是【码云数智】平台的黄导,今天分享:知识付费小程序搭建,线上网课平台开发 在线网校小程序开发,在线教育小程序还不断优化界面设计,确保操作简便直观,无论是老人还是小孩都能轻松上手。​​ 01、小程序…

Python | Leetcode Python题解之第543题二叉树的直径

题目: 题解: class Solution:def diameterOfBinaryTree(self, root: TreeNode) -> int:self.ans 1def depth(node):# 访问到空节点了,返回0if not node:return 0# 左儿子为根的子树的深度L depth(node.left)# 右儿子为根的子树的深度R …

无代码开发平台smardaten R5C50 新版本更新!都做了哪些改变?

数睿数据为此次新版本做了7项体验优化、8项功能增补、1项性能优化,总计16个功能点。快来看看,哪个功能戳中你的心~ 一、体验优化 围绕smardaten搭建第一个原型并完成发布主链路,进行了体验优化,解决新手门槛高、模板使用路径长、…

175页PPTBCG某企业健康智能制造与供应链战略规划建议书

智能制造与供应链战略规划方法论是一个系统性、科学性的框架,旨在指导企业实现智能制造转型和供应链优化。以下是对这一方法论的核心内容的归纳和阐述: 一、智能制造的目标与原则 明确智能制造目标: 提高生产效率:通过引入自动…

DICOM标准:深入详解DICOM医学影像中的传输语法

引言 DICOM(数字成像和通信医学)标准在医学影像数据交换中扮演着至关重要的角色。其中,*传输语法(Transfer Syntax)是DICOM标准中定义数据编码和传输方式的核心部分。理解传输语法对于确保不同设备和系统之间的互操作性…