首页
学习
活动
专区
圈层
工具
发布

三分钟基础知识:用动画给女朋友讲解 TCP 四次分手过程

举个简单易懂的例子,你在微信对一个女孩表白,这条信息由于网络问题延迟发送了。 ?...如果你是客户端,女孩是服务端,服务端收到延迟的报文,以为你要和它连接,所以会给你发送确认同意连接,但你一直不搭理它,所以服务端的资源也就这么白白浪费掉了。所以知道为什么要进行三次握手了吧。...但是我们发现上图中有一个 2 MSL 的延迟等待。 ? 3、为什要有 2 MSL 等待延迟? 对应这样一种情况,最后客户端发送的ACK = 1给服务端的过程中丢失了,服务端没收到,服务端怎么认为的?...客户端只需等待2MSL,如果没有再次收到服务端的消息,就说明服务端已经接收到自己确认消息;此时双方都关闭的连接,TCP 四次分手完毕。 4、如果双方建立连接,一方出问题怎么办?...若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。 小结 今天用动画的形式给你女(男)朋友讲了 TCP 四次分手的过程,文章的内容以及展现形式是最基础的内容。

77450

你可能需要为你的 APP 适配 iOS11

前言 前几天发现在做的APP在iOS11系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData...,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。...iOS11下不想使用Self-Sizing的话,可以通过以下方式关闭:(前言中提到的问题也是通过这种方式解决的) iOS11下,如果没有设置estimateRowHeight的值,也没有设置rowHeight...Actions) 在iOS8之后,苹果官方增加了UITableVIew的右滑操作接口,即新增了一个代理方法(tableView: editActionsForRowAtIndexPath:)和一个类(UITableViewRowAction...),代理方法返回的是一个数组,我们可以在这个代理方法中定义所需要的操作按钮(删除、置顶等),这些按钮的类就是UITableViewRowAction。

3K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你可能需要为你的APP适配iOS11

    前言 前几天发现在做的APP在iOS11系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData...,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。...iOS11下不想使用Self-Sizing的话,可以通过以下方式关闭:(前言中提到的问题也是通过这种方式解决的) iOS11下,如果没有设置estimateRowHeight的值,也没有设置rowHeight...Actions) 在iOS8之后,苹果官方增加了UITableVIew的右滑操作接口,即新增了一个代理方法(tableView: editActionsForRowAtIndexPath:)和一个类(UITableViewRowAction...),代理方法返回的是一个数组,我们可以在这个代理方法中定义所需要的操作按钮(删除、置顶等),这些按钮的类就是UITableViewRowAction。

    1.2K20

    你可能需要为你的 APP 适配 iOS 11

    ,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData之后,也就是说tableView reloadData之后,tableView...,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。...iOS11下不想使用Self-Sizing的话,可以通过以下方式关闭:(前言中提到的问题也是通过这种方式解决的) self.tableView.estimatedRowHeight = 0; self.tableView.estimatedSectionHeaderHeight...Actions) 在iOS8之后,苹果官方增加了UITableVIew的右滑操作接口,即新增了一个代理方法(tableView: editActionsForRowAtIndexPath:)和一个类(UITableViewRowAction...),代理方法返回的是一个数组,我们可以在这个代理方法中定义所需要的操作按钮(删除、置顶等),这些按钮的类就是UITableViewRowAction。

    2.1K60

    AI:一个可以直接玩的改进版贪吃蛇游戏(附有全部代码)

    蛇和食物的颜色也可以调整得更鲜艳或者有渐变效果,可能加上动画效果,比如吃食物时的特效。 接下来是添加重新开始的按钮。原来的游戏结束是通过alert弹窗提示,用户需要手动关闭才能重新开始。...需要确认用户的需求,但根据用户的问题描述,可能是在游戏界面添加一个重新开始的按钮,无论游戏是否结束都可以点击。 还需要考虑响应式设计,确保按钮在手机和平板上也能正常显示和操作。...美化部分的具体实现:修改canvas的背景色,添加边框圆角,蛇身使用渐变色,食物使用不同的形状或者动画。比如蛇的每个节点可以有圆角,或者头部和身体颜色不同。食物可以闪烁或者旋转。...比如,当蛇向右移动时,按左键不会立即反向,而是保持原来的方向,直到下一个格子。 最后,将所有改动整合到代码中,确保没有冲突,并且代码可读性好。...可能遇到的挑战:方向按钮的触摸事件在移动设备上的响应延迟,或者与键盘事件冲突。需要测试在移动端的表现,或者使用touchstart事件来优化。 总结步骤:1.

    31710

    setInterval和settimeout应用场景

    语法:const timerId = setTimeout(回调函数, 延迟时间(ms))典型应用场景延迟操作:如用户输入停止后再执行搜索(防抖) let searchTimer; const handleInput...menuVisible = false; }, 500); };执行一次性定时任务:如页面加载后3秒自动关闭提示弹窗 setTimeout(() => { document.getElementById...('tip').style.display = 'none'; }, 3000);2. setInterval:重复执行setInterval 用于每隔指定时间重复执行函数,直到被手动停止。...console.log(`已运行: ${seconds}秒`); }, 1000); // 停止计时 const stop = () => clearInterval(stopwatch);动画效果...:简单的逐帧动画(现代动画更推荐 requestAnimationFrame,但 setInterval 可用于简单场景) let left = 0; const moveDiv = setInterval

    7900

    TCP 协议

    滑动窗口包含几个概念: 慢启动,每收到一个数据包的ACK确认后,都会将拥塞窗口的长度加一,直到达到慢启动的窗口阈值,进入拥塞避免阶段。如果中间发生数据包超时重传,则重新开始慢启动阶段。...如果网络不会出现阻塞延迟的情况,一次握手就够了: 源主机建立连接并向目标主机发送连接请求 目标主机收到连接请求后,建立连接 三次握手是为了兜底异常情况。...而在三次握手中, 当连接请求因阻塞而延迟到达目标主机,目标主机并不直接建立连接,而是返回连接确认。 源主机收到确认后,发现这是过期的请求,不做任何事情。...TCP四次挥手 主机A在发送完数据后,向主机B发送关闭连接的请求FIN,之后处于半关闭状态,不再发送任何数据,但可以接收数据 主机B在接收完数据后,处理关闭连接的请求,返回FIN同意关闭。...主机B在收到主机A的ACK确认后,判断数据是否传输完成。如果传输完成,则向主机A返回确认(FIN & ACK),并关闭连接。 主机A收到关闭确认,得知数据已经传输完成,于是关闭连接。

    56320

    JavaScript动画基本原理

    JavaScript动画基本原理 在现在做页面很多时候都会用上动画效果。比如下拉菜单,侧边搜索栏,层的弹出与关闭等等。...setInterval()这两个方法来实现类似的效果. 1. setTimeout(callback, time):延迟一段时间(time/ms)后执行对应的方法callback, 只执行一次...1. setInterval(callback, time):延迟一段时间(time/ms)后执行对应的方法callback, 循环执行,直到取消 如以下简单实例: 动画库 Jquery动画: Jqeury对于动画的支持 velocity.js/其GitHub地址:完全类似于Jquery语法的动画库 Tween JS:支持根据数值对象的属性和 CSS 样式的属性进行补间动画...Animo.js:CSS 动画的工具,叠加动画,创建跨浏览器的模糊效果,动画完成后可执行回调函数。

    1.3K10

    八股文!!

    MSS),在该分组被确认前,不能发送其他分组 在该小分组的确认未到达时,收集后续的客户数据,在该分组的确认到达时以一个分组发送 nagle与tcp延迟确认可以有效减少链接中的小分组,提高链接利用率 TCP_NODELAY...,窗口探查报文将会被持续重传,直到接收方窗口打开或关闭链接时为止,这个定时器被叫做坚持定时器。...快速重传 接收端按序接收报文,当收到一个失序报文段时,需要产生一个重复的确认报文,这个确认报文不该被延迟 发送端收到重复的确认报文时,无法判断重复确认是因为报文乱序到达还是报文丢失,因此等待少量重复的确认报文到来...当有错乱分组到达时不应延迟确认需要及时回复重复确认 收到一个重复确认意味着一个数据包到达目的主机 rto超时的拥塞避免 初始值:cwnd = 1 ,ssthresh = 65535 超时时:ssthresh...关闭整个链接会导致半关链接,需要在收到对端发送的FIN报文之后,及时关闭链接 Tcp协议总结 tcp的可靠性基于对发送数据按字节排序,并将发送数据暂存在发送缓冲区中,直到收到来自对方的对应确认报文后才会删除

    1.2K11

    jquery中的$()是什么_js简单特效

    一、JacaScript动画的基本原理 二、JavaScript中的动画简介 三、常用的动画库 四、动画遇到卡顿的原因及解决方案 (一)卡顿原因 (二)解决方案(优化) ---- 引言——在设计前端页面时...中没有帧的概念.但是我们可以通过setTimeout()和setInterval()这两个方法来实现类似的效果 1、setTimeout(callback, time) 延迟一段时间(time/ms...)后执行对应的方法callback, 只执行一次 2、setInterval(callback, time) 延迟一段时间(time/ms)后执行对应的方法callback, 循环执行,直到取消 三...CSS 样式的属性进行补间动画 4、Animo.js:CSS 动画的工具,叠加动画,创建跨浏览器的模糊效果,动画完成后可执行回调函数。...②Style(样式计算):确认每个DOM元素应用的CSS样式规则。 ③Layout(布局):计算每个DOM元素最终在屏幕上的大小和位置。

    10.3K20

    三分钟基础知识:用动画给面试官解释 TCP 三次握手过程

    2.3 Acknowledgment Numbe 称为「确认序列号」。确认序列号是接收确认端所期望收到的下一序列号。...这是接受的最后的数据,接受完就关闭了。动画如下: ? 2.5 Window size 称为滑动窗口大小。所说的滑动窗口,用来进行流量控制。 3、为什么进行 TCP 三次握手?...下面我们就以动画形式进行拆解三次握手过程。 ? 初始状态:客户端处于closed(关闭) 状态,服务器处于listen(监听) 状态。 ?...如果此时客户端发送的延迟的握手信息服务器收到,然后服务器进行响应,认为客户端要和它建立连接,此时客户端并没有这个意思,但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。...推荐阅读 基础数据结构:【动画】如何轻松手写链表? 三分钟基础知识:什么是栈?

    55840

    TCPIP详解之 《网络协议》图解 TCP 连接建立与释放

    原则是主动关闭的一方发送一个 FIN 报文来表示终止这个方向的连接,收到一个 FIN 意味着这个方向不再有数据流动,但另一个方向仍能继续发送数据,直到另一个方向也发送 FIN 报文。...服务器收到了客户端的确认应答后,就进入了 CLOSED 状态。直到客户端和服务器都进入 CLOSED 状态后,连接就完全释放了,这是TCP连接释放的第四次挥手。...若此时第一次发送的连接请求报文段延迟了一段时间后,到达了服务器端,本来这是一个早已失效的报文段,但是服务器端收到该链接请求后误以为客户端又发出了一次新的连接请求,于是服务器端向客户端发出确认应答报文段,...而服务器端却认为新的连接已经建立了,并在一直等待客户端发送数据,这样服务器端一直处于等待接收数据,直到超出计数器的设定值,则认为客户端出现异常,并且关闭这个连接。在这个等待的过程中,浪费服务器的资源。...FIN+ACK 报文段,因此,主动关闭方会重新发送确认应答信息,从而重新启动 2MSL 计时器,直到通信双方都进入 CLOSED 状态。

    2.5K10

    Material Design 超炫过渡动画实现及流程分析

    延迟加载 0 概述 在「Android 4.4.2引入的超炫动画库」中对于Transition的框架和常用的API使用进行了分析,Transition最常用的是在界面过渡方面,本文继续学习Transition...我们可以通过Window的setSharedElementsUseOverlay(false)来关闭该功能,不过这样一来会使最终结果和你预想的不一致,默认该值为true。...延迟加载 上面分析Transition会获取共享视图前后的状态值来创建动画,如果我们的图片是网上下载的,那么很有可能图片的准确大小需要下载下来才能确定,Activity Transitions API提供了一对方法暂时推迟过渡...,直到我们确切地知道共享元素已经被适当的渲染和放置。...在onCreate中调用postponeEnterTransition()(API >= 21)或者supportPostponeEnterTransition()(API 延迟过渡;当图片的状态确定后

    1.2K10

    实战!我用“大白鲨”让你看见 TCP

    可以在 Socket 设置 TCP_NODELAY 选项来关闭这个算法(关闭 Nagle 算法没有全局参数,需要根据每个应用自己的特点来关闭)。 ? 关闭 Nagle 算法 那延迟确认又是什么?...知道了 HZ 的大小,那么就可以算出: 最大延迟确认时间是 200 ms (1000/5) 最短延迟确认时间是 40 ms (1000/25) TCP 延迟确认可以在 Socket 设置 TCP_QUICKACK...关闭 TCP 延迟确认 延迟确认 和 Nagle 算法混合使用时,会产生新的问题 当 TCP 延迟确认 和 Nagle 算法混合使用时,会导致时耗增长,如下图: ?...TCP 延迟确认 和 Nagle 算法混合使用 发送方使用了 Nagle 算法,接收方使用了 TCP 延迟确认会发生如下的过程: 发送方先发出一个小报文,接收方收到后,由于延迟确认机制,自己又没有要发送的数据...要解决这个问题,只有两个办法: 要么发送方关闭 Nagle 算法 要么接收方关闭 TCP 延迟确认 ---- 巨人的肩膀 [1] Wireshark网络分析的艺术.林沛满.人民邮电出版社. [2] Wireshark

    1.8K61

    Android 12 新功能:SplashScreen优化启动体验

    前言 由于很多应用在启动时需要进行一些初始化事务,导致在启动应用时有一定的空白延迟,在之前我们一般的做法是通过替换 android:windowBackground 的自定义主题,使应用启动时及时显示一张默认图片来改善启动体验...启动时长 默认当应用绘制第一帧后,启动画面会立即关闭。但是在我们实际使用中,一般在启动时进行一些初始化操作,另外大部分应用会请求启动广告,这样其实需要一些耗时的。...通常情况下,这些耗时操作我们会进行异步处理,那么是否可以让启动画面等待这些初始化完成后才关闭?...我们可以使用 ViewTreeObserver.OnPreDrawListener让应用暂停绘制第一帧,直到一切准备就绪才开始,这样就会让启动画面停留更长的时间,如下: ... var isReady...关闭动画 启动画面关闭时默认直接消失,当然我们也可以对其进行自定义。

    6.3K20

    垂直同步、三重缓冲、freesync

    解决错帧现象;游戏更流畅; 3、强制每帧间隔完全一样,这样因为帧生成时间不平滑导致的不流畅也会解决 弊端: 鼠标反馈,移动鼠标,电脑收到消息把移动鼠标输出给显卡,显卡收到后把鼠标移动画面输出给显示器...,所有请求不会被延后,延迟只是电路延迟。...但开启垂直同步,显卡绘制完后缓冲后,显示器还没有显示器完前缓冲,显卡等着,鼠标移动指令和显卡一起等着,直到显示器绘制完前缓冲,移动鼠标的画面才被写入显示器后缓冲。...二、三重缓冲 默认情况下显示器只有两个缓冲区,而打开三重缓冲后,就有三个缓冲区,这样鼠标移动指令的滞后会被提前,但只能缓解鼠标延迟,不能根治,最好还是关闭垂直同步。...freesync的显示器可以动态调整刷新率而不是固定的1/60秒或者1/1444秒扫描完成一张画面,它会去适应显卡的输出帧,而不是等着,即“显示器刷新率变频技术”;可以解决画面撕裂,解决错帧,还可以保证没有鼠标延迟

    1.1K20
    领券