Compare commits

...
19 Commits
Author SHA1 Message Date
xtaci 375640d183 Merge branch 'master' of https://github.com/xtaci/kcptun 2016-12-07 20:14:34 +08:00
xtaci ae2ba18b08 async stream open 2016-12-07 20:14:09 +08:00
xtaciandGitHub 717df77668 Update README.md 2016-12-05 14:06:44 +08:00
xtaci b61a2c240c upd 2016-12-02 17:02:41 +08:00
xtaci bfe3524d74 Merge branch 'master' of https://github.com/xtaci/kcptun 2016-12-02 16:24:44 +08:00
xtaci 8b3b38eeef add compile target mipsle 2016-12-02 16:23:53 +08:00
xtaciandGitHub 754b4a7186 Update README.md 2016-11-18 13:50:09 +08:00
xtaci 229a4a8783 Merge branch 'master' of https://github.com/xtaci/kcptun 2016-11-10 20:36:39 +08:00
xtaci 052f0a5397 optimized xor doesn't need -B flag for bce 2016-11-10 20:35:33 +08:00
xtaciandGitHub 8e74cf410c Update README.en.md 2016-11-04 10:56:03 +08:00
xtaciandGitHub 206df4b69f Update README.md 2016-11-04 10:55:36 +08:00
xtaciandGitHub 4ccc922059 Update README.md 2016-11-01 13:47:57 +08:00
xtaciandGitHub 1e88951c54 Update README.md 2016-11-01 13:41:49 +08:00
xtaciandGitHub 6540e3e90a Update README.en.md 2016-11-01 13:38:47 +08:00
xtaciandGitHub 9ac03a973b Update README.md 2016-11-01 13:34:51 +08:00
xtaciandGitHub f911127426 Add files via upload 2016-11-01 13:31:48 +08:00
xtaciandGitHub c601a18b3c Update README.md 2016-10-29 21:42:49 +08:00
xtaciandGitHub 7eb8d3ce41 Update README.md 2016-10-28 17:56:18 +08:00
xtaciandGitHub d425d472eb Update README.md 2016-10-28 16:44:04 +08:00
5 changed files with 59 additions and 21 deletions
+5 -2
View File
@@ -30,8 +30,8 @@ A tool for converting tcp stream into kcp+udp stream, :zap: ***[download address
### *QuickStart* :lollipop:
Client, server, respectively, download the corresponding platform binary compression package, and extract, through the following command to start port forwarding.
```
Server: ./server_linux_amd64 -t "SERVER_IP:8388" -l ":4000"
Client: ./client_darwin_amd64 -r "SERVER_IP:4000" -l ":8388"
Server: ./server_linux_amd64 -t "SERVER_IP:8388" -l ":4000" -mode fast2
Client: ./client_darwin_amd64 -r "SERVER_IP:4000" -l ":8388" -mode fast2
```
The above command can establish 8388/tcp port forwarding (through 4000/udp port).
@@ -109,6 +109,9 @@ GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
```
#### *Parameters by Layers* :lollipop:
<p align="left"><img src="layeredparams.png" alt="params" height="450px"/></p>
### *Applications* :lollipop:
1. Real-time gaming.
+32 -5
View File
@@ -1,5 +1,5 @@
<p align="center"><img src="logo.png" alt="kcptun" height="60px" /></p>
<p align="center"><em>也许是世界上最快的UDP传输工具</em></p>
<p align="center"><em>A Simple UDP Tunnel Based On KCP</em></p>
-
@@ -34,8 +34,8 @@
客户端、服务器分别**下载**对应平台的二进制压缩包,并**解压**,通过下面的命令**启动**端口转发。
```
服务器: ./server_linux_amd64 -t "服务器IP地址:8388" -l ":4000"
客户端: ./client_darwin_amd64 -r "服务器IP地址:4000" -l ":8388"
服务器: ./server_linux_amd64 -t "服务器IP地址:8388" -l ":4000" -mode fast2
客户端: ./client_darwin_amd64 -r "服务器IP地址:4000" -l ":8388" -mode fast2
```
以上命令可以实现8388/tcp端口的转发(通过4000/udp端口)。
@@ -114,6 +114,9 @@ GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
```
#### 分层参数图
<p align="left"><img src="layeredparams.png" alt="params" height="450px"/></p>
### 内置模式
@@ -131,6 +134,8 @@ GLOBAL OPTIONS:
* 搭配2. fast2 + FEC(10,3)
* 搭配3. fast2 + FEC(0,0)
默认profile参考: https://github.com/xtaci/kcptun/blob/master/client/main.go#L248
### 前向纠错
前向纠错采用Reed Solomon纠删码, 它的基本原理如下: 给定n个数据块d1, d2,…, dn,n和一个正整数m, RS根据n个数据块生成m个校验块, c1, c2,…, cm。 对于任意的n和m, 从n个原始数据块和m 个校验块中任取n块就能解码出原始数据, 即RS最多**容忍m个数据块或者校验块同时丢失**。
@@ -166,7 +171,26 @@ GLOBAL OPTIONS:
无论你上层如何加密,如果```-crypt none```,那么**协议头部**都是**明文**的,建议至少采用```-crypt aes-128```加密,并修改密码。
注意: ```-crypt xor``` 也是不安全的,除非你知道你在做什么
密码可以通过`-key`指定,也可以通过环境变量`KCPTUN_KEY`指定
注意: ```-crypt xor``` 也是不安全的,除非你知道你在做什么。
附加密速度Benchmark
```
BenchmarkAES128-4 200000 11182 ns/op
BenchmarkAES192-4 200000 12699 ns/op
BenchmarkAES256-4 100000 13757 ns/op
BenchmarkTEA-4 50000 26441 ns/op
BenchmarkSimpleXOR-4 3000000 441 ns/op
BenchmarkBlowfish-4 30000 48036 ns/op
BenchmarkNone-4 20000000 106 ns/op
BenchmarkCast5-4 20000 60222 ns/op
BenchmarkTripleDES-4 2000 878759 ns/op
BenchmarkTwofish-4 20000 68501 ns/op
BenchmarkXTEA-4 20000 77417 ns/op
BenchmarkSalsa20-4 300000 4998 ns/op
```
### 内存控制
@@ -297,7 +321,8 @@ type Snmp struct {
> 郑H立, 南东风, Li, 七七, 凌君, 昶,LesMiserables, KyOn, 噼里啪啦, 继斌, 小苍辛苦, **Ken**,
> 乔槁, 佳晨, 猪肉佬, lcx, 昊文, 冰峰, 凡, alex, **海豹叔叔**, 奥姐, 张冰, 司成,
> 武子, **慎**Alex43211**Coxxs**,荣,NeroNg,吴骁
> 武子, **慎**Alex43211**Coxxs**,荣,NeroNg,吴骁,定一,我不是林JPatrick, 超, 陈,windfarer, 宇,
> 今晶,斌,晓东,最后一缕阳光。
好人一生平安!
@@ -307,6 +332,7 @@ type Snmp struct {
2. https://github.com/EasyPi/openwrt-kcptun
3. https://github.com/kuoruan/luci-app-kcptun
4. https://github.com/dfdragon/kcptun_gclient
5. https://github.com/dfdragon/kcptun_xclient
### 参考资料
@@ -323,3 +349,4 @@ type Snmp struct {
11. https://tools.ietf.org/html/rfc5827 -- Early Retransmit for TCP and Stream Control Transmission Protocol (SCTP).
12. http://http2.github.io/ -- What is HTTP/2?
13. http://www.lartc.org/LARTC-zh_CN.GB2312.pdf -- Linux Advanced Routing & Traffic Control
14. https://en.wikipedia.org/wiki/Noisy-channel_coding_theorem -- Noisy channel coding theorem
+13 -1
View File
@@ -12,7 +12,7 @@ fi
VERSION=`date -u +%Y%m%d`
LDFLAGS="-X main.VERSION=$VERSION -s -w"
GCFLAGS="-B"
GCFLAGS=""
OSES=(linux darwin windows freebsd)
ARCHS=(amd64 386)
@@ -40,3 +40,15 @@ done
if $UPX; then upx -9 client_linux_arm* server_linux_arm*;fi
tar -zcf kcptun-linux-arm-$VERSION.tar.gz client_linux_arm* server_linux_arm*
$MD5 kcptun-linux-arm-$VERSION.tar.gz
#MIPS32LE
env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$LDFLAGS" -gcflags "$GCFLAGS" -o client_linux_mipsle github.com/xtaci/kcptun/client
env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags "$LDFLAGS" -gcflags "$GCFLAGS" -o server_linux_mipsle github.com/xtaci/kcptun/server
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$LDFLAGS" -gcflags "$GCFLAGS" -o client_linux_mips github.com/xtaci/kcptun/client
env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags "$LDFLAGS" -gcflags "$GCFLAGS" -o server_linux_mips github.com/xtaci/kcptun/server
if $UPX; then upx -9 client_linux_mips* server_linux_mips*;fi
tar -zcf kcptun-linux-mipsle-$VERSION.tar.gz client_linux_mipsle server_linux_mipsle
tar -zcf kcptun-linux-mips-$VERSION.tar.gz client_linux_mips server_linux_mips
$MD5 kcptun-linux-mipsle-$VERSION.tar.gz
$MD5 kcptun-linux-mips-$VERSION.tar.gz
+9 -13
View File
@@ -53,7 +53,12 @@ func newCompStream(conn net.Conn) *compStream {
return c
}
func handleClient(p1, p2 io.ReadWriteCloser) {
func handleClient(sess *smux.Session, p1 io.ReadWriteCloser) {
p2, err := sess.OpenStream()
if err != nil {
return
}
log.Println("stream opened")
defer log.Println("stream closed")
defer p1.Close()
@@ -383,23 +388,14 @@ func main() {
checkError(err)
idx := rr % numconn
OPEN_P2:
// do auto expiration
if config.AutoExpire > 0 && time.Now().After(muxes[idx].ttl) {
// do auto expiration && reconnection
if muxes[idx].session.IsClosed() || (config.AutoExpire > 0 && time.Now().After(muxes[idx].ttl)) {
chScavenger <- muxes[idx].session
muxes[idx].session = waitConn()
muxes[idx].ttl = time.Now().Add(time.Duration(config.AutoExpire) * time.Second)
}
// do session open
p2, err := muxes[idx].session.OpenStream()
if err != nil { // mux failure
chScavenger <- muxes[idx].session
muxes[idx].session = waitConn()
muxes[idx].ttl = time.Now().Add(time.Duration(config.AutoExpire) * time.Second)
goto OPEN_P2
}
go handleClient(p1, p2)
go handleClient(muxes[idx].session, p1)
rr++
}
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB