【网络原理】TCP 协议中比较重要的一些特性(二)

news2024/11/23 19:50:17

目录

1、TCP 状态转换

1.1、三次握手状态

1.2、四次挥手状态

2、滑动窗口

3、流量控制



1、TCP 状态转换

TCP 状态和“线程状态”是类似的概念,用于描述 TCP 连接过程中正在执行什么操作。

TCP 服务器和客户端都有一定的数据结构来保存连接信息,而这个数据结构中有一个属性叫“状态”,操作系统内核根据状态的不同,决定当前应该执行什么操作。

TCP 状态转换图

1.1、三次握手状态

  • LISTEN 状态表示服务器创建好了 serverSocket,并且绑定客户端完成,等待客户端 new Socket 进行三次握手连接。
  • ESTABLISHED 状态表示连接已经建立完毕,三次握手完成。图中的两个 ESTABLISHED 状态可以认为是几乎同时进入。

1.2、四次挥手状态

  • CLOSE_WAIT 表示收到对方发送过来的 fin,接下来的代码中需要调用 close 来主动返回 fin,由于关闭速度 socket 非常快,该状态不太容易被察觉到。【谁被动断开连接,谁进入 CLOSE_WAIT】
  • TIME_WAIT 表示本端给对方发起 fin 之后,对方也给返回了 fin,该状态存在的意义是给最后一个 ack 重传留有一定时间,防止最后一个 ack 丢包,只要该状态还存在,就依然会保存对端的信息,才能为连接提供各种操作(包括返回 ack )。【谁主动断开连接,谁进入 TIME_WAIT】

需要注意的是:TIME_WAIT 也不会无休止的等待,最多等待 2 MSL(MSL 是系统内核的配置项,表示客户端到服务器之间,允许消耗的最长时间),一旦超过这个时间,就再也不会发送 ack 了。

2、滑动窗口

滑动窗口时是 TCP 中非常有特点的机制。

正常机制下
滑动窗口下

正常的确认应答机制下,每次发送放收到一个 ack 后才会发送下一个数据,导致大量的时间都消耗在等 ack 上。

滑动窗口就可以在保证可靠性传输的基础上,提高效率(减少损失的速度,而不是增加速度),通过批量传输,把多次请求的等待时间,使用同一份时间来等,减少了总的等待时间。

例如:此时批量4个数据,对应4个 ack,这4个 ack 到达的时间各异,此时不需要等所有 ack 都到达,只要有一个 ack到达,就发送下一个数据,不需要管 ack 的顺序。

当采用滑动窗口的策略时,如果出现丢包,如何进行重传?这里分两种情况讨论

1、ack 丢了
这种情况下, 部分 ack 丢了并不要紧,对可靠性没有影响,不需要进行重传,因为可以通过后续的 ack 进行确认。

2、数据丢了

数据丢了必然需要重传。 上述重传的过程中,整体的效率是非常高的,因为这里的重传做到了“针对性”重传,不会有重复发送,整体的效率没有额外的损失,这种重传称为“快速重传”

TCP 有接收缓冲区(生产者消费者模型),发送的数据先放到缓冲区里排队,当发现缓冲区中的数据不连续时证明数据丢失,就会重传对应的数据,待数据补齐后再继续接收后面的数据。

3、流量控制

滑动窗口的窗口大小不能无限大,如果窗口过大导致发送速度大于接收方的处理速度(导致接收缓冲区满了),就会出现丢包问题,进而影响了 TCP 的可靠传输。【任何提升效率的行为都不应该影响到可靠性】

为了让发送速度与处理速度保持步调一致,就需要根据接收方的处理能力反过来影响发送方的发送速率称为“流量控制”。通过这个字段来给发送方反馈发送速度。该字段在普通报文中无意义,在 ack 报文中才有意义。接收方会按照自身接收缓冲区的剩余空间大小(又称为“接收窗口”)作为 ack 中窗口大小的数值,发送方就能根据该数值调整窗口大小。

当接收窗口逐渐较少,直至到 0 后,此时接收方的接收缓存区已满,发送方将停止发送。然后发送方会周期性发送窗口探测包(不携带载荷),用于查询窗口大小,当查询到窗口大小不为 0 时继续发送。

JVM 的垃圾回收机制以及垃圾回收算法的详解-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136530845?spm=1001.2014.3001.5501对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136529700?spm=1001.2014.3001.5501【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136322678?spm=1001.2014.3001.5501

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

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

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

相关文章

字节跳动后端工程师实习生笔试题-c++

字节跳动后端工程师实习生笔试题链接 笔试题 1. 最大映射2. 木棒拼图3. 魔法权值4. 或与加 1. 最大映射 有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看…

[WUSTCTF2020]朴实无华

查看robots.txt 找到/fAke_flagggg.php 显然这是个假的flag&#xff0c;但是我们在header处发现了fl4g.php 近来发现中文全部变成了乱码 插件转成utf8后正常显示 <?php header(Content-type:text/html;charsetutf-8); error_reporting(0); highlight_file(__file__);//leve…

LeetCode - 和为K的子数组

LCR 010. 和为 K 的子数组 看到这道题的时候&#xff0c;感觉还挺简单的&#xff0c;找到数组中和为k的连续子数组的个数&#xff0c;无非就是一个区间减去另一个区间的和等于k&#xff0c;然后想到了用前缀和来解决这道问题。再算连续子数组出现的个数的时候&#xff0c;可以使…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复后灯罩颜色和之前相比有什么变化?

答案是肯定的&#xff0c;汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题是可以修复的。 修复后的汽车灯罩颜色可能会与之前有所不同&#xff0c;这主要取决于修复的方法和使用的材料。 首先&#xff0c;如果修复过程中使用了喷漆翻新&#xff0c;那么灯罩的颜色可能会与原来…

学习笔记-华为IPD转型2020:1,IPD的重要意义

华为产品开发转型&#xff1a;IPD计划 大多数公司发现&#xff0c;当公司大幅增长时&#xff0c;在较小规模上有效的管理实践不再有效。产品开发过程也是如此。随着华为的发展&#xff0c;该公司遇到了产品故障率更高、开发周期更长和研发成本增加等问题。然后&#xff0c;它转…

基于GIS技术的智慧农业大数据平台解决方案

1.建设背景 国务院促进大数据发展纲要 纲要提出大力推动政府信息系统和公共数据互联开放共享&#xff0c;加快政府信息平台整合&#xff0c;推动数据资源整合&#xff0c;提升治理水平。按照“五个统一”建设“大平台“&#xff0c;融合“大数据”&#xff0c;构建“大系统”落…

C语言sizeof操作符与strlen函数

1.sizeof与strlen的介绍 (1).sizeof 计算变量的内存空间大小。底层实际上是对变量类型的计算。是一个单目操作符&#xff0c;不是函数&#xff0c;后面的括号可以省略 (2).strlen 函数原型 strlen是一个函数&#xff0c;返回的size_t类型的数据,头文件为string.h计算字符串…

运维自动化之——Ansible

一、自动化运维 1、通过xshell实现自动化运维 xshell提供会话窗口同步发送命令功能&#xff0c;但是必须将多台机器同时通过xshell窗口连接然后输入命令&#xff0c;如下点击xshell的工具---发送输入--到所有窗口或者指定窗口。 2、Ansible简介 Ansible是基于模块工作的&…

TSINGSEE青犀视频AI方案:数据+算力+算法,人工智能的三大基石

背景分析 随着信息技术的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的各个领域&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗诊断到金融风控&#xff0c;AI的应用正在改变着我们的生活方式。而数据、算法和算力&#xff0c;正是构成…

安装Android Studio遇到Unable to access Android SDK add-on list的错误

第一次安装android studio的时候&#xff0c;提示&#xff1a;unable to access Android sdk add-on list 解决办法 这个错误一般是android studoi代理没有设置导致的&#xff0c;需要在setting里面设置&#xff1a; 点击Android Studio - Preferences&#xff0c;在 Appeara…

开源导出html表格项目-easyHtml

开源导出html表格项目-easyHtml 背景介绍 背景 项目的由来&#xff0c;在面试的过程中&#xff0c;发现这个需求&#xff08;导出html表格&#xff09;比较常见&#xff0c;同时也引起我的兴趣&#xff0c;所以就有了开源项目easyHtml第一个版本 介绍 功能 支持自定义表格标…

算法-图的存储,图的转置,拓扑排序

1.图的存储 图用来对关系建模&#xff0e;图是节点和边构成的集合&#xff0e;节点反映图的元素集合&#xff0c;边反映图的元素集合中元素间的关系&#xff0e; 上述是由五个节点&#xff0c;三条边构成的结构&#xff0e;我们可以用图对其建模&#xff0e; 对由节点&#x…

TeXLive 2023+TeXstudio下载与安装

一. TeXLive 2023下载与安装 TeX Live 是一种 Tex 语言的发行版本,就是相当于 C 语言的编辑(VisualC++),但是这种编辑器的操作方式比较复杂,需要在 cmd 中输入命令操作,没有软件界面,而 Texstudio 正好解决了这个问题。清华大学镜像文件:https://mirrors.tuna.tsinghua…

Linux内核有什么之块设备驱动有什么第二回 —— 块设备驱动初始化流程 vs 字符设备驱动初始化流程

接前一篇文章&#xff1a;Linux内核有什么之块设备驱动有什么第一回 —— 概述及框架 本文内容参考&#xff1a; 34 | 块设备&#xff08;上&#xff09;&#xff1a;如何建立代理商销售模式&#xff1f;-趣谈Linux操作系统-极客时间 Linux内核——块设备总结_linux do_open-…

探索人工智能的现状与未来:机遇与挑战

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 人工智能的现状 人工智能的应用领域 人工智能的未来 人工智能面临的挑战 我的其他博客 正文 人工智能&#xff08;AI&#xff09…

空间计算综合指南

空间计算&#xff08;spatial computing&#xff09;是指使人类能够在三维空间中与计算机交互的一组技术。 该保护伞下的技术包括增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;。 这本综合指南将介绍有关空间计算所需了解的一切。 你将了解 AR、VR…

【yolov8和yolov5】用命令快速着手训练

文章目录 1.yolov81.1.创建conda环境1.2.下载代码和环境1.3.YOLOv8训练、自测和预测的代码及解释1.3.1. YOLOv8 训练代码&#xff1a;1.3.2.yolov8 自测代码&#xff1a;1.3.3.yolov8 推理代码&#xff1a;1.3.4.注意&#xff1a; 2.yolov52.1.创建conda环境2.2.下载代码和环境…

在项目管理中,如何更好地协同团队成员,提高团队合作效率?

在项目管理中&#xff0c;协同团队成员并提高团队合作效率是确保项目成功实施的关键。以下是一些建议&#xff0c;有助于更好地协同团队成员&#xff0c;提高团队合作效率&#xff1a; 一、明确角色与责任 为每个团队成员分配明确的角色和职责&#xff0c;通过制定详细的任务…

Kafka MQ 如何处理请求

Kafka MQ 如何处理请求 元数据请求 客户端怎么知道该往哪里发送请求呢? 客户端使用了另一种请求类型&#xff0c;也就是元数据 请求。这种请求包含了客户端感兴趣的主题列表。服务器端的响应消息里指明了这些主题 所包含的分区、每个分区都有哪些副本&#xff0c;以及哪个副…

基于java+springboot开发的计算机毕业设计网文论坛管理系统设计与实现【附源码】

基于javaspringboot开发的计算机毕业设计网文论坛管理系统设计与实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联…