이론/기초

네트워크 - 레이턴시 및 신뢰성

tsyang 2023. 9. 1. 01:42

레이턴시


레이턴시 원인

네트워크가 아닌 레이턴시로 입력 샘플링, 랜더링, 인풋렉 등등이 있을 수 있다.

 

네트워크에 해당하는 레이턴시에는 다음 지연들이 포함된다.

  1. 처리 지연 : 네트워크 주소 변환이나 암호화
    => 요즘 라우터 성능이 좋아서 크게 신경쓰지 않아도..
  2. 전송 지연 : 물리적 매체에 비트를 기록하는 시간.
    => 서버의 물리적 위치 조정이나, 패킷을 가능한 크게 만들어서 헤더 비중이 적게 만들어 개선할 수 있음.
  3. 큐잉 지연 : 라우터의 처리 용량보다 많은 패킷이 도착했을 큐잉해놓고 나중에 처리. 이때 대기열에 머무르는 시간
    => 적은 수의 큰 패킷을 보내는게 유리하다.
  4. 전파 지연 : 매체를 타고 전파되는데 걸리는 시간.
    => 일단 물리적 거리를 가깝게 할 수 있음. 그러나 라우터등의 배치에 따라 꼭 가깝다고 좋지는 않을 수 있음.

아무튼 이거 합친게 RTT에 포함된다 볼 수 있다.

 

 

.

 

지터링 

RTT의 기댓값을 측정했다면 레이턴시 대응에 활용할 수 있다. 그러나 RTT 항상 일정하지 않을 있는데, RTT 기대값과 편차를 지터링(jittering)이라 한다.

 

지터링은 RTT 대응 알고리즘에 부정적인 영향, 심지어는 패킷 도착 순서가 바뀔수도 있다.

 

지터링을 줄이는 기법은 레이턴시를 줄이는 기법과 매우 유사하다.

 

 

.

 

 

신뢰성


 

패킷 손실 

패킷 손실의 원인으로는 다음이 있을 수 있다.

  1. 물리 매체에 문제 발생 : 외부에서 전자기적 간섭이 있으면 데이터에 손상 가능, 이러면 링크계층에서 체크섬 검사하다가 손상을 발견하고, 프레임을 폐기함.
  2. 링크 계층 문제 : 링크 계층 채널이 꽉 차 프레임 일부를 소각해버릴 때.
  3. 네트워크 계층 문제 : 라우터의 대기열이 꽉 찼을 때, 새로 도착한 패킷이나 원래 있던 패킷을 버린다. 이 때, TCP보다는 UDP를 먼저 버리는데 TCP 패킷은 어쩌피 다시 요청이 올거라 폐기해도 의미 없기 때문이다.

 

 

.

 

TCP vs UDP

TCP 신뢰성에 의존할건지, UDP 신뢰성을 직접 구축할 것인지 선택하는 게 주 포인트다.

 

 

TCP 

  • 신뢰성 : 알아서 신뢰성이 유지된다는 장점이 있다.
  • 지연 : 신뢰성때문에 오히려 중요도 높은 애가 낮은 애를 기다리느라 지연된다.
  • 여러 스트림(실행흐름)이 간섭 : 예를 들면 채팅스트림과, 게임스트림은 서로 노상관이라 순서 상관 없는데, 서로 기다리느라 지연이 발생함
  • 오래된 게임 상태 전송 : 패킷이 누락되면 서버는 패킷을 다시 보내는데, 이때 오래된걸 다시 받아서 클라 입장에서 옛날 정보를 볼 수 있음. FPS에서는 치명적일 수 있다.
  • 네이글 알고리즘 때문에 느리게 보내기도 함. 그래서 게임에서는 보통 네이글 알고리즘을 비활성화 한다. (네이글은 패킷을 0.5초정도 모았다 보냄) 그러나 네이글은 패킷 수를 줄여주는 알고리즘인데 이런 장점은 포기해야 한다.
  • 리소스도 많이 먹음

 

UDP

  • 신뢰성은 없지만 알아서 필요에 맞게 구축할 수 있다. 그만큼 개발비용도 크다.
  • 라우터에서 UDP패킷을 먼저 소각시키기 때문에 패킷 손실 확률이 높다.
  • 신뢰성을 구축하기 위해서 패킷 배달 통지를 구현한다. 패킷에 보낸 순서에 대한 데이터를 실어 보내서 순서와 손실등을 판단할 수 있다. 손실된 패킷을 재전송 할 때 최신의 상태를 담아 줄 수 있기 때문에 TCP보다 유리한 점이 있다.