HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    TCP有限状态机(tcp有限状态机解读)

    发布时间:2023-03-19 04:56:04     稿源: 创意岭    阅读: 78        问大家

    大家好!今天让创意岭的小编来大家介绍下关于TCP有限状态机的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    本文目录:

    TCP有限状态机(tcp有限状态机解读)

    一、tcp拥塞控制常用算法

    tcp拥塞控制常用算法方法如下

    TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。拥塞算法需要掌握其状态机和四种算法。拥塞控制状态机的状态有五种,分别是Open,Disorder,CWR,Recovery和Loss状态。四个算法为慢启动,拥塞避免,拥塞发生时算法和快速恢复。和TCP一样,拥塞控制算法也有其状态机。当发送方收到一个Ack时,LinuxTCP通过状态机(state)来决定其接下来的行为,是应该降低拥塞窗口cwnd大小,或者保持cwnd不变,还是继续增加cwnd。

    二、理解tcp链接

    一般都说TCP 是长连接 ,但这个连接是 真实存在的吗。不是的。

    这个连接只是操作系统维护的一个状态机。通过两台计算机直接通过报文交互来改变这个状态值。并不是正真的有真实的链路存在。

    每次两台机器直接的通信 中间通过的节点可能都是不一样的,是动态选择的。

    所以 ,

    服务器端 TCP 连接的数量 受到内存大小的影响,每建立一个连接都要分配一块内存区域来维护这个‘连接’。

    三、【tcp】心跳检测,保活机制

    为什么要心跳检查?

    因为目前讨论的数据连接场景,都是无源连接,排除NAT的情况,连接就是存在于src和dest两端OS中的状态机,为什么会要用无源连接呢,有源是连接建立带宽就分配好了,不传有效数据这个带宽也被占用着,这不就浪费了,虚拟信号时代的电话就是有源的。

    心跳检查是两端都要做的,不做的那一端一样存在状态不对而不自知的情况。

    状态机在两端是有可能不一致的,比如一端认为这条连接已经销毁,另外一端可能认为仍有效。心跳机制的作用之一就是解决这种不一致的情况,类似“校对”的作用。

    在浏览器上请求一个需要长时间才得到结果的请求,最后返回超时错误。

    你说的情况我们经常遇到,我估计你说的就是客户端自己的超时设置,也就是如果http响应无法在限定时间内完成(比如1秒内),那么客户端应用程序自己会报timeout错误。

    这应该不是中间设备做了reset,因为如果是那样,这个中间设备应该会给客户端和服务端都发TCP RST,然后客户端报错会变成ECONNRESET这种(ECONNRESET是linux的网络协议栈报给用户空间程序的报错)。

    心跳消息显示push ack是为何呢?

    按照TCP协议(参考RFC793)规定,操作系统收到有PSH标志位的报文后,这些报文不会被驻留在接收缓冲区,而是要立即通知用户空间程序来接收。这样对于用户空间程序及时收发处理心跳报文是有利的。

    AWS的nlb keep-alive最大是350s,我们的服务端keep-alive是默认配置,客户端使用了连接池,也进行了探测,但是有个骚操作是随机选取池子里面的一个链接进行探测,然后那些超过350s还没探测的链接,再次使用就出问题了。

    你说的“随机选取池子里面的一个链接进行探测”,我判断是健康检查,就是业务健康性(类似k8s的readiness probe),而不是keepalive。

    如果是这样的话,这个健康检查确实不是为保活而生的,也很难达到保活的目的。建议这样做设置:client idle timeout < LB idle timeout < server idle timeout,这样可以尽可能的保证不出现连接失效的情况。

    这里说的“保活时间”,不是心跳包的间隔,而是空闲保活时间,idle timeout。

    保活机制:心跳包异常导致应用重启?

    https://time.geekbang.org/column/article/482610

    如何解决 Keep-Alive 导致 ECONNRESET 的问题

    https://zhuanlan.zhihu.com/p/86953757

    解决使用 KeepAlive Agent 遇到的 ECONNRESET

    https://zhuanlan.zhihu.com/p/34147188

    四、在应用层可以检测到tcp状态机的状态吗

    首先要了解TCP与UDP的定义与适用场合。TCP是可靠的,UDP是不可靠的。

    以上就是关于TCP有限状态机相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    scratch编程和c++的区别(编程scratch和编程c++的区别)

    TCP检测(tcp检测工具)

    tcp协议的应用

    直播带货20万有多少利润(带货主播卖10万能赚多少)

    什么是ip营销