公司做网站费用怎么记账,wordpress 调用链接,ui交互设计做什么,做ppt模板网站目录
一、TCP协议
二、TCP核心特性的保障
三、保留的六位标志位对于应答报文的作用
四、如何处理丢包——超时重传的原理
五、超时重传的时间 一、TCP协议 每一行是四个字节#xff0c;前面的20个字节是固定的#xff08;TCP最短长度#xff0c;20字节#xff0c;选项…目录
一、TCP协议
二、TCP核心特性的保障
三、保留的六位标志位对于应答报文的作用
四、如何处理丢包——超时重传的原理
五、超时重传的时间 一、TCP协议 每一行是四个字节前面的20个字节是固定的TCP最短长度20字节选项部分有/无都行当然了你有多个也行 4bit表示的范围0——15 此处的单位是4字节 所以要把这里的数值*4才是真正的报头长度TCP最大的长度60字节。 保留六位的六个标识位resvered设计TCP大佬比设计UDP的大佬留个心眼虽然现在不用但是先占有个位置后面可能需要用目前TCP这么多年大概不用了 二、TCP核心特性的保障 TCP核心特性有连接可靠传输面向字节流全双工 可靠传输内核实现的可靠传输写代码的时候感知不到人本身就是这么设计让感知成本使用成本降低 网络传输中常常会遇到那种后发先至当连续发送多条信息的时候 网络上从A到B中间路径有很多初心冗余让他不怕核弹这种一个弹过来影响通讯 比如舔狗狗哥舔女神 问女神吃不吃麻辣烫呀愿不愿意做我女朋友啊 女神先回我好的好的。 滚一边去下头男啊 结果后发先至虽说没有吃麻辣烫但是做我女朋友也挺好。小丑。 另外每个节点/路由器/交换机/繁忙程度不一样此时这样的转发过程也会存在差异。 那么我们该怎么办呢 针对数据进行编号 TCP是面向字节流不是按照条为单位进行传输的。 确认应答的意思假如说应答下一个数据1001就说明1-1000之前的数据全收到了下面该从1001开始发。 1.针对字节进行编号的而不是针对条 2.应答报文也是要和收到的数据序号相关联而不是相等。 只要知道这一串字节的开始编号以及数据的长度每个字节的编号也就知道了TCP报头中把这一串字节的编号表示出来再结合报文长度此时每个字节编号就都确定了。 编号也就是那个32位序号 32位确认序号——这个字段是给应答报文使用的假如超越了32位就开始从头计算4个字节-42亿9千万4个G,一般也不会一口气传4G 三、保留的六位标志位对于应答报文的作用 保留的六位具体是 那么对于应答报文是怎么样呢 ACK为0表示这是一个普通报文此时只有32位序号是有效的 ACK为1表示这是一个应答报文这个报文的序号和确认序号都是有效的-确认报文的序号和正常报文之间没有关联关系各自论各自的序号是你自己的主机发送的数据进行编号。 数据1-1000序号1长度1000确认序号无意义ACK为0 下一个返回确认报文1001序号未知假设是100这个序号根发送序号没啥关系长度不知道确认序号是1001ACK是1-应答报文可能携带载荷也可能没有。 下一个传输应答的时候应答是应答的序号与发送的序号无关上个应答序号是100这个应答报文就应该是101序号未知。 确认应答是TCP保证-IP协议的报头中可以知道载荷多长的IP载荷长度——TCP报头长度-TCP载荷长度 如果设备过于繁忙后来新来的等待的太久就可能会被丢弃越忙越容易丢包。 面对丢包我们的应对机制是什么呢难道丢包就不可靠了吗 四、如何处理丢包——超时重传的原理 这个问题最大的就是无法区分是哪种情况既然无法区分那就都重新传输呗。但是也不能随意去重啊。你想想一个问题你转50块钱就算你没收到我发出去了啊我再发一个50那不就亏了50嘛任何问题一用钱考虑都好过分接收方收到数据之后需要对数据进行呢去重把重复的数据丢弃掉保证应用程序调用inputStream的时候读到的不会出现重复如何进行去重如何高效判定当前数据是否重复直接使用TCP的序号来作为判定依据 -TCP在内核中给每个socket对象都安排一个内存空间相当于一个队列也称为“接收缓冲区”收到的数据都会被放到缓冲区里并且按照序号排列已经排好序了。 这里又是一个生产者消费者模型收到数据接收的网卡把数据放到对应socket的接收缓冲区内核中 应用程序调用read就是从这个接收缓冲区中消费数据当数据被read走后就可以从队列中删除掉了read有两种模式读到就删除也可以读到不删除-》接收缓冲区数据按照序号有序排列队列队首序号已经超过了新收到的这个数据的序号新收到的序号在之前被读过了 以下是去重的思想假如给B发一条序号为100B成功收到消息后并返回101作为确认然后确认的消息发生了丢包你不知道消息是否到达所以你进行了重新发送序号仍为100确保B能正常接收但是由于B之前已经读完了那个主机A的内容所以他会帮你进行一个去重注意不是根据内容去重的哈 后发先至的这个问题是根据序号重新排列的过程因此应用程序不必考虑数据传输先后的顺序问题。 五、超时重传的时间 为啥我们重新传输的时候就能够传过去呢这就如同电脑重启丢包的本质是概率问题重传的次数增加总体传输的成功概率也就越大高中算数一个丢包0.1概率连着丢10的概率很低的。 超时时间当然也不是一个固定的值这段时间一直传不过去就不传了这种是会随着超时轮次的增加进一步增加 随着转轮次数的增加等待时间也会越来越长当前认为正常情况下第二次重新传输有极大情况重传成功如果很多次都不成功那就有可能当前的网络有故障。 超时重传的轮次也不是无限的重新传输到一定次数会重置TCP连接。使用复位报文 TCP复位报文 RST那个六位里面的 RST为1表示一个复位报文-》除非严重的故障复位操作也无法成功最后只好放弃连接。 确认应答是TCP可靠最核心的机制 超时连接是TCP可靠性的有效补充 下一篇更屌面试最常考的就是我的下一章等我