【计算机网络】TCP协议(下)

news2024/9/23 13:29:43

上篇我们介绍了三次握手四次挥手,这次继续来进行tcp的介绍。

1 TINE_WAIT与CLOSE_WAIT

在这里插入图片描述
我们先使用客户端作为左端,服务端作为右方
当我们客户端close时,就会发起两次挥手,此时服务端就会进入CLOSE_WAIT状态,只要服务端不进行close那么就会一直处于CLSOE_WAIT状态,因此我们也就可以观察到现象了(使用netstat -talp即可)
所以我们可以进行telnet+服务端进行本地测试
注意:

若是服务器出现了卡顿就要观察是否存在大量的CLOSE_WAIT状态导致的

随后我们在进行ctrl+c(OS会自动释放尚未关闭的fd,进而发起两次挥手)即可看到TIME_WAIT。
但是我们也会发现为什么TIME_WAIT为什么持续了很久?不会进入CLOSED状态?
这是因为TIME_WAIT一般会持续2*MSL时间,这个我们稍后说

而我们的bind也恰好在TIME_WAIT结束后可以进行bind,这是因为端口号还在一直被占用。

做完这个实验我们可以明显的感受到四次挥手是明显滞后于进程的结束的,OS要继续维护知道连接彻底关闭。

2*msl

那么为什么要持续2*MSL时间?
MSL是报文最大生存时长。
保证已经重传过得数据因为某些原因还在网络中没有被收到,等待报文消散,所以当报文被收到时要进行丢掉。
因为MSL >> 超时重传的时间,所以不用害怕是未被接受到的报文。

那么为什么要直接丢弃呢?
因为当你的报文重新连接,旧的报文可能就被送到服务器,老旧数据干扰了正常服务。

同时也是在理论上保证最后一个报文可靠到达(假设最后一个 ACK 丢失, 那么服务器会再重发一个 FIN. 这时虽然客户端的进程不在了, 但是 TCP 连接还在, 仍然可以重发 LAST_ACK)

那么我们如何解决这种情况?

比如双十一时我们肯定不能再等待
使用 setsockopt()设置 socket 描述符的 选项 SO_REUSEADDR 为 1, 表示允许创建端口号相同但 IP 地址不同的多个 socket 描述符
在这里插入图片描述

2 流量控制

我们观察下图,发现若是对方接受缓冲区满了,那我们发送的报文只能丢弃了,可是这并不合理,即便可以超时重传。
因为传输的过程中浪费了大量的资源CPU资源,路由器…在这里插入图片描述
所以此时我们就需要慢一些发送数据,根据对方的接受能力去决定我们的发送速度,而所谓的接受能力就是对方接收缓冲区的剩余大小。

那我们怎么知道对方的接受能力?
在这里插入图片描述

就需要用到报文中16位接受窗口大小了!

细节:

  1. 是双方互发消息,窗口写的是自己的剩余接受缓冲区大小,也就是流量控制是双方的
  2. 控制不单单可以快,还可以慢
  3. 第一次发消息时怎么发?发一个很小的报文?实际上在三次握手时就已经交换双方报文,进而得知对方的接受能力了。
  4. 窗口大小为16位岂不是意味着窗口大小是有限制的?确实如此,但是我们可以进行使用报文中的选项设置窗口大小
  5. 当B窗口为0时,若是B有了空间,B会发送报文通知A,同时A也会有窗口探测报文进行探测

若是一直为0怎么办?
就需要PSH(PUSH标志位置1),催促OS快点处理(需要多=多路转接的知识点,暂时不管)。
但即使是非0时也可以加入PSH标志位,比如我们使用Xshell时每次输入指令可能都使用了PSH选项。

这里也就顺便说一下URG标志位(URGENT),当为0时16位紧急指针无意义,否则反之。
16位紧急指针的意义是标识那一部分是紧急数据,是一个偏移量。
但是他只能标记一个位置。

这里使用一个例子进行解释:当我们在百度网盘下载东西时,下到一半想暂停,于是就点击暂停,此时报文中就包含一个紧急指针,其中这个被标识字节我们可以自己规定含义。
tcp按需到达,前边还有很多数据,所以此时会优先读取紧急指针内容并进行响应操作,避免了资源的浪费。

但是我们很少用,完全可以在关联一个端口,一个用来通信,一个用来控制,保证了更好的独立性与拓展性。

3 滑动窗口

首先滑动窗口与超时重传和流量控制有关。
在这里插入图片描述
也就是如上的两个话题。
持续更新

4 延迟应答

5 捎带应答

6 常见面试题

7 异常情况

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

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

相关文章

链表算法题(下)

在链表算法题(上)长中我们已经学习了一系列的链表算法题,那么在本篇中我们将继续来学习链表的算法题,接下来就继续来破解链表的算法题吧! 1.相交链表 160. 相交链表 - 力扣(LeetCode) 通过以上…

基于yolov8的人脸检测计数系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的人脸检测计数系统是一种利用深度学习技术的先进解决方案,它以其高效、准确的特点在人脸检测领域脱颖而出。该系统以YOLOv8为核心算法,该算法作为YOLO系列的最新迭代,不仅继承了前代算法的优点,还在实时…

YOLOv8-obb训练自己的数据集

一、YOLO OBB 格式 YOLO OBB 格式通过四个角点指定边界框,其坐标在 0 和 1 之间归一化: class_index x1 y1 x2 y2 x3 y3 x4 y4 YOLO 在内部处理损失和产出。 xywhr 格式,表示边界框的中心点(xy)、宽度、高度和旋转角度…

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派5 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头&…

NISP 一级 | 2.4 访问控制

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:访问控制基本概念 访问控制是针对越权使用资源的防御措施。 其目标是防止对任何资源(如计算资源、通信资源或信息资源)进行未授权的访问,从而…

BLIP3技术小结(xGen-MM (BLIP-3): A Family of Open Large Multimodal Models)

paperhttps://www.arxiv.org/abs/2408.08872githubhttps://github.com/salesforce/LAVIS/tree/xgen-mmOrg.Salesforce AI Research个人博客地址http://myhz0606.com/article/blip3 前置阅读:BLIP系列总结 核心思路 虽然过去BLIP系列对LMM发展起到至关重要的作用&…

Redis缓存常用的读写策略

缓存常用的读写策略 缓存与DB的数据不一致问题,大多数都是指DB的数据已经修改,而缓存中的数据还是旧数据的情况。 旁路缓存模式 对于读操作:基本上所有模式都是先尝试从缓存中读,没有的话再去DB读取,然后写到缓存中…

MSCKF7讲:特征管理与优化

MSCKF7讲:特征管理与优化 文章目录 MSCKF7讲:特征管理与优化1 Feature.h2 OptimizationConfig3 initializePosition三角化LM优化3.1 计算归一化坐标深度初值generateInitialGuess① 理论推导② 代码分析 3.2 计算归一化误差cost① 理论推导② 代码分析 3…

模型和算力看板:Compute DashBoard

AGI 之路 AGI(通用人工智能)是整个计算机科学的圣杯,算力的增长和模型能力的提升(算法和数据)缺一不可。作为一个新质生产力,构建一个合理的评价体系是常用的方法论。针对模型和算力的评价,有类…

【AutoX.js】选择器 UiSelector

文章目录 原文:https://blog.c12th.cn/archives/37.html选择器 UiSelector笔记直接分析层次分析代码分析 最后 原文:https://blog.c12th.cn/archives/37.html 选择器 UiSelector 笔记 AutoX.js UiSelector 直接分析 用于简单、最直接的查找控件 开启悬…

code agent-自动写代码的AI工具整理(2024)

文章目录 cursorReplit Agentgithub-copilot cursor https://www.cursor.com/ 界面类似VSCODE,集成多种先进功能的AI驱动的代码编辑器,智能代码编辑与补全、使用自然语言指令来编辑和修改代码、版本控制与代码审查、自动化测试等; Replit…

路径规划——RRT算法

路径规划——RRT算法 算法原理 RRT算法的全称是快速扩展随机树算法(Rapidly Exploring Random Tree),它的思想是选取一个初始点作为根节点,通过随机采样,增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点…

基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践

作者:计缘 LLM Chat 应用大家应该都不陌生,这类应用也逐渐称为了我们日常的得力助手,如果只是个人使用,那么目前市面上有很多方案可以快速的构建出一个LLM Chat应用,但是如果要用在企业生产级别的项目中,那…

开源软件如何保证数据安全?从一下七个方面进行分析

1、加密软件来保护 在开源软件中,数据加密和保护是保障数据安全的重要手段。开发者应该使用强加密算法的加密软件来保护敏感数据,并确保数据传输和存储的安全性。通过驱动层加密技术,对开发源代码进行强制加密处理,文件创建自动进…

Mac在Python项目中通过opencv模版匹配定位不到图片

起因 原本一行代码的事情,但是在Mac上总能出现意外,如下 box pyautogui.locateOnScreen(obsidian.png) print(box) pyautogui.moveTo(box[0],box[1])上面的代码用来定位图片在屏幕中的位置,然后移动鼠标到定位到的屏幕位置坐标。 意外…

IT管理:我与IT的故事9-数字化转型7步思考行动法

四书即论语、孟子、大学、中庸,又称四子书,为历代儒学子首要研习之书。南宋朱熹取《礼记》之大学、中庸篇,分章注释,与论语、孟子合为“四书”。 四书及其注释包涵孔子弟子及再传弟子、孟子、程子、朱熹等,其编撰时长达…

代码随想录Day 38|背包问题完结,题目322.零钱兑换、279.完全平方数、139,单词拆分数

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划part06题目题目一:322. 零钱兑换解题思路:题目二:279.完全平方数题目三:139.单词拆分数解题思路:背包问题 多重背包(…

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积…

Unity使用自定义类型作为字典Key的最佳实践与避坑指南

自定义类型作为字典Key的最佳实践与避坑指南文章首发 问题背景 首先提一下之前项目开发时遇到的一个将自定义类型作为Dictionary键的坑。 项目中,我们有两个业务类BusinessA和BusinessB,因为某个需求,我们需要将这两个类建立一个映射关系&…

游泳馆收银系统源码解析之手牌管理--SAAS本地化及未来之窗行业应用跨平台架构

一、代码 if(手牌状态 "空"){结算界面 "";未来之窗_人工智能_通用页面_尺寸(title"游泳馆",收费,500,300);}else{未来之窗_人工智能_通用页面_尺寸(title"游泳馆",退款,1200,500);} 二、阿雪技术观 拥抱开源与共享,见…