Module: P2p2

Defined in:
lib/p2p2/p1.rb,
lib/p2p2/p2.rb,
lib/p2p2/head.rb,
lib/p2p2/p2pd.rb,
lib/p2p2/custom.rb,
lib/p2p2/version.rb,
lib/p2p2/p1_custom.rb,
lib/p2p2/p1_worker.rb,
lib/p2p2/p2_custom.rb,
lib/p2p2/p2_worker.rb,
lib/p2p2/p2pd_worker.rb

Overview

P2p2::P2pd - 配对服务。

包结构

tund-p2pd, tun-p2pd:

room

p2pd-tund, p2pd-tun:

Q>: 0 ctlmsg -> C: 1 peer addr -> tun sockaddr / tund sockaddr

tun-tund:

Q>: 0 ctlmsg -> C: 2 heartbeat -> C: random char

 3 a new source  -> Q>: src id
 4 paired        -> Q>: src id -> n: dst port
 5 dest status   -> n: dst port -> Q>: biggest relayed dst pack id -> Q>: continue src pack id
 6 source status -> Q>: src id -> Q>: biggest relayed src pack id -> Q>: continue dst pack id
 7 miss          -> Q>/n: src id / dst port -> Q>: pack id begin -> Q>: pack id end
 8 fin1          -> Q>/n: src id / dst port -> Q>: biggest src pack id / biggest dst pack id -> Q>: continue dst pack id / continue src pack id
 9 not use
10 fin2          -> Q>/n: src id / dst port
11 not use
12 tund fin
13 tun fin

Q>: 1+ pack_id -> Q>/n: src id / dst port -> traffic

close logic

1-1. after close src -> dst closed ? no -> send fin1 1-2. tun recv fin2 -> del src ext

2-1. tun recv fin1 -> all traffic received ? -> close src after write 2-2. tun recv traffic -> dst closed and all traffic received ? -> close src after write 2-3. after close src -> dst closed ? yes -> del src ext -> send fin2

3-1. after close dst -> src closed ? no -> send fin1 3-2. tund recv fin2 -> del dst ext

4-1. tund recv fin1 -> all traffic received ? -> close dst after write 4-2. tund recv traffic -> src closed and all traffic received ? -> close dst after write 4-3. after close dst -> src closed ? yes -> del dst ext -> send fin2

Defined Under Namespace

Modules: Custom Classes: P1, P1Custom, P1Worker, P2, P2Custom, P2Worker, P2pd, P2pdWorker

Constant Summary collapse

PACK_SIZE =

包大小 1400(console MTU) - 8(PPPoE header) - 40(IPv6 header) - 8(UDP header) - 8(pack id) - 8(src id) = 1328

1328
CHUNK_SIZE =

块大小

PACK_SIZE * 1000
WBUFFS_LIMIT =

写前上限,超过上限结一个块

1000
WMEMS_LIMIT =

写后上限,达到上限暂停写

100_000
RESUME_BELOW =

降到多少以下恢复写

50_000
EXPIRE_NEW =

创建之后多久没有流量进来,过期

10
EXPIRE_AFTER =

多久没有新流量,过期

300
CHECK_EXPIRE_INTERVAL =

检查过期间隔

60
STATUS_INTERVAL =

发送状态间隔

0.5
SEND_STATUS_UNTIL =

持续的告之对面状态,直到没有流量往来,持续多少秒

10
BREAK_SEND_MISS =

miss包个数上限,达到上限忽略要后面的段,可控碎片缓存

10_000
CONFUSE_UNTIL =

混淆前几个包

5
HEARTBEAT_INTERVAL =

心跳间隔

5
UPDATE_ROOM_INTERVAL =

刷新房间间隔

60
PEER_ADDR =
1
HEARTBEAT =
2
A_NEW_SOURCE =
3
PAIRED =
4
DEST_STATUS =
5
SOURCE_STATUS =
6
MISS =
7
FIN1 =
8
GOT_FIN1 =
9
FIN2 =
10
GOT_FIN2 =
11
TUND_FIN =
12
TUN_FIN =
13
VERSION =
'0.26.0'.freeze