zhaoJian의 기술 노트

Ubuntu Fedora CentOS 등 Linux 시스템에서 일부 사이트만 접속되는 문제 해결 방법

기술 약 1313자 · 4분 소요 - 조회

먼저 이 문제의 배경 지식을 소개하겠습니다.

일반적인 TCP 데이터 패킷에는 최대 윈도우 크기가 64KB인 윈도우 필드가 있습니다. 인터넷 초기에는 대부분의 시스템이 이보다 큰 데이터를 처리할 능력이 없었기 때문에 이 크기로 충분했지만, 현재의 접속 대역폭 응용 프로그램에는 너무 작습니다.

이 문제를 해결하기 위해 1992년에 윈도우 스케일링이라는 솔루션이 제안되었습니다. 이는 8비트 스케일 팩터를 포함하는 추가 TCP 윈도우 확장 옵션을 제공합니다. 이 옵션의 값은 윈도우 크기 값을 몇 비트 이동시켜 윈도우가 얼마나 커야 하는지를 지정합니다. 예를 들어, 스케일 팩터가 5로 설정되면 윈도우 크기는 5비트 이동하거나 32를 곱해야 합니다.

윈도우 확장 옵션은 TCP의 윈도우 정의를 16비트에서 32비트로 증가시킵니다. 이는 TCP 헤더를 수정하여 구현되는 것이 아니라, TCP 헤더는 여전히 16비트를 사용하며, 16비트를 확장하는 옵션을 정의하여 완성됩니다.

2.6.16 및 이전 커널에서는 기본 스케일 팩터가 0이므로 윈도우 크기가 증가하지 않았습니다. 2.6.17 커널에서는 스케일 팩터가 7로 설정되었습니다. 이상적으로는 문제가 없어야 하지만, 실제로 일부 “고장난” 라우터는 윈도우 스케일링 TCP 옵션을 다시 작성하여 스케일 팩터를 0으로 설정하지만 실제 처리 능력 옵션은 변경하지 않습니다.

본질적으로 이는 2.6.17 이상의 커널을 사용하는 시스템에서 일부 웹사이트에 연결할 수 없다는 것을 의미합니다. 커널 개발자의 입장에서는 해당 라우터가 고장났으므로 교체해야 한다고 생각할 것입니다. 실제로 이러한 라우터는 수리 또는 교체되기 전까지 수년 동안 계속 사용될 수 있습니다.

이 문제를 해결하는 한 가지 방법은 Linux 커널의 윈도우 스케일링 옵션을 재설정하는 것입니다. 이것이 고장난 라우터를 수정하지는 않지만, 윈도우 스케일링 문제의 영향을 받고 있다면 이 방법으로 시스템을 원격 사이트에 연결할 수 있습니다.

해결 방법은 /etc/sysctl.conf 파일을 편집하여 다음 줄을 추가하는 것입니다:

net.ipv4.tcp_window_scaling = 0

앞의 #을 제거하세요

이렇게 하면 윈도우 스케일링 기능이 완전히 비활성화되어 이전에 연결할 수 없었던 일부 사이트에 연결할 수 있습니다. 옳든 그르든 커널 개발자들은 이 변경 사항을 되돌리기를 거부하므로, 이 옵션을 사용하면 자신의 윈도우 스케일링 기능을 비활성화하여 2.6.17 이전의 기본 설정으로 되돌릴 수 있을 뿐만 아니라, 도달할 수 없는 사이트에 연결하여 고장난 라우터를 찾아 교체해야 한다고 확신시킬 수 있습니다.

공유:

댓글