이론/기초
네트워크 - 레이턴시 및 신뢰성
tsyang
2023. 9. 1. 01:42
레이턴시
레이턴시 원인
네트워크가 아닌 레이턴시로 입력 샘플링, 랜더링, 인풋렉 등등이 있을 수 있다.
네트워크에 해당하는 레이턴시에는 다음 지연들이 포함된다.
- 처리 지연 : 네트워크 주소 변환이나 암호화
=> 요즘 라우터 성능이 좋아서 크게 신경쓰지 않아도.. - 전송 지연 : 물리적 매체에 비트를 기록하는 시간.
=> 서버의 물리적 위치 조정이나, 패킷을 가능한 크게 만들어서 헤더 비중이 적게 만들어 개선할 수 있음. - 큐잉 지연 : 라우터의 처리 용량보다 많은 패킷이 도착했을 때 큐잉해놓고 나중에 처리. 이때 대기열에 머무르는 시간
=> 적은 수의 큰 패킷을 보내는게 유리하다. - 전파 지연 : 매체를 타고 전파되는데 걸리는 시간.
=> 일단 물리적 거리를 가깝게 할 수 있음. 그러나 라우터등의 배치에 따라 꼭 가깝다고 좋지는 않을 수 있음.
아무튼 이거 다 합친게 RTT에 포함된다 볼 수 있다.
.
지터링
RTT의 기댓값을 측정했다면 레이턴시 대응에 활용할 수 있다. 그러나 RTT가 항상 일정하지 않을 수 있는데, RTT 기대값과 의 편차를 지터링(jittering)이라 한다.
지터링은 RTT 대응 알고리즘에 부정적인 영향, 심지어는 패킷 도착 순서가 바뀔수도 있다.
지터링을 줄이는 기법은 레이턴시를 줄이는 기법과 매우 유사하다.
.
신뢰성
패킷 손실
패킷 손실의 원인으로는 다음이 있을 수 있다.
- 물리 매체에 문제 발생 : 외부에서 전자기적 간섭이 있으면 데이터에 손상 가능, 이러면 링크계층에서 체크섬 검사하다가 손상을 발견하고, 프레임을 폐기함.
- 링크 계층 문제 : 링크 계층 채널이 꽉 차 프레임 일부를 소각해버릴 때.
- 네트워크 계층 문제 : 라우터의 대기열이 꽉 찼을 때, 새로 도착한 패킷이나 원래 있던 패킷을 버린다. 이 때, TCP보다는 UDP를 먼저 버리는데 TCP 패킷은 어쩌피 다시 요청이 올거라 폐기해도 의미 없기 때문이다.
.
TCP vs UDP
TCP의 신뢰성에 의존할건지, UDP에 신뢰성을 직접 구축할 것인지 선택하는 게 주 포인트다.
TCP
- 신뢰성 : 알아서 신뢰성이 유지된다는 장점이 있다.
- 지연 : 신뢰성때문에 오히려 중요도 높은 애가 낮은 애를 기다리느라 지연된다.
- 여러 스트림(실행흐름)이 간섭 : 예를 들면 채팅스트림과, 게임스트림은 서로 노상관이라 순서 상관 없는데, 서로 기다리느라 지연이 발생함
- 오래된 게임 상태 전송 : 패킷이 누락되면 서버는 패킷을 다시 보내는데, 이때 오래된걸 다시 받아서 클라 입장에서 옛날 정보를 볼 수 있음. FPS에서는 치명적일 수 있다.
- 네이글 알고리즘 때문에 느리게 보내기도 함. 그래서 게임에서는 보통 네이글 알고리즘을 비활성화 한다. (네이글은 패킷을 0.5초정도 모았다 보냄) 그러나 네이글은 패킷 수를 줄여주는 알고리즘인데 이런 장점은 포기해야 한다.
- 리소스도 많이 먹음
UDP
- 신뢰성은 없지만 알아서 필요에 맞게 구축할 수 있다. 그만큼 개발비용도 크다.
- 라우터에서 UDP패킷을 먼저 소각시키기 때문에 패킷 손실 확률이 높다.
- 신뢰성을 구축하기 위해서 패킷 배달 통지를 구현한다. 패킷에 보낸 순서에 대한 데이터를 실어 보내서 순서와 손실등을 판단할 수 있다. 손실된 패킷을 재전송 할 때 최신의 상태를 담아 줄 수 있기 때문에 TCP보다 유리한 점이 있다.