定義
kcp協議是傳輸層的一個具有可靠性的傳輸層ARQ協議。
它的設計是為了解決在網絡擁堵情況下tcp協議的網絡速度慢的問題。
kcp力求在保證可靠性的情況下提高傳輸速度。
kcp協議的關注點主要在控制數據的可靠性和提高傳輸速度上面,因此kcp沒有規定下層傳輸協議,一般用udp作為下層傳輸協議,kcp層協議的數據包在udp數據報文的基礎上增加控制頭。當用戶數據很大,大于一個udp包能承擔的范圍時(大于mss),kcp會將用戶數據分片存儲在多個kcp包中。因此每個kcp包稱為一個分片。
其實kcp是在應用層上進行了一次拆包解包的過程,你可以把他作為tcp基礎上拆解包的邏輯使用,也可以作為udp基礎上的拆解包使用。至于kcp的一些簡單基礎的概念,我這里就不贅述了,大家可以在github上看下skywind的readme文檔,這里我只說下kcp的重傳機制,擁塞窗口。
KCP重傳機制
為了提供可靠性,kcp采用了重傳機制。
為實現重傳機制,kcp為每個分片分配一個唯一標識,接收方收到一個包后告知發送方接到的包的序號,發送方接到確認后再繼續發送。而如果發送方在一定時間內(超時重傳時間)沒有接到確認,就說明數據包丟失了,發送方需要重傳丟失的數據包,所以發送方會把待確認的數據緩存起來,方便重傳。 停等的重傳機制發送一個包后必須等待確認后再發下一個包,傳輸速度較慢,所以為了提高發送速度,發送方可以不必再每發送一個包后就進行等待確認,而是可以發送多個包出去,然后等待接收方一一確認。又由于接收方不可能同時處理無限多的數據,因此需要