게임서버 테크트리
밤이 늦었어요.
옛날 게임 서버들은 tcp/ip 소켓 통신을 사용한 것 같은데요.
서버 아이피를 알아내서 ddos공격을 하는 경우가 있어서 클라우드 플레어를 걸어서 에지 서버로 통신을 했었어요.
http(tcp/ip) 기법 client -> edge -> server
http2(tcp/ip) 기법 client -> edge -> server
WebTransport(udp/ip) 기법 client -> edge -> server
quic이 등장하고 http3 도입을 분석하였는데 aspnetcore는 아직 unreliable 확장을 지원하지 않네요!
libmsquic은 c++로 구현되었고 이미 unreliable 데이터 전송을 지원하는 것 같은데 닷넷 System.Net.Quic 모듈에서 지원하지 않는 상태이어요. 소스를 뜯어보면 알 수 있어요. 대충 래핑되어 있어요.
코드를 적당하게 고쳐서 하는 사람들이 있는데요. udp 패킷이 unreliable(비신뢰성)인데 스트림 통신을 하지 않으므로 QuicConnection부분에 추가 구현되어 있어요.
[1] Support QuicTransport (from WebTransport) Protocol · Issue #1139 · microsoft/msquic · GitHub
[2] QUIC Datagram API · Issue #53533 · dotnet/runtime · GitHub
이미 ms 게임 개발 킷에서 quic을 사용 중인데요. 이건 빼야겠어요.
[3] MsQuic - Microsoft Game Development Kit | Microsoft Learn
애초부터 다른 WebTransport 모듈을 미들웨어로 넣어서 처리할 수도 있어요. 의존성과 용량이 커지는 것은 아주 싫어하여서 마지막 수단으로 보아요.
[4] GitHub - BiagioFesta/wtransport: Async-friendly WebTransport implementation in Rust
