RUDP: Reliable User Datagram Protocol
特徴
- 到達保証, 順番保証
- 暗号化
利点
パケロス対策
- 通信速度に対してパケットの大きさの影響度は低い為、複数回分のパケットを結合して送信
IP変化対策
- Wi-Fi, モバイル回線の切り替え時等
- 要本人保証(ex. 暗号化)
サーバ処理負荷
システムコールによるパケット受信処理を大量に呼び出す必要あり
| function | ||
|---|---|---|
| TCP/IP | recv() | |
| UDP | recvmmsg() | 早い |
実装例
struct HeaderRUDP {
uint16_t session_id;
uint8_t flg;
uint8_t channel_no;
uint16_t sequence_no;
uint16_t ack_no;
uint64_t hash;
byte data[0];
};
| uint16_t | session_id | 接続管理用番号 |
| uint8_t | flg | パケット種類番号 |
| uint8_t | channel_no | 仮想接続番号 |
| uint16_t | sequence_no | パケット送信番号 |
| uint16_t | ack_no | 受信完了パケット番号 |
| uint64_t | hash | |
| byte | data[0] |
session_idを利用することで送信元IPに依らず通信可能- 仮想的に複数接続を持たせることで、チャット機能, ゲーム機能のパケットが干渉することを回避する
暗号化
暗号鍵, channel_no, sequence_noにて暗号化
Question
- 暗号鍵の交換
reference
c/c++
python
最終更新日:
August 14, 2023
作成日: August 14, 2023
作成日: August 14, 2023