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

TCP的核心特性精讲(上篇)

目录

  • 一、TCP 的基础核心要素
    • 1. TCP 的协议定位:在哪一层?
    • 2. TCP 的基本特点
    • 3. TCP协议段格式
  • 二、十大核心特性机制解析
    • TCP的“可靠性”
      • 1. 确认应答
      • 2. 超时重传
      • 3. 连接管理
        • 1. 三次握手
          • “三次握手”是如何建立的
          • 三次握手的全部详细流程
          • 三次握手的目的
        • 2. 四次挥手
          • “四次挥手”是如何断开连接
          • 四次挥手的全部详细流程
          • 状态等待机制

TCP/IP是⽹络编程的 理论基础,是⼀个服务器开发程序员的 重要基本功,是整个⽹络课程中的 重点和难点,也是各⼤公司笔试⾯试的 核⼼考点,本章从 基础核心十大特性的详细讲解,梳理TCP的重点内容

由于十大特性内容比较多,这边将内容分为上下两篇,上篇主要讲解TCP最核心得两个机制:确认应答超时重传 加上连接管理,下篇讲解剩下七个机制

一、TCP 的基础核心要素

1. TCP 的协议定位:在哪一层?

在TCP/IP 四层模型中,TCP 位于传输层,上接应用层(如 HTTP、FTP、SSH 等应用协议),下连网络层(IP 协议)
在这里插入图片描述

2. TCP 的基本特点

TCP 的基本特点是:有连接、可靠传输、面向字节流、全双工,是底层核心原则,而十大特性(后续详细解析)是这些原则的具体落地设计。

3. TCP协议段格式

在这里插入图片描述

这里先讲解容易理解的部分,剩余部分在下文会有详解

二、十大核心特性机制解析

TCP的“可靠性”

TCP“可靠性” 通过一系列特性机制,让TCP能够在复杂的网络环境中确保数据的完整性、有序性和准确性

此处的可靠性,不是说A发消息给B,让B百分百能收到消息,而是让A的消息尽可能让B收到

1. 确认应答

保证可靠性的一个关键前提,是发送方知道自己的数据对方是否能收到,发送方发送数据后,无法确定接收方是否收到,ACK 就是接收方给的 “收据”,告诉发送方 “数据已收到,可继续发下一批”,从而避免数据丢失

举个老师讲过的典型的例子
在这里插入图片描述
TCP的处理方案,就是给进行传输的数据进行编号,即为序列号:

在这里插入图片描述
一个TCP载荷是由多个字节构成的,序号字段填写载荷部分的第一个字节的序号,
序号在32位序号中是连续的
在这里插入图片描述
确认序号把收到的载荷的最后一个字节序号加上1,表示确认应答
在这里插入图片描述

在确认应答的机制下,接收方就可以根据序号对数据进行排序,老师先得到1答复后,再得到2的答复,结果是老师理所应当的将要收到好人卡一张
在这里插入图片描述

注意:
这里的应答和业务中的响应不是同一个东西
对方“没主动发数据”时,ACK为确认类报文,不会平白无故发ACK—但有个关键场景:ACK本质是“对接收数据的反馈”,只要你给对方发了数据,对方即使没要回传的业务数据,也会发ACK 来确认“收到了你发的内容”。ACK的触发条件是“接收了对方的数据包”,和“自己有没有要发的东西”无关。

2. 超时重传

发送方发完数据后 “计时”,如果超时了还没收到接收方的确认应答(ACK),就默认数据丢了,自动重新发送这部分数据,简而言之就是对丢包的做出处理
在这里插入图片描述
因此针对上述的ACK和数据丢失都会进行重传
在这里插入图片描述
重传不是无限制的

TCP特性的超时重传,来判断是否丢包,TCP中判断超时的时间阈值,不是固定固定数值,而是动态改变的:

假设当前 A ->B 发送数据,丢包的超时时间阈值为 T当 A 给 B 传输发生超时之后就会延长这个时间阈值
会继续延长这个时间不是无休止的.超时次数达到一定程度/等待时间达到一定程度就认为网络出现严重故障,放弃这一次传输~~

为什么延长这个时间不是无休止的:
假设当前网络丢包概率是 10%,90% 的概率能够到达对方,连续发两个包都丢的概率 1%,至少有一个到达对方的概率 99%,那随着连续发包的次数增多,即使概率加到了很高,还是不能发送成功,那说明网络已经出现了很严重的事故,在怎么传都已经没有什么意义了

针对重复数据问题
TCP协议能够识别出那些包是重复的包,并且把重复的丢弃掉.
在这里插入图片描述

3. 连接管理

连接管理由断开连接和建立连接组成,在正常情况下,TCP要经过三次握⼿建⽴连接,四次挥⼿断开连接

1. 三次握手

建立连接是TCP通过“三次握手”的方式来建立的

生活中的握手,打招呼握手操作,没有实际的业务,只是"打个招呼"我发送一个不携带业务的数据,通过这个数据和对方"打个招呼"
三次握手也是一样,三次握手传递的是TCP 协议自身的控制信息目的是建立可靠连接,是不含有业务数据

“三次握手”是如何建立的

在这里插入图片描述

三次握手的全部详细流程

在这里插入图片描述

三次握手的目的
  1. 三次握手,相当于"投石问路”先初步的探一探网络的通信链路是否通畅.(网络通畅是可靠传输的前提条件)
  2. 验证通信双方的发送能力和接收能力是否也正常
  3. 三次握手过程中,可以协商一些关键信息
  • TCP 要协商的一个非常关键的信息, 通信过程中,序号从几开始初始序号, 一般不是从 0 开始的.并且,两次连接初始序号都是不同的(往往会差别较大),比如第一次连接协商好我们的初始序号为8000,第二次连接,协商好初始序号为10000
2. 四次挥手

TCP 通过四次交互(“挥手”)完成连接断开
本质是双方分别确认 “不再发数据”,确保双向数据都传输完毕

“四次挥手”是如何断开连接

在这里插入图片描述

四次挥手的全部详细流程

在这里插入图片描述

在四次挥手,谁都可以先FIN,但是实践角度来看,还是客户端断开连接的可能性更大

CLOSE WAIT 正常开发中,应该是看不到的,原则上来说,感知到对方断开之后,就应该尽快的执行 close ,如果你发现服务器这边存在大量的 CLOSE WAIT,持续的还很久,此时意味着你代码大概率有 bug,(检查是否执行到 close 了).

状态等待机制

网络传输中,随时都可能丢包,四次挥手同样也会会存在丢包的情况
在这里插入图片描述
为了解决处理B重传问题,A这边必须得等待一段时间,却仍对方是否重传FIN之后再释放,但是具体等待多少时间呢?一般来说等待时间为2 * MSL(网络上任何两个节点传输过程中最大得时间),MSL通长这个时间被设置为60秒,也就是说TIME-WAIT等待2 * 60秒,但是这个时间不同系统可能不一样,大概认识一下就可以了

在这里插入图片描述

http://www.dtcms.com/a/582204.html

相关文章:

  • 河源市企业网站seo价格商城网站策划书
  • Spark-3.5.7文档5 - Spark Streaming 编程指南
  • 北京网站关键词优化推荐徐州列表网
  • Spring 事务管理 Transaction rolled back because it has been marked as rollback-only
  • git不想被添加的文件加入到了列表中如何去掉
  • 网关开发笔记
  • 不备案怎么做淘宝客网站吗网站的视频怎么下载
  • 贵阳市住房和城乡建设部网站北京有几个区几个县
  • 【笔记】修复 ComfyUI 启动 ImportError: cannot import name ‘cached_download‘ 错误
  • 长沙网站优化页面学校网站建设工作
  • 昆明企业做网站黎城网站建设
  • 在vue3+uniapp+vite中挂载全局属性方法
  • 地理信息科学 vs 测绘工程:专业区别与就业前景
  • ​​Linux环境下的C语言编程(十六)
  • 淘宝购物返利网站开发基层建设杂志网站
  • 某多多 Redis 面试相关知识点总结
  • 【STM32】知识点介绍三:哈希算法详解
  • Effective STL第8条: 切勿创建包含auto_ptr的容器对象
  • 使用DrissionPage实现虚拟货币市场数据智能爬取
  • 零基础入门C语言之预处理详解
  • 做外汇门户网站重庆相亲网
  • 域名怎么绑定自己网站企业网站如何去做优化
  • Cursor 2.0 扩展 Composer 功能,助力上下文感知式开发
  • C语言应用实例:奋勇争先锋(贪心,qsort用法)
  • 机器学习数学知识温习(2)- 高斯-正态分布
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — Push Kit
  • 济南网站建设 泉诺家装公司排名前十
  • 网站开发主要都做些什么佛山网站优化有
  • 机器人+工业领域=?
  • 网站三大标签优化中山企业网站建设