Chinaunix

标题: TCP连接转移 [打印本页]

作者: jack9981    时间: 2014-09-26 07:15
标题: TCP连接转移
设有客户端C,   服务端 s1, s2

c向s1发起连接请求, s1能否在c不知道的前提下,将此连接转移到s2; 变成 c 与s2通信。
作者: hellioncu    时间: 2014-09-26 08:16
c直接与s2通信不经过s1?

作者: zsszss0000    时间: 2014-09-26 08:40
这个是负载均衡技术吗?
作者: csumck    时间: 2014-09-26 09:02
如果s1和s2属于不同机器上的服务,可以用负载均衡的硬件(例如F5)或软件(例如LVS)实现。
如果S1和S2是是同一个机器上的不同进程,用以上办法可以做,也可以直接sendmsg/recvmsg进行描述符的跨进程传递。
作者: jack9981    时间: 2014-09-26 09:13
hellioncu 发表于 2014-09-26 08:16
c直接与s2通信不经过s1?



是的-------------------------
作者: jack9981    时间: 2014-09-26 09:14
zsszss0000 发表于 2014-09-26 08:40
这个是负载均衡技术吗?


其中的一个应用吧----
作者: jack9981    时间: 2014-09-26 09:16
csumck 发表于 2014-09-26 09:02
如果s1和s2属于不同机器上的服务,可以用负载均衡的硬件(例如F5)或软件(例如LVS)实现。
如果S1和S2是是 ...


s1, s2是不同的机器, 转移之后s1完全断开与c的联系。  有没有比较简明的c代码实现呢?
作者: hellioncu    时间: 2014-09-26 09:18
jack9981 发表于 2014-09-26 09:13
是的-------------------------


这个应该是行不通的
作者: cjaizss    时间: 2014-09-26 09:36
jack9981 发表于 2014-09-26 09:16
s1, s2是不同的机器, 转移之后s1完全断开与c的联系。  有没有比较简明的c代码实现呢?

网络拓扑图呢?
作者: wangspace    时间: 2014-09-26 09:38
4L 说描述符的跨进程传递应该可以   我是小白:)
作者: 流氓无产者    时间: 2014-09-26 09:38
hellioncu 发表于 2014-09-26 09:18
这个应该是行不通的

有可能
包交换体系有这个问题
作者: _BlueGay__    时间: 2014-09-26 10:13
在内核态可以实现,用户态不知道行不行……
作者: linux_c_py_php    时间: 2014-09-26 11:23
不就是个haproxy,纯透明TCP转发?
作者: yulihua49    时间: 2014-09-26 13:48
jack9981 发表于 2014-09-26 09:16
s1, s2是不同的机器, 转移之后s1完全断开与c的联系。  有没有比较简明的c代码实现呢?


查一下IP再定向。
也有用ARP欺骗来实现的,LVS就是。
作者: socay2    时间: 2014-09-26 14:35
linux_c_py_php 发表于 2014-09-26 11:23
不就是个haproxy,纯透明TCP转发?

代理不行吧,s1做代理,c 的数据照样发送到 s1, 由s1转给s2

楼上讨论的 recvmsg/sendmsg 跨进程传递描述符,能做到吗?  跨了之后,在另外一个进程就能访问另一个进程的资源了?
作者: xinglp    时间: 2014-09-26 18:01
http://lwn.net/Articles/495304/
作者: mrpre    时间: 2014-09-27 11:17
看楼主标题,和 7层/4层 负载均衡很像。一般来说,通过代理可以实现,客户端和服务器之间加台网络设备,网络设备截获客户端的请求,然后建立链接,紧接着,网络设备再和某个服务器建立链接。当然成本肯定比较高。有点像中间人攻击那样。

内核态的话,可以尝试在tcp_v4_rcv函数中的__inet_lookup_skb函数附近做手脚。

作者: Sevk    时间: 2014-09-28 13:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: mymtom_cu    时间: 2014-10-09 07:56
OpenBSD的 pf + relayd就能实现这个功能。
作者: ID好难    时间: 2014-10-09 10:28
一般的NAT不是这种情况吗?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2