
높은 네트워크 성능과 폭발적인 인터넷 속도를 약속하는 프로그램은 수없이 많습니다. 하지만 이런 프로그램들은 대부분 화려한 인터페이스만 내세울 뿐, 실질적인 효과 없이 지갑만 가볍게 만듭니다. 심지어 일부는 멀웨어일 수도 있습니다. 다행히 비용을 들이지 않고도 네트워크 속도를 개선할 수 있는 방법들이 있습니다. 인터넷 연결을 최적화하는 것은 화려한 응용 프로그램 하나로 해결되는 문제가 아닙니다.
주의: 아래의 모든 설정은 레지스트리 편집을 포함합니다. 따라서 작업 전에 반드시 레지스트리를 백업하고 신중하게 진행해야 합니다. 실수로 값을 삭제하거나 잘못 수정하면 컴퓨터 기능에 심각한 문제가 생길 수 있으므로, 어떠한 수정을 하기 전에 먼저 레지스트리 백업을 완료하는 것이 좋습니다.
1. IRPStackSize
IRPStackSize(I/O Request Packet Stack Size)는 컴퓨터가 동시에 사용할 수 있는 36바이트 수신 버퍼의 개수를 의미합니다. 이 값을 조정하면 컴퓨터가 한 번에 더 많은 데이터를 수신할 수 있습니다. 10Mbps 이상의 인터넷 회선을 사용한다면 확실한 효과를 볼 수 있지만, 그 이하의 회선이라면 체감되는 차이가 거의 없으므로 건너뛰어도 무방합니다.
일반적으로 시스템은 네트워크 스택에 15개의 IRP를 할당합니다. 최대 50까지 설정할 수 있지만, 대부분의 경우 32로 설정하는 것이 가장 효과적입니다. 우선 32부터 시도해 보세요.
레지스트리에서 해당 키의 위치는 다음과 같습니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanman\Server\Parameters

레지스트리 편집기 창 오른쪽 영역에 "IRPStackSize"라는 이름의 DWORD 값을 새로 만들고, 단위를 '십진수'로 변경한 뒤 값 데이터를 32로 입력합니다.
2. SizReqBuf
SizReqBuf는 서버 환경에서 원시 수신 버퍼(raw receive buffer)의 크기를 결정하는 값입니다. 즉, 지연 시간(latency)이 높은 환경에서 무언가를 호스팅할 때 그 성능에 직접적인 영향을 줍니다. 예를 들어 게임 서버를 운영하는데 접속자들이 잦은 랙(lag)을 호소한다면, 이 값을 조정함으로써 랙으로 인한 영향을 줄일 수 있습니다. 웹사이트나 기타 서비스를 호스팅하거나 메신저를 통한 파일 전송 등에도 도움이 됩니다.
시스템은 기본적으로 이 버퍼를 16384바이트로 설정합니다. 대부분의 서버에는 충분한 값이지만, 메모리가 적은 환경에서는 많은 요청을 감당하지 못하는 경우가 생깁니다.
레지스트리에서 해당 키의 위치는 다음과 같습니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanman\Server\Parameters
레지스트리 편집기 창 오른쪽에 "SizReqBuf"라는 DWORD 값을 생성합니다. 물리적 메모리가 512MB를 초과하는 서버라면 값을 17424로 설정하고, 512MB 미만이라면 새 컴퓨터로 교체하는 것을 권장하지만, 당장은 값을 4356으로 낮춰 사용할 수 있습니다.
3. DefaultTTL
TTL(Time to Live)은 패킷이 전달을 시도하는 동안 네트워크에 얼마나 오래 머물 수 있는지를 라우터에 알려주는 값입니다. 이 값이 너무 높으면 컴퓨터가 실패한 패킷의 전달을 기다리느라 불필요하게 오래 소모하게 되어, 결과적으로 네트워크 효율이 떨어집니다.
별도로 값을 지정하지 않으면 Windows는 트랜잭션이 끝날 때까지 128초를 기다립니다. 작업 중에 서버와의 연결이 갑자기 불안정해지면 컴퓨터가 심하게 버벅거리는 원인이 됩니다.
레지스트리에서 해당 키의 위치는 다음과 같습니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
'Parameters' 키 안에 "DefaultTTL"이라는 DWORD 값을 추가하고, 1~255 사이의 값으로 설정합니다. 가장 권장되는 값은 64이며, 패킷을 더 빨리 제거하고 싶다면 더 낮은 값을 지정해도 됩니다.
4. Tcp1323Opts
Tcp1323Opts는 'TCP Extensions for High Performance'로 알려진 RFC 1323을 세 가지 방식으로 활용할 수 있게 해줍니다. 이 값은 타임스탬프(timestamping) 및 네트워크 윈도우 스케일링(window scaling)과 관련이 있으며, TCP 연결이 서버와 수신 윈도우 크기를 협상할 수 있도록 허용하여 최대 1GB까지 수신 윈도우를 지정할 수 있게 합니다.
레지스트리에서 다음 경로로 이동합니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

레지스트리 편집기 오른쪽 창에서 DWORD 형식의 "Tcp1323Opts" 값을 확인합니다. (없다면 새로 생성하세요.) 해당 값을 마우스 오른쪽 버튼으로 클릭한 후 값 데이터를 '1'로 수정합니다.
5. MaxFreeTcbs
MaxFreeTcbs는 다소 애매한 값입니다. 이 값은 물리적 메모리 용량과 대역폭 성능에 따라 컴퓨터가 특정 시점에 처리할 수 있는 활성 TCP 연결의 수를 결정합니다.
값이 너무 높으면 동시에 다수의 연결이 몰릴 때 TCP 트랜잭션을 제대로 처리하지 못할 수 있습니다. 반대로 값이 너무 낮으면 원하는 만큼의 연결을 호스팅하거나 요청할 수 없습니다. 이 설정은 임의로 정해지는 값이므로, 하드웨어나 인터넷 회선을 업그레이드했다면 함께 올려주는 것이 좋습니다.
해당 값의 위치로 이동하려면 레지스트리에서 다음 경로로 이동합니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
"MaxFreeTcbs" 값을 생성 또는 편집하여 65536으로 설정합니다. 사양이 낮은 구형 컴퓨터라면 16000처럼 더 낮은 값을 지정하는 것이 좋습니다.
6. MaxUserPort
응용 프로그램이 Windows에 사용 가능한 포트를 요청하면 운영체제는 1024부터 'MaxUserPort'라고 불리는 지정된 최대값 사이에서 포트 하나를 선택합니다. 컴퓨터의 포트는 인터넷 및 로컬 네트워크를 통해 TCP/UDP 연결을 설정하는 데 사용됩니다.
더 자세히 설명할 수도 있지만, 핵심은 간단합니다. 5000보다는 65534가 훨씬 큰 숫자라는 것을 우리는 모두 압니다. 프로그램이 선택할 수 있는 포트의 범위를 넓혀주면, 몇천 개의 선택지만 있을 때보다 훨씬 빠르게 필요한 포트를 찾을 수 있습니다.
Windows는 기본적으로 이 값을 5000으로 설정하지만, 5000부터 65534 사이의 임의의 값으로 변경할 수 있습니다.
"MaxUserPort"를 추가해야 하는 레지스트리 경로는 다음과 같습니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
"MaxUserPort"라는 이름의 값을 생성하고 65534로 설정하면 끝입니다!
7. GlobalMaxTcpWindowSize
값 이름은 길지만, 10Mbps 이상의 고속 인터넷 회선을 사용하면서 업로드를 자주 한다면 이 값을 수정하는 것을 후회하지 않을 것입니다. 이 값은 컴퓨터가 승인(ACK) 패킷을 받기 전까지 보낼 수 있는 데이터의 양을 나타냅니다.
인터넷으로 작은 데이터 조각들을 보낼 때마다 컴퓨터는 '문제없습니다! 계속 보내세요!'라는 의미의 ACK 패킷을 기다려야 합니다. 지연 시간이나 열악한 피어링 환경 때문에 이러한 대기가 비효율적일 수 있습니다. 따라서 이 값을 편집하면 ACK 패킷을 기다리지 않고 더 많은 데이터를 보낼 수 있습니다.
다음 레지스트리 경로에서 "GlobalMaxTcpWindowSize"라는 DWORD 값을 생성합니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
값을 65535로 설정하면 완료됩니다! 이렇게 하면 컴퓨터가 승인을 기다리지 않고 64KB까지 데이터를 보낼 수 있습니다. 이 설정을 적용한 후 오히려 네트워크 속도가 느려졌다면 해당 값을 삭제하거나, 값을 131072로 올려 128KB로 조금 더 높여 보세요.
8. MTU
MTU(Maximum Transmission Unit)는 다운로드 속도보다 업로드 속도에 더 큰 영향을 미치지만, 한 번에 더 큰 데이터 덩어리를 전송하도록 보장하는 업로드 최적화 역시 중요합니다. 이 값은 보통 네트워크 카드가 자동으로 설정하지만, 인터넷 회선 속도에 맞게 직접 조정할 수 있습니다.
이 값을 설정하는 과정은 까다롭습니다. 먼저 자신에게 최적인 MTU 값을 찾아야 하는데, 이는 인터넷 회선 속도 제한으로 인한 패킷 조각화(fragmentation)가 발생하지 않는 값입니다.
명령 프롬프트를 열고 다음 명령어를 입력하여 확인할 수 있습니다.
ping -f -l <mtu> <your gateway>
"<mtu>" 부분은 88부터 4294967295 사이의 숫자로, "<your gateway>" 부분은 네트워크 어댑터가 인터넷에 연결할 때 사용하는 게이트웨이 주소로 바꿔 입력합니다. 게이트웨이를 모른다면 명령줄에 ipconfig를 입력하고, 인터넷에 사용 중인 네트워크 어댑터 항목 아래의 '기본 게이트웨이(Default Gateway)' 값을 확인하면 됩니다.

핑(ping)을 실행했을 때 응답에 'Packet needs to be fragmented but DF set.'라는 메시지가 나타나면, 지정한 숫자가 너무 크다는 뜻입니다.
패킷 조각화가 발생하지 않는 범위 내에서 가능한 한 가장 큰 숫자를 선택하면 그것이 최적의 MTU 값입니다.
이제 이 값을 적용하기 위해 레지스트리에서 다음 경로로 이동합니다.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\Interface ID
위 이미지는 필자가 자신의 주 네트워크 인터페이스를 찾은 방법의 예시입니다. 특히 컴퓨터를 공유기(라우터)로 사용하는 경우 여러 네트워크 인터페이스가 설치되어 있을 수 있습니다.
"Interface ID" 부분은 사용 중인 네트워크 인터페이스의 GUID로 교체합니다. 'Interfaces' 아래에 표시되는 여러 GUID를 하나씩 살펴보며, 레지스트리 편집기 창 오른쪽의 정보가 인터넷에 연결하는 데 사용하는 네트워크 인터페이스의 세부 정보와 일치하는지 확인하세요.
해당 인터페이스에 도달했다면 "MTU"라는 이름의 DWORD 값을 추가하고, 게이트웨이에 핑을 보낼 때 확인한 숫자로 설정합니다. 이것만으로도 상당한 개선 효과를 볼 수 있습니다.
위의 레지스트리 최적화 방법들만으로도 Windows 10의 네트워크 속도를 높이기에 충분합니다. 레지스트리 오류로 곤란을 겪고 있다면 관련 해결 방법 목록을 참고하고, Windows 10 레지스트리 키의 소유권을 완전히 가져오는 방법을 안내하는 가이드도 함께 확인해 보세요.