TCP(1)

传输层的两大协议是TCP 和 UDP ,他们在传输数据的时候起到了不可替代的作用。那么什么是TCP呢?

首先TCP是一个网络传输协议,这个协议保证了可靠的数据传输。TCP是面向字节流的,全双工的(也就是通信双方互相发消息)。往往应用于对实时性要求没那么高的场景,但是又要要求把数据完全传输过去(不是确保100%能传过去,传不过去就超时重传)。

Socket clientSocket = serverSocket.accept();
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();

相反UDP是保证的不可靠的传输,面向数据报的,但是UDP可以保证实时性,UDP说:实在不行就丢包呗,反正我把大部分数据准时传到就行。因此在我们所看的抖音直播,王者荣耀,吃鸡,这些实时性要求比较高的app中应用的主要是UDP协议,你们有没有感觉一整直播就卡了,然后那段主播说了啥咱也不知道。王者遇到过这种情况吧,走不动,走到界外去了,吃鸡的时候你还没开枪就被秒了。最直观的例子,老师上网课,上着上着发现老师没画面了。

总结来说UDP协议适用于需要快速传输实时数据的场景,它具有较低的延迟和较小的传输开销。由于UDP不提供确认和重传机制,它能够更快地传输数据,但也可能导致数据的丢失或乱序。

但是今天的主角是TCP,上面的例子就是要理解一下TCP和UDP的区别

如图所示就是TCP报文段的结构:

(1)首先就是作为传输层协议,必须知道端口号是啥。源端口和目的端口各占2B,表示发送方和接收方使用的端口号。

(2)序号:占4B TCP连接中传送的字节流中每个字节都要按照顺序编号。比如说一个报文段的序号字段值是301,而携带的数据共有100B,表明本报文段的数据的最后一个字节号是400,下一个报文段的数据序号要从401开始。有这个序号就像我们都有名字是一个道理,如果涉及到两个数据重复传输的时候,这个序号就起到了至关重要的作用。

(3)确认号,也要占4B,若确认号为N,则表示前N-1个数据都收到了。

(4)这里的数据偏移其实指的是首部长度,占4位。指的是TCP报文段的数据起始处距离TCP报文段的起始处有多远,因为有选项这个东西,因此可以说,如果选项完全没有,TCP报头长度是20个字节。4个比特位最多能表示15,而首部的长度是4个字节(一个字节表示四个比特位),因此我们得出结论,首部最大的长度是60,如果去掉20个固定的,剩下的选项部分最多占40个字节。因此首部长度是20-60个字节,

(5)保留位:占6位,保留以后使用,万一以后有一天TCP需要扩展一些新的功能,就可以使用这个保留位来表示了。

TCP的机制

(1)确认应答机制:对于TCP协议来说,要解决一个很重要的问题,那就是可靠传输,可靠传输并不能保证100%把数据发送到对方手里,但是会尽可能给发送方知道接收方是否接受到消息。下图就是一个应答机制。

 在网络通信中,会出现后发先至现象,如果不加控制,有时候会很容易误解发送方的意思。

因此就有了解决方法:

  1. 序列号与确认机制:TCP协议通过使用序列号和确认机制来确保数据的有序传输。接收方会按照序列号的顺序重新组装数据包,并发送确认消息给发送方,告知已经收到的数据包序列号,从而保证数据的有序性。

确认序号的特点:连续递增,确认序号就是应答数据的最后一个字节的序号+1

比如说接收序号是1-1000,此处应答报文的确认序号是1001.也可以理解成小于1001的数据都确认收到了。

确认位 ACK=1时,我们说确认号字段有效,当ACK=0时,确认号无效。

总结一下TCP的确认应答机制有保证TCP最核心的功能的作用,即可靠传输。而为什么TCP可靠传输也不一定能保证百分百传输到位呢?举例来说:每个交换机/路由器的转发能力存在着上限,这取决于芯片硬件设备的能力!一旦某个设备需要转发的数据量超出了自身的极限,那么多出来的部分就会被直接丢弃掉。

(2)超时重传机制:如果接收方没有收到任何数据,也一定不会给任何的应答!,此时,发送饭就可以根据是否收到了ACK来区分是否丢包。

  发送方发送出数据之后,如果正常收到ACK也一定需要一些时间的,发送方也会进行一定时间的等待,但是一旦等待时间超过了某个阈值,就可以认为是丢包了!如果说数据传输晚了,也一并视为传输失败!发现丢包就要重传!下图表示了超时重传。

如果说接收方重传的时候接收到了数据,但是丢失的数据一起传过来了,会导致重复传输,这里就会根据TCP所携带的序号来进行去重。

除此之外,有一个接收缓冲区,在这里可以针对收到的数据进行排序。也是针对后发先至进行的一个调整。因为我们希望消息还是按照顺序到达对方手里的。而超时重传也不是无限等待的,如果说,网络出现严重的故障,重传了若干次还是不成功,那么就进行重置连接,也就是RST,当RST=1时,表示TCP连接中出现了严重的差错(如主机崩溃)必须释放连接,然后重新的建立传输连接。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】Qt组件设置背景图片

1. 方法1(paintEvent方式) 使用paintEvent()实现 1. .h文件中添加虚函数 protected:void paintEvent(QPaintEvent *event) override;添加虚函数方法: 选中父类,点击鼠标右键点击重构点击 Insert Virtual Funtion of Base Class…

【C语言】6.C语言VS实用调试技巧(1)

文章目录 1.什么是 bug2.什么是调试(debug)?3.Debug 和 Release4.VS调试快捷键4.1 环境准备4.2 调试快捷键 5.监视和内存观察5.1 监视5.2 内存 1.什么是 bug bug现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题…

MaxKB创建本地知识库

上节已经可以通过MaxKB创建简单的问答系统了,这节开始做自己的知识库,实际上就是把一些本地文件上传到大模型中,让大模型学会这些文件内容,你在问他问题的时候可以通过此文件的内容来回答你,尤其是在针对特定场景或者特…

MyBatis-Plus简介

一、简介 官网:https://baomidou.com/ MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 二、特性 无侵入:只做增强不做改变,引…

潮玩与游戏的结合点——潮玩宇宙App与链游

本文主要介绍了潮玩宇宙App的开发过程及其链游的开发,探讨了潮玩与游戏的结合点,分析了其市场前景和潜在风险,并提出了相应的建议。 一、潮玩宇宙App的开发背景 随着互联网的普及和人们对娱乐方式的多样化需求,潮玩市场逐渐崛起…

十一.吊打面试官系列-JVM优化-深入JVM类加载机制

前言 从本篇文章开始我们来探讨JVM相关的知识,内容附带JVM的启动,JVM内存模型,JVM垃圾回收机制,JVM参数调优等,跟着文章一步一步走相信你对JVM会有一个不一样的认识,如果觉得文章对你有所帮助请给个好评吧…

Spring事务中的@Transactional注解中的参数说明

目录 注解声明 propagation (事务传播行为) REQUIRED 外部没有事务则创建当前事务 外部有事务则合并(加入)事务​编辑 REQUIRES_NEW 外部没有事务则创建一个事务 外部有事务则将外部事务挂起,内部影响外部,外部不影响…

终于搞懂Linux 设备树中的#address-cells,#size-cells 和reg 属性

目录 一、前置知识 1. 处理器平台2. reg 属性的基本格式3. reg 属性的作用 reg 用法 二、#address-cells 和 #size-cells 属性 1. 示例1 2. 示例23. 示例3 一、前置知识 要理解#address-cells和#size-cell 这两个属性,就要先了解 reg属性。 1. 处理器平台 下…

对比测评3款BI分析工具

前不久,一位准备入职阿里的学弟问我,他要做电商数据分析,电商有庞杂的标签、模型、数据和业务逻辑,菜鸟应该要具备什么样的分析能力啊? 我看了他的岗位职责,主要是负责经营决策支持、专题分析和数据看板搭…

深入剖析Tomcat(八) 载入器与打破双亲委派机制的自定义类加载器

写这篇文章让我头大了好几天,书中描述的内容倒是不多,可能也是那会Tomcat的现状。如今Tomcat发展了好多代,加上springboot的广泛应用,导致现在的类加载的步骤和Tomcat资料中描述的大相径庭。可能也是由于微服务的发展,…

903. 昂贵的聘礼[dijsktra堆优化版]

题目描述 年轻的探险家来到了一个印第安部落里。 在那里他和酋长的女儿相爱了,于是便向酋长去求亲。 酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他。 探险家拿不出这么多金币,便请求酋长降低要求。 酋长说:”嗯,如果你能够…

【C++】学习笔记——多态_1

文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承,那组合又是什么?下面这种情况就是…

【开发】模型部署笔记

目录 模型量化 模型量化 1、模型量化优点 低精度模型表示模型权重数值格式为FP16(半精度浮点)或者INT8(8位定点整数),但是目前低精度往往就指代INT8。常规精度模型则一般表示模型权重数值格式为FP32(32位…

从RTTR谈Reflection机制

虽然C11引入了RTTI、Metaprogramming 等技术,但C在Reflection编程方面依旧功能有限。在社区上,RTTR则提供了一套C编写的反射库,补充了C在Reflection方面的缺陷。 零、环境 操作系统Windows 11Visual StudioVisual Studio Community 2022 CMa…

使用JasperReport工具,生成报表模版,及通过JavaBean传参,常见问题及建议

1.下载JasperReport工具 下载地址:社区版 - Jaspersoft 社区 邮箱:lorettepatri.ckoa5434gmail.com 密码:Zx123456. 2.工具使用方法注意 1.一次参数需要在左下角Parameters中新建,直接拖转右上角的TextField不会自动新建参数,到头来还是要在Parameters中新建 2.循环参数需…

实在智能AI+RPA:引领数字化转型的超自动化智能体

引言 在数字化时代,企业面临着前所未有的挑战和机遇。数字化转型不仅是企业生存的需要,更是实现持续增长和创新的关键。AIRPA作为数字化转型的重要驱动力,正帮助企业实现业务流程的自动化和智能化,从而提升效率、降低成本、增强竞…

做抖店的门槛高吗?一个月的时间能入门吗?基础问题解答如下

我是王路飞。 抖店,依旧是普通人做抖音最好的渠道,没有之一,依旧值得我们all in。 这是我对2024年抖音小店的看法和态度, 那么做抖店的门槛高吗?新手用一个月的时间能做到入门吗?投入和回报的数据是多少…

【MySQL数据库开发设计规范】之SQL使用规范

欢迎点开这篇文章,自我介绍一下哈,本人姑苏老陈 ,是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中,该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章,定期更新,欢迎关注&…

时间序列预测:探索性数据分析和特征工程的实用指南

时间序列分析是数据科学和机器学习领域最广泛的主题之一:无论是预测金融事件、能源消耗、产品销售还是股票市场趋势,这一领域一直是企业非常感兴趣的领域。 随着机器学习模型的不断进步,使除了传统的统计预测方法(如回归模型、ARIMA模型、指数平滑)外&a…

结合多模态 AI 谷歌展示 AR 眼镜原型机;Meta 被曝开发带摄像头的 AI 耳机丨 RTE 开发者日报 Vol.204

开发者朋友们大家好: 这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…