目前客户只能选择p2p或者relay, 如果有3个节点A/B/C, A->C的直连很差,A->B->C的连接很好,但是B在nat后面没办法成为服务器,那现在是没有办法做到的。
从目前包结构来看,把src/dest变成一个label stack应该是比较容易实现。
如果觉得label stack会太占用空间,而且对zero-copy不友好,可以用另外一种方式:
把dest id和真实节点解藕, 让真实节点可以对应多个dest id.换句话说,dest id实际上可以变成path id. 这样的话, 通过下面的路由表就能实现线路选择:
RouteTable_A: {1: C, 2:B}
RouteTable_B: {2:C, 3:A}
RouterTable_C: {3: B, 4: A}
A如果要选A->C, 可以设定path id为1, 如果A->B->C中转就选path id=2.
C如果要选C->A, 可以设定path id为4, 如果C->B->A中转就选path id=3.
目前客户只能选择p2p或者relay, 如果有3个节点A/B/C, A->C的直连很差,A->B->C的连接很好,但是B在nat后面没办法成为服务器,那现在是没有办法做到的。
从目前包结构来看,把src/dest变成一个label stack应该是比较容易实现。
如果觉得label stack会太占用空间,而且对zero-copy不友好,可以用另外一种方式:
把dest id和真实节点解藕, 让真实节点可以对应多个dest id.换句话说,dest id实际上可以变成path id. 这样的话, 通过下面的路由表就能实现线路选择:
RouteTable_A: {1: C, 2:B}
RouteTable_B: {2:C, 3:A}
RouterTable_C: {3: B, 4: A}
A如果要选A->C, 可以设定path id为1, 如果A->B->C中转就选path id=2.
C如果要选C->A, 可以设定path id为4, 如果C->B->A中转就选path id=3.