首页 » 网站推广 » phptcpkeepcnt技巧_大年夜厂面试必问TCP的KeepAlive和HTTP的KeepAlive有何差异

phptcpkeepcnt技巧_大年夜厂面试必问TCP的KeepAlive和HTTP的KeepAlive有何差异

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

TCP的KeepAlive是侧重在保持客户端和做事真个连接,一方会定时发送心跳包给另一方,当一方断掉的时候,其余一方定时发送几次心跳包,如果连续几次对方都返回的是RST,而不是ACK,那么就开释当前链接。

此时我们假设一下,如果TCP没有KeepAlive机制会涌现什么问题呢。
一旦对方断开连接,而另一方没有开释的话,不出三天,做事器资源就会被挤爆。
说到这里是不是觉得这种场景似曾相识呢,此时我们就会创造这种场景和TCP三次握手时候的半连接攻击一模一样。

phptcpkeepcnt技巧_大年夜厂面试必问TCP的KeepAlive和HTTP的KeepAlive有何差异

大致流程如下:

phptcpkeepcnt技巧_大年夜厂面试必问TCP的KeepAlive和HTTP的KeepAlive有何差异
(图片来自网络侵删)

1.如果对方主机不可达,一样平常在建立连接之前就会出错。

2.如果对方主机可达,运用程序正常,对方相应ACK应答,就认为是存活的。

3.如果对方主机可达,运用程序退出,对方相应RST应答,发送TCP撤消连接。

4.如果对方主机可达,运用程序崩溃,对方相应FIN应答。
要求开释连接。

5.如果对方主机无相应,即同时无ACK, RST,那么就会持续发送,直到超时。
此时开始撤消连接。
这个韶光一样平常默认为两个小时。

举例解释:

这里是

SO_KEEPALIVE:KeepAlive掌握开关,打开或关闭。

TCP_KEEPIDLE:设置空闲韶光,即有多久没有发送报文就进行探测。

TCP_KEEPCNT:设置KeepAlive的考试测验次数,

TCP_KEEPINTVL:设置重试KeepAlive的报文间隔。

须要把稳的是TCP_KEEPIDLE和TCP_KEEPINTVL是不一样的,前者是须要进行KeepAlive探测的空闲韶光,而后者是在某次KeepAlive探测失落败,再次重试的间隔韶光。

对付上面的代码段来说,当该TCP连接有5秒没有进行数据传输时,就会发送KeepAlive探测报文。
当探测报文失落败时,会隔2秒再次发送探测报文,3次探测失落败就判断连接失落败。

HTTP的Keep-Alive

众所周知HTTP/1.0,默认利用的是短连接。
也便是说,浏览器和做事器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
这是由于早期的Web要求比较大略,大部分是图文,一次性将页面所须要的数据全部加载,然后页面渲染。
但是随着互联网的发展,涌现了各种各样比较繁芜的场景,最常见的便是在线视频,在线游戏等等。
那么此时如果还是短链接,就会频繁地建立销毁链接,占用大量的资源。
于是乎HTTP/1.1便开始默认长连接了。
此时此刻我们的主角Keep-Alive该上场了。

怎么理解Keep-Alive呢,我们的直不雅观感想熏染便是一个标记而已,当开启Keep-Alive后,HTTP连接不会立马断开,而是可以被下一个要求连续复用,这就省去了频繁的创建和销毁。
同样的,在吸收完相应报文后,客户端也不关闭连接,发送下一个 HTTP 要求时会重用该连接。

在 HTTP/1.0 协议中,如果要求头中包含:

Connection: Keep-Alive

前面我们说过HTTP/1.0默认的是短连接,但是如果在要求头中加上Connection: Keep-Alive理论上是可以实现长连接的,不过这个默认不开启。

在 HTTP/1.1 协议中,默认开启 keep-alive,除非显式地关闭它:

Connection: clos

举例解释:

任意取一个相应报文。

由上面的示例可以看到里面的相应头部有一个Connection: Keep-Alive,这个键值对的浸染是让HTTP保持连接状态,由于HTTP 协议采取“要求-应答”模式,当利用普通模式,即非 Keep-Alive 模式时,每个要求/应答客户和做事器都要新建一个连接,完成之后立即断开连接(HTTP 协议为无连接的协议);当利用 Keep-Alive 模式时,Keep-Alive 功能使客户端到做事器真个连接持续有效。

在HTTP 1.1版本后,默认都开启Keep-Alive模式,只有加入加入 Connection: close才关闭连接,当然也可以设置Keep-Alive模式的属性,例如 Keep-Alive: timeout=5, max=100,表示这个TCP通道可以保持5秒,max=100,表示这个长连接最多吸收100次要求就断开。

总结

这里只是大略地先容了一下两者的差异,足够搪塞口试了。
如果要深入理解,一定是涉及TCP和HTTP底层的,一天一夜也说不清楚。
这里只须要明白两者是干什么的就行,大致差异即可,当然如果要理解更多的网络口试知识,可以关注一下

说了这么多,各位看官大人要怎么获取呢。
很大略,关注

如果大家有比较好的资源欢迎相互互换,共同提高。
同时有部分素材来源于网络,如侵,联删。

标签:

相关文章

phpredis对账技巧_若何做一个对账系统

对账是支付系统中的一环,因此在对账前我们先理解一下干系的业务知识业务知识什么是对账传统的对账便是核对账目,是指在司帐核算中,为担保...

网站推广 2024-12-12 阅读0 评论0