더북(TheBook)

Tip

IP 패킷 분열을 이용하면 거대한 패킷을 보내는 것이 가능하긴 하지만 두 가지 비효율적인 면이 있다. 첫째, 네트워크로 실제 보내는 데이터양이 증가한다. 표 2-11의 3,020바이트짜리 패킷은 두 개의 1,500바이트 패킷과 60바이트 패킷으로 쪼개지는데, 이를 합치면 3,060바이트가 된다. 이 정도가 당장 엄청난 양은 아니지만, 쌓이면 꽤 부담이 될 수 있다. 둘째, 조각 중 하나라도 잃어버리면 다른 조각 전체를 몽땅 버려야 한다. 조각 수가 많은 커다란 패킷일수록 잃어버릴 확률이 높다. 이런 이유로, 대개의 경우 아예 분열 기능 자체를 쓰지 않는 것이 좋다. 대신 IP 패킷의 크기를 링크 계층 MTU보다 작게 잡는 편이 낫다. 하지만 그게 쉬운 일은 아니다. 호스트 사이에 다양한 종류의 링크 계층 프로토콜이 놓여 있기 때문이다. 패킷이 뉴욕에서 일본으로 간다고 상상해 보자. 패킷이 거쳐 가는 링크 계층 중 적어도 하나는 이더넷일 테니, 게임 설계 시 전체 패킷 경로의 최소 MTU를 1,500바이트로 잡아야 한다. 이 1,500바이트를 전부 IP 페이로드에 쓸 수 있는 것도 아니고 20바이트는 IP 헤더에, 또 몇 바이트는 VPN이나 IPSec 등 여타 프로토콜이 필요로하는 데이터와 나눠 써야 한다. 그러므로 IP 페이로드는 1,300바이트 내외로 잡아야 안전하다.

기왕 그렇다면 패킷 크기 한도를 아예 작게 잡아서, 한 100바이트 정도로 잡아버리면 어떨까. 1,500바이트 정도가 쪼개지지 않고 통과한다면, 100바이트라면 훨씬 더 안전하지 않겠냐는 것이다. 확실히 그렇긴 하지만 패킷마다 20바이트 헤더가 필요하다는 점을 떠올려보자. 최대 100바이트 길이로 패킷을 보내는 게임은 대역폭의 20%를 오로지 IP 헤더에만 낭비하는 셈으로 매우 비효율적이다. 반면 1,500바이트 중 20바이트는 대역폭의 1.3%로, 앞서 20%보다는 훨씬 효율이 좋다. 이 같은 이유로 최소 MTU를 1500 정도로 잡는 것이 합리적이라 하겠는데, 일단 이렇게 정했다면 헤더를 절약하기 위해 패킷 크기를 1500에 가능한 한 가깝게 맞추어야 할 것이다.

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