QUIC協議試觸 節點通訊協議參考

2021-10-21 08:38:07 字數 2787 閱讀 3924

從某歌**了解到,quic協議可能會成為未來的http3協議的方向,這是乙個使用udp協議來達到tcp的效果,甚至某些方面更優,但是這傢伙是以udp為基礎的,還是會存在udp的一些不足,比如:安全問題,也就是反射攻擊,即偽造原位址;還有就是這些年效能的優化提公升都幾乎針對 tcp ,使得 udp 效能沒有啥改進。當然隨著 quic3 的發布,相信後續應該會有相對的投入。

想利用該協議來實現節點間資料通訊,顧實驗一番,下面有啥錯誤的地方,一定要指出來哦,感謝大家:

我是使用了這個go庫來玩的:github.com/lucas-clemente/quic-go

const saddr =

"localhost:9999"

func

quic_server_run()

bg := context.

background()

cancel, cancelfunc := context.

withcancel

(bg)

defer

cancelfunc()

forelse}}

func

dealsession

(ctx context.context, sess quic.session)

else

else

}else}}

result.

reset()

}}}// setup a bare-bones tls config for the server

func

generatetlsconfig()

*tls.config

template := x509.certificate

certder, err := x509.

createcertificate

(rand.reader,

&template,

&template,

&key.publickey, key)

if err !=

nil keypem := pem.

encodetomemory

(&pem.block

) certpem := pem.

encodetomemory

(&pem.block

) tlscert, err := tls.

x509keypair

(certpem, keypem)

if err !=

nilreturn

&tls.config

, nextprotos:

string

}}

const addr =

"localhost:9999"

const message =

"ccccccccccccccccccccccd"

func

quic_client_run()

},nil)

if err !=

nil bg := context.

background()

cancel, cancelfunc := context.

withcancel

(bg)

defer

cancelfunc()

stream, err := session.

openstreamsync

(cancel)

if err !=

nil i :=0go

func()

result.

write

(data2[

0:n]

) scanner := bufio.

newscanner

(result)

scanner.

split

(codec.packetsplitfunc)

for scanner.

scan()

}}()

for i++

}}

package codec

const

(// 包頭魔術

packethead uint32

=0x123456

)func

packetsplitfunc

(data [

]byte

, ateof bool

)(advance int

, token [

]byte

, err error

) pl :=

int(l)+6

if pl <=

len(data)

}return

}func

encode

(data [

]byte

)*bytes.buffer

不得不說,udp還是一如既往的塊

看一下效果,我執行了客戶端5秒鐘,一下子就傳輸了5w條資料了

同樣使用tcp協議來測試,傳送5s:

基於udp的quic傳輸資料效果確實不錯;

quic 協議的主要目的,是為了整合 tcp 協議的可靠性和 udp 協議的速度和效率。

通訊協議TCP IP協議棧

注 本文內容來自大神,作為學習筆記記錄在此。如有雷同,敬請諒解 首先普及一些基本概念 rfc tcp ip協議的標準文件。埠號 port tcp,udp上的邏輯號碼 而不是硬體埠。tcp ip協議棧主要分為四層 應用層 傳輸層 網路層 資料鏈路層 每層都有相應的協議 所謂的協議 就是雙方進行資料傳輸...

beanstalk通訊協議

out of memoryrn 表示服務端不能為 job 分配足夠的記憶體。客戶 端應該稍後重試。internal errorrn 表示服務端的 bug。這種情況不應該發生。如果 發生了,可以報給 bad formatrn 表示客戶端傳送了乙個錯誤格式的命令列。可能呢 導致這種錯誤發生的情況有 行沒...

USB通訊協議

usb2.0最高傳輸速度可達480mb s。一 四種傳輸方式 a 控制傳輸方式 配置和控制主機到usb裝置的資料傳輸方式和型別。b 中斷傳輸方式 資料量小,需被及時處理,實時性好,主要用於鍵盤 滑鼠等。c 同步 等時傳輸方式 用於連線需要連續傳輸資料且對資料正確性要求不高,而對時間極為敏感的外部裝置...