http的keep-alive和tcp的keepalive是根据什么判断是否是同一个连接的?

wslk857208 发布于 2015/05/17 12:54
阅读 1K+
收藏 0
rt
加载中
0
喜之郎
yunchuan
yunchuan
回复 @wslk857208 :就只有 IP以及源目的地端口
wslk857208
wslk857208
端口这些呢, 应该不是这么简单
0
GITTODO
GITTODO

IP/端口,session

0
tod_tao
tod_tao
据我所知,HTTP的keep-alive与TCP的keepalive好像不是同一个东西吧,两者在网络ISO网络模型中处于不同的层次,没有直接联系。


HTTP的keep-alive是为了减少tcp连接(因为tcp连接的三次握手开销比较大)而提出的一种解决方案,具体内容可以参考RFC2616


TCP的keep-alive是用来检测死连接的。百度百科介绍
tod_tao
tod_tao
回复 @wslk857208 : 这个同一连接只能在TCP层判断,在TCP层生成唯一ID号然后将这个ID号以HTTP请求头或者响应头传输。我也只能想这个办法,不知道是不是你想要的。
wslk857208
wslk857208
是,不一样这个是知道,只不过不清楚http如何判断同一个连接
0
南湖船老大
南湖船老大
Session。在tcp协议中,开源ip+端口:目的端口+ip,这四个数字合起来唯一确定一个session
wslk857208
wslk857208
http呢,一样么
0
铂金胖子
铂金胖子
不要太相信 keep-alive, 谁知道哪个防火墙就帮你断了。自己用心跳吧。
铂金胖子
铂金胖子
回复 @wslk857208 : 以前踩坑的经验,建议而已。
wslk857208
wslk857208
我也是醉了哦,我在问怎么判断你给我说不要用,我肯定是要用才问的啊
0
tod_tao
tod_tao
理论上HTTP是无状态的连接,每一次数据传输完都会关闭,所以在HTTP层不存在什么判断是否为同一次连接的。只是后来为了减少服务器压力才提出了"keep-alive"(长连接),一次TCP连接可以发送多个HTTP请求,如果硬要说判断同一个连接话,也只有在客户端发送的时候,有一个TCP的连接池,当一次HTTP请求结束后,不立即将tcp连接关闭,而是将此连接放到空闲的连接池中,如果需要再次发送HTTP请求的时候再将从空闲的连接池中获取TCP连接(这个可以去参考HttpClient的连接管理)。
返回顶部
顶部