TCP协议的报头格式和滑动窗口

文章目录

  • TCP报头格式
    • 端口号
    • 序号和确认序号
      • 确认应答(ACK)机制
      • 超时重传机制
    • 首部长度
    • 窗口大小
    • 报文类型
      • URG
      • ACK
      • SYN
      • PSH
      • FIN
      • RST
  • 滑动窗口
    • 滑动窗口的大小怎么设定怎么变化
    • 滑动窗口变化问题

TCP报头格式

image-20230811215559584

端口号

两个端口号比较好理解,通过端口号来找到指定的进程

序号和确认序号

先要认清这两个序号首先得了解TCP的确认应答(ACK)机制

确认应答(ACK)机制

根据生活例子来说,当我们再和别人聊天时需要得到对方的回复才能够确定对方能够听到我们的话。对于TCP通信也是如此,当一端向另一端发送数据后,对端收到数据后需要告诉发送端已经收到了,这样发送端才能够知道,因此作为接收端就会应答确保已经接收到数据了

这种机制就是确认应答机制

在真实的使用场景中,TCP发送端如果是一条数据发送后等收到接收端的应答再发送另一条数据,这样效率就非常的低。所以真实的场景中,发送端会一下子发送多条数据。那么为了确保每一条数据都被接收端接收到了,那么接收端就需要对应每一条数据都进行应答,那么如何保证接收端应答的是对应的数据。或者说如果发生了丢包,接收端不会应答该条数据那么作为发送端如何知道是哪一条数据没有收到接收端的应答呢

这就引进了序号和确认序号的概念:

序号可以用来标识数据之间的不同,接收端收到数据后应答该条数据就会返回确认序号,而这个确认序号就是数据序号+1 。这样的目的是告诉发送端下次发送数据的序号从这个确认序号开始。

有了序号和确认序号的配合后,应答机制就能保证应答的是指定的数据

需要注意:接收方应答了一个确认序号后,就代表着这个确认序号之前的所有序号的数据都已经接收到。

也就是说假如接收端接收到了序号1000和3000的数据,但是没有收到2000的数据,那么接收端应答的确认序号只会是1001。那么这里又得引出一个概念:

超时重传机制

根据上述的例子,如果接收端没有收到2000的数据,那它就只会发送1001的应答。那么作为发送端迟迟都等不来2000的数据的应答,那发送端就会意识到数据丢包了。这时候作为发送端就会再次向接收端发送数据。

关于数据丢包就会出现另一种情况,上述的情况是发送端发送的数据丢包了。那么如果接收端接收到了数据,但是它发送的应答丢包了呢。这种情况同样会导致发送端迟迟收不到应答而重新发送数据,那假如应答老是丢包那么发送端就会发送很多份相同的数据,这时候作为接收端就会收到很多重复的数据。所以接收端需要对数据去重,而去重就可以利用序号实现,因为每个相同的数据都会有相同的序号

image-20230811222432166

首部长度

  1. TCP协议的报头是有标准长度的也就是最少长度,长度为20字节。因此读取时首先会读取20字节
  2. 首部长度为4个比特位,也就是说范围在[0000 - 1111]也就是[0 - 15]
  3. TCP报头的总长度 = 首部长度 * 4字节
  4. 因为TCP协议的标准长度为20字节,因此首部长度初始为5(0101)

窗口大小

首先的了解TCP协议发送数据和读取数据是在哪里得到的。

事实上,接收端调用read函数将数据读取并不是从TCP的报文中读取的,而是从一个缓冲区中也就是接收缓冲区中读取的。而发送端调用write函数写数据发送也不是直接写到TCP的报文中,而是写到发送缓冲区中

那么对于缓冲区而言就必定有大小,窗口大小就是指接收缓冲区的大小。TCP的报头中要含有自己缓冲区剩余的大小,为了告诉发送端自己的缓冲区大小还剩多少,让发送端做出发送策略调整,防止出现发送的太快导致来不及读使得缓冲区满了,也不能发的太慢

报文类型

事实上,TCP的报文也是有类型的,接收端要根据不同类型的报文做出不同的动作

image-20230811223736461

这几个就对应着TCP不同的报文类型,而这几个都是一位来着,置1或置0

URG

数据对于接收方而言,乱序就是不可靠的现象。所以要对收到的数据进行排序,因为报文是有序号的所以可以保证数据的按序到达。那么如果需要排队那就难免会有需要插队的情况。

URG:代表着有需要尽快读取的数据

而这个要配合这紧急指针使用,通过紧急指针知道一个偏移量在报文的有效数据中通过偏移量找到该数据

ACK

ACK用于建立连接时应答确认

SYN

用于请求连接

PSH

催促接收端尽快读取数据,避免缓冲区满

FIN

用于断开连接请求

RST

由于连接并不一定会成功,RST就用于重置连接

滑动窗口

因为发送端发出数据后接收端不一定会接收到数据,也就是出现丢包。因此发送端在发送出去数据后并不能直接将数据抹除,需要等待接收端应答后才可以抹除。那么这份数据保存在哪里呢?

这种数据就保存在滑动窗口中

image-20230811225908424

图中为缓冲区的分布,其中中间部分就是滑动窗口

滑动窗口的大小怎么设定怎么变化

对于缓冲区本质上就是一个数组,所以滑动窗口就有这个数组中的两个下标控制大小

image-20230811230408810

而决定缓冲区的大小和接收端的接受能力有关,也就是不管未来滑动窗口怎么变化都一定要保证在接收端的接受范围内。

因为数据都是有数据序号的,因此滑动窗口的变化:win_start = 应答收到的数据确认序号,win_end = win_start + 对端的窗口大小

滑动窗口变化问题

窗口会往左移动吗?

答案肯定是不会的

窗口一定会向右移动吗?

肯定窗口的变化可以得出,只有收到应答时窗口才会滑动,所以也有可能是不动的,但是如果动了一定是向右动

滑动窗口移动的本质就是数组下标的更新,所以窗口有可能会不动的

同样窗口也有可能变成0,例如对方的缓冲区满了

如果一直移动,空间不够了怎么办

针对这个问题,操作系统内核将发送缓冲区组织为环形结构了

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

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

相关文章

福卡红包V3.0.1全开源解密版

简介: 1、优化响应速度 怎么玩这个福卡红包福卡红包V3.0.1全开源解密版: 1、简单说明 由于红包现在低1块钱,对一般的运营者来说成本不低,除非让商家出钱,所以吸粉并不划算,这个模块我认为适合做广告推广&a…

高压放大器如何正常使用的呢

高压放大器是一种用于将低电压信号转换成高电压信号的电子设备。它广泛应用于通信、雷达、医疗设备等领域。正确使用高压放大器对于保证设备的正常运行和延长使用寿命至关重要。下面安泰将介绍高压放大器的使用方法和注意事项,帮助您更好地了解如何正确使用高压放大…

3.2 Tomcat基础

1. Tomcat概述 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。 Tomcat版本:apache-tomcat-8.5.76。 2.IDEA集成Tomcat 第一步 第二步 第三步 ​ 编辑切换为居中 添加图片注释,不超过 140 字&#xff0…

【Java多线程】CompletableFuture 异步多线程

1. 回顾 Future 一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度。 JDK5新增了Future接口,用于描述一个异步计算的结果。 虽然 Future 以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便&#xff0…

Kotlin 基础教程一

Kotlin 基本数据类型 Java | Kotlin byte Byte short Short int Int long Long float Float double Double boolean Boolean c…

php怎么实现拼图功能,照片拼图效果怎么做 将一张照片制作成拼图的效果

最近的电影少年的你上映几天了,该电影是校园欺凌题材,听说剧情的深度可以给观众带来沉思,看到消息说今天这部电影也是突破六亿票房,也是厉害的了,找个时间真想去看看呢!好啦,回归主题&#xff0…

Gradio:交互式Python数据应用程序的新前沿

一、说明 什么是Gradio以及如何使用Gradio在Python中创建DataApp或Web界面?使用 Gradio 将您的 Python 数据科学项目转换为交互式应用程序。 摄影:Elijah Merrell on Unsplash Gradio是一个Python库,允许我们快速为机器学习模型创建可定制的接…

controller层,service层,mapper层,entity层的作用与联系。

一. controller层 controller层是用来接受前台数据和返回页面请求信息的,Controller层是不允许直接操作数据库的!它就像一个服务员,哪桌客人需要点菜了,就喊一声服务员! 对应的,外界需要完成什么样的业务&…

“一日之际在于晨”,欢迎莅临WAVE SUMMIT上午场:Arm 虚拟硬件早餐交流会

8月16日,盛夏的北京将迎来第九届WAVE SUMMIT深度学习开发者大会。在峰会主论坛正式开启前,让我们先用一份精美的元气早餐,和一场“Arm虚拟硬件交流会”,唤醒各位开发小伙伴的开发魂! 8月16日,WAVE SUMMIT大…

雷军爆料骁龙855新机 液冷3.0+跑车造型 媲美iPhone

目前各大手机厂商都在着手发布骁龙855新机,个别厂商已经抢先发布了,最受国内用户关注的自然还是小米9了,不过近日,雷军在个人微博爆料,又一款骁龙855新机将会在下周一,也就是3月18日发布剧情介绍。 这款手机…

互联网专家资源分享(二)

1. 换位思考 沈阳 前台页面处理,利用CSS和DIV构建页面。面向在校毕业生或者刚参加工作人员 divcss页面处理html控件解析,数据处理,sql语句构造 2. moosefs调优 济南 tcp/ip,精通tcp/ip协议。 精通linux下的tcp/ip开发。&#…

WEBSHELL 提权方法总结

最全的 WEBSHELL 提权方法总结 来到的请留个脚印,谢谢 在得到了一个 Webshell 之后,如果能进一步利用系统的配置不当取得更高的权限,一直是广大黑友们所津 津乐道的话题,也是高手和菜鸟间最大的区别。本文将从一个大角度总括当前…

打破智能手机消费格局的将不是另一台智能手机,而是游戏

文|佘凯文 来源|智能相对论(aixdlun) 云游戏的概念,在游戏圈越来越热。从微软的Project xCloud的云游戏平台、到谷歌的Project Stream云游戏服务、再到索尼基于PS4的云游戏服务以及腾讯也宣布与英特尔联手推出云游戏平台“腾讯即玩”&#…

游戏市场阴影下的游戏手机厂商,和他们无法触碰的未来

出于以版号为主的一系列问题,中国手游市场遇冷是近一年以来的显著现象。根据App Annie的调查显示,在过去两年里,全球App的用户总使用时长增长了50%,而游戏所占比重一直稳步上升,但中国市场的游戏用户却支出锐减&#x…

雷军亲自捧场,双液冷游戏手机演绎“暴力美学”

10月23日,黑鲨科技最新旗舰黑鲨游戏手机Helo在北京惊艳上市。黑鲨科技创始人兼CEO吴世敏,小米集团创始人、董事长兼首席执行官雷军,中国文化娱乐行业协会会长刘金华、京东商城通讯事业部总裁陈婷、南昌金开集团董事长胡顺明以及优点科技创始人…

雷军亲自站台,游戏手机能否成为市场增长新引擎?

从2017年开始,智能手机市场的表现便让不少人大跌眼镜。 Canalys发布的统计报告显示,2017年中国智能手机市场年总出货量为4.59亿部,较2016年下跌4%,这也是中国首次出现智能手机年总出货量下滑的情况。 而近日中国信息通信研究院发布…

黑鲨的“游戏”人生:寻找手机红海之中一抹蓝

手机厂商的日子并不好过。 据第三方机构发布数据,2019年上半年,国内手机市场出货量仅为1.86亿部,同比下降5.1%,增量时代已过,行业进入存量时代,用户逐渐向头部企业集中。被挤到墙角的手机厂商,…

神仙打架!鲁大师发布2021半年报,黑鲨游戏手机4 Pro夺冠!

随着鲁大师2021年半年报发布,黑鲨游戏手机4 Pro的性能也被大家清晰的了解到。在本次鲁大师2021年半年报中,黑鲨游戏手机4 Pro夺得了手机综合性能榜的冠军宝座,成为名副其实的性能之王! 黑鲨游戏手机4 Pro作为主打游戏性能的旗舰机…

【数据结构与算法】稀疏数组

文章目录 一:为什么会使用稀疏数组1.1 先看一个实际的需求1.2 基本介绍1.2.1 稀疏数组的处理方法1.2.2 数组的举例说明1.2.3 应用实例1.2.4 整体思路分析二维数组转稀疏数组的思路稀疏数组转原始的二维数组的思路 二:代码实现2.1 创建一个原始的11*11二维…

一文盘点 Zebec 生态的几个利好预期

Zebec Protocol 是目前商业进展最快的流支付体系,也是推动流支付向 Web2 世界发展的主要生态。目前,其已经与包括 Visa、Master 等支付巨头展开了合作,以推出银行卡的方式进一步向金融发达地区推出 Zebec Card 以拓展业务,前不久其…