HTTPkeep-alive与TCP keepalive

keepalive

Http 协议中有一个keep-alive的状态,Tcp 三次握手中也有一个keep-alive的状态,从字面上看就多了一个‘-‘,它们两个是完全不同的。

一、Http协议中的keep-alive:

在访问一个页面的过程中,会请求很多次服务器去获取不同的网页内容,而http的每次请求都是无连接的,请求->发送->关闭,所以在多次请求的过程中会使用不同的tcp端口号和sockfd,这样会发生多次的断开和链接tcp的过程,可以想象这种情况对于服务器而言是想当不利的。

下面是我做的一个实验:我的搭建的服务器在一次网页请求中发生的链接和断开

可以看出,整个过程发生了3次链接和关闭的过程。


而 http 中keep-alive的作用就是复用tcp,在浏览器请求服务器http服务时,

服务器将保持当前的tcp链接一段时间,这个时间是可以通过keepalive_timeout

设置的。

浏览器在HTTP1.1下的keep-alive都是默认开启的。



二、TCP下的keepalive


TCP下的keepalive :

这个keepalive是一种检测TCP链接状况的保险措施,它会每隔一定的时间就去

client发送个数据,通过client端的反应来采取相应的措施。

所以:完全不同的两个keepalive



时间: 2024-11-19 21:12:08

HTTPkeep-alive与TCP keepalive的相关文章

TCP KEEP-ALIVE和TCP_USER_TIMEOUT机制

正常通信的情况下,send函数发送成功会返回发送数据的字节数.当有错误发生时,send返回-1,全局变量errno被设置.很多情况下,send返回-1是由于连接被对端关闭(对端发送了RST或者FIN包),这种情况errno会被设置为ECONNRESET(Connection reset by peer). 可是在对端的网线被拔.网卡被卸载或者禁用的时候,对端没有机会向本地操作系统发送TCP RST或者FIN包来关闭连接.这时候操作系统不会认为对端已经挂了.所以在调用send函数的时候,返回的仍然

TCP Keepalive HOWTO

TCP Keepalive HOWTO Fabio Busatto <[email protected]> 2007-05-04 Revision History Revision 1.0 2007-05-04 Revised by: FB First release, reviewed by TM. This document describes the TCP keepalive implementation in the linux kernel, introduces the over

TCP连接探测中的Keepalive和心跳包. 关键字: tcp keepalive, 心跳, 保活

1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 2) 对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制. 2. 导致TCP断连的因素 如果网络正常, socket也通过close操作来进行优雅的关闭, 那么一切完美. 可是有很多情况, 比如网线故障, 客户端一侧突然断电或者崩溃等等, 这些情况server并不能正常检测到连接的断开. 3. 保活的两种方式: 1) 应用层面的心跳机制 自定义心跳消息头. 一般客户端主动发送, 服务器接收后进行回

TCP keepalive

  2. TCP keepalive overview In order to understand what TCP keepalive (which we will just call keepalive) does, you need do nothing more than read the name: keep TCP alive. This means that you will be able to check your connected socket (also known a

TCP keepalive overview

2. TCP keepalive overview In order to understand what TCP keepalive (which we will just call keepalive) does, you need do nothing more than read the name: keep TCP alive. This means that you will be able to check your connected socket (also known as

AIX/Linux/Solaris/HP-UXAIX查看系统TCP keepalive值

查看系统TCP keepalive值: AIX: $ no -a | grep keep HP-UX and Solaris: $ ndd -get /dev/tcp tcp_keepalive_interval Linux: $ sysctl -a | grep keep AIX/Linux/Solaris/HP-UXAIX查看系统TCP keepalive值

为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)

TCP keep-alive的三个参数 用man命令,可以查看linux的tcp的参数: man 7 tcp 其中keep-alive相关的参数有三个: tcp_keepalive_intvl (integer; default: 75; since Linux 2.4) The number of seconds between TCP keep-alive probes. tcp_keepalive_probes (integer; default: 9; since Linux 2.2)

http keep-alive与tcp keep-alive

http keep-alive与tcp keep-alive http keep-alive与tcp keep-alive,不是同一回事,意图不一样.http keep-alive是为了让tcp活得更久一点,以便在同一个连接上传送多个http,提高socket的效率.而tcp keep-alive是TCP的一种检测TCP连接状况的保鲜机制.tcp keep-alive保鲜定时器,支持三个系统内核配置参数: echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_

TCP keepalive under Linux

TCP Keepalive HOWTO Prev   Next 3. Using TCP keepalive under Linux Linux has built-in support for keepalive. You need to enable TCP/IP networking in order to use it. You also need procfs support and sysctl support to be able to configure the kernel p

tcp keepalive选项

之前一直对tcp keepalive选项理解有误, 以为通过setsockopt函数设置SO_KEEPALIVE和相关参数后该socket则使用设置的keepalive相关参数 否则使用系统默认的:keepalive配置(如下) [email protected]:/# sysctl -a | grep keepnet.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 9net.ipv4.tcp_keepalive_time