더북(TheBook)

패킷의 크기를 최대 세그먼트 길이에 가능한 한 가깝게 맞추어 네트워크 혼잡을 줄이는 기법도 있다. 각 패킷에 40바이트 헤더가 붙어야 하므로, 작은 세그먼트를 여러 개 보내는 것보다 큰 세그먼트 하나로 합쳐 보내는 편이 훨씬 효율적이다. 합쳐 보내려면 TCP 모듈에 송신 데이터용 버퍼를 설치해서 윗단 계층에서 넘겨주는 데이터를 쌓아둘 필요가 있다. 여러 운영체제에서 네이글 알고리즘(Nagle’s algorithm)을 적용하여 세그먼트를 보내기 전 데이터를 쌓아두도록 규정한다. 알고리즘을 간략히 설명하면 이미 전송 중인(아직 ACK를 받지 못한) 데이터가 있을 때 이후 보낼 예정인 데이터는 쌓아두는데, 쌓인 양이 한계치를 넘어서면 그때 세그먼트로 만들어 보낸다. 이때 한계치는 최대 세그먼트 길이나 혼잡 제어 윈도 중 작은 것으로 한다.23

Tip

네이글 알고리즘은 TCP를 전송 계층 프로토콜로 하는 게임에 있어서는 그다지 달갑지 않은 존재이다. 대역폭은 절약해 주지만, 데이터를 보내는데 지연이 훨씬 커지기 때문이다. 게임의 경우 서버에 실시간으로 짧은 업데이트를 보내야 하는데, 최대 세그먼트 길이가 다 찰 때까지 몇 프레임씩 기다려야 하는 경우도 생긴다. 네트워크 상태는 양호한데 플레이어가 느끼는 랙이 심해서 원인을 찾아보았더니 네이글 알고리즘 때문이더라, 하는 경우가 많다는 뜻이다. 이 때문에 대부분 TCP 모듈엔 혼잡 제어를 아예 끄도록 하는 옵션이 마련되어 있다.

 


 

23  역주 부연하자면 최대 세그먼트 길이를 기준으로 데이터를 쌓아두는데, 그 크기가 혼잡 제어 임계치를 넘지 못하도록 한다는 뜻이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.