关于tcp代理与keepalive

关于tcp代理涉及3个实体:

c: client

p: proxy

s: server

 

c  <—–> p <—–> s

c 和 p建立tcp连接, p 和 s 建立tcp连接;

对于tcp来讲,很可能不是http那样ask and answer then close的, 很有可能连接上长时间没有数据,那么会出现什么问题呢?

  1. 假如 c 和 p 之间的网线短了, c 不可能再关闭这个连接了,那么p如何释放这个连接呢?
    1. p 在该连接上设置keepalive,定期检查连接是否断开,一般系统设置的间隔时间为2小时
    2. 一定程度上,c也关心这个长时间没有使用的连接是否依然可用,那么,c也可以在该连接上设置keepalive
  2. 问题:
    1. p 是否会转发c 的keepalive 数据包?
      1. p 是tcp(传输层)的代理,只有接到数据才会转发,没有数据不会转发
      2. keepalive 实际上是一个数据长度为0的ip数据包
      3. 所以: p 不会转发keepalive
    2. 既然p不会转发keepalive,那么如果p和 s 之间的链路出现问题,c 将不知道其实连接已经不可用了,然后就会数据发送失败

总结:

  1. p 有必要和c、s keepalive

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据