1. quic-go版本
# git log
commit 0f3c94f92d9370eba392db7258f9d22435199b6d
Merge: 4a9bd79 c923158
Author: Marten Seemann <martenseemann@gmail.com>
Date: Mon Aug 16 23:43:41 2021 +0200
Merge pull request #3258 from lucas-clemente/go117
update to Go 1.17.x
2. example-echo
# 启动server
cd quic-go/example
go run main.go
# 启动client
cd quic-go/example/echo
go run echo.go
3. quic-go与vpp通信
使用example/echo/echo.go(client)与vpp echo server(server)交互
修改代码:
【1】internal/protocol/version.go (line:30)
var SupportedVersions = []VersionNumber{VersionDraft29}
【2】internal/protocol/crypto_setup.go (line:273)
EnforceNextProtoSelection:false
【3】example/echo/echo.go
quic-go client ---> vpp server
1)修改19行:const addr为 vpp服务端监听的ip:port
2)注释 func main()函数的 28行:go func() { log.Fatal(echoServer()) }()
3)注释 func clientMain()函数的 55行:NextProtos: []string{"quic-echo-example"},
将vpp的tls_test.h中的CERTIFICATE和PRIVATE KEY复制出来,形成文件cert_pem和priv_key,放到example/echo/文件夹下。
vpp client ---> quic-go server中需要使用密钥
1)注释原 func main()函数,重写 func main()函数
func main() {
listener, err := quic.ListenAddr(addr, generateServerTLSConfig(), nil)
if err != nil {
panic(err)
}
for true {
sess, err := listener.Accept(context.Background())
if err != nil {
panic(err)
}
stream, err := sess.AcceptStream(context.Background())
if err != nil {
panic(err)
}
// Echo through the loggingWriter
_, err = io.Copy(loggingWriter{stream}, stream)
if err != nil {
panic(err)
}
}
}
2)增加函数generateServerTLSConfig
func generateServerTLSConfig() *tls.Config {
certs, err := tls.LoadX509KeyPair("cert_pem", "priv_key")
if err != nil {
panic(err)
}
return &tls.Config{
Certificates: []tls.Certificate{certs},
}
}
4. 参考文档