NAT는 여러 개인 IPv4 주소에서 하나의 공용 IPv4 주소를 어떻게 공유합니까?


10

나는 그것이 매우 고전적인 질문이라고 생각하지만 배경 지식이 있다고 생각했는데 더 이상 웹에서 올바르게 검색하고 이해하기에 충분한 어휘가 없습니다.

192.168.0.1 (IP.1) 및 192.168.0.2 (IP.2)의 홈 네트워크를 가지고 있고 카운터 스트라이크에서 정확히 같은 외부 서버를 때리고 있다고 가정 해 봅시다.

홈 라우터가 패킷을 IP.1로 어떻게 알 수 있습니까? 나는 종종 NAT와 xxx.xxx/y 주소로 내용을 읽습니다. ** TCP / IP 스택의 / y 부분은 어디에 있습니까?

이를 위해 반드시 NAT가 필요합니까? Wikipedia 기사에서 이해 한 바는 일부 컴퓨터가 꺼져있을 때 NAT가 IP 주소를 최적화하도록 만들어 졌다는 것입니다. 또한 하나의 공용 IP로 5 개의 장치를 연결할 수 있습니까?


일대 다가 귀하의 질문에 대답해야합니다. 또한 홈 네트워킹 및 초급 교육 질문은이 사이트에 가장 적합하지 않습니다.
크레이그 콘스탄틴

답변:


14

(다음은 NAT 이야기와 관련이 없기 때문에 DNS 조회 나 레이어 2 동작을 무시합니다.)

모든 TCP 연결은 네 부분으로 구성된 튜플입니다.

<source IP> <source port> <destination IP> <destination port>

한마디로 : 대상 IP는 패킷을 올바른 시스템으로 가져 오는 데 사용되고 대상 포트는 해당 시스템의 패킷을 올바른 프로그램 / 세션으로 가져 오는 데 사용됩니다. 소스 IP는 회신을 보낼 위치를 파악하는 데 사용됩니다. 소스 포트도 마찬가지입니다. 응답이 전송되면 소스와 대상이 간단히 교체됩니다.

NAT없이 두 대의 컴퓨터로 시작해 봅시다.

  • 컴퓨터에 IP가 있습니다 1.1.1.1
  • 웹 서버에는 IP가 있습니다 3.3.3.3
  • HTTP의 표준 포트는 80

컴퓨터가 웹 페이지를 요청하면 먼저 임의 범위 (1024-65535)에서 사용되지 않는 임의의 포트 번호를 선택해야합니다. 를 선택합시다 2345. 그러면 다음 순서로 컴퓨터가 패킷을 전송합니다 : source IP 1.1.1.1, source port 2345, destination IP 3.3.3.3, destination port 80. 패킷이 웹 서버에 도착하면 자체 IP 및 포트 80가 표시되므로 웹 페이지에 대한 요청임을 알 수 있습니다. 그런 다음 웹 서버는 소스 IP 3.3.3.3, 소스 포트 80, 대상 IP 1.1.1.1, 대상 포트를 사용 하여 웹 페이지를 패킷으로 다시 보냅니다 2345. 컴퓨터는 이러한 패킷을 수신하고 portnumber 때문에 요청 된 웹 페이지를 알고 2345있습니다.

이 포트 조합은 종종 같은 기록됩니다 1.1.1.1:23453.3.3.3:80.

이제 인터넷의 컴퓨터 수는 사용 가능한 IPv4 주소 수보다 훨씬 많습니다. 주소 공간을 보존하기 위해 주소 공유에 자유롭게 사용할 수있는 일련의 개인 주소 범위가 도입되었습니다. 이러한 범위는 RFC1918이라고하며 다음과 같습니다.

  • 192.168.0.0-192.168.255.255
  • 172.16.0.0-172.31.255.255
  • 10.0.0.0-10.255.255.255

이러한 주소는 인터넷 라우팅 테이블에 없으므로 인터넷 백본에서 이러한 범위의 대상이있는 패킷을 보내면 단순히 삭제됩니다. 수백만의 사람들이 같은 주소를 사용하기 때문입니다. 이 주소는 인터넷에 유용한 것으로 변환해야합니다. 네트워크 주소 변환은 다음과 같습니다.

두 대의 컴퓨터가 있습니다 :

  • A : 192.168.0.1와 B :192.168.0.2
  • 해당 게이트웨이의 공개 IP는 1.1.1.1입니다.
  • 우리는 동일한 웹 서버를 유지합니다.
  • 두 컴퓨터 모두 같은 서버에서 같은 웹 페이지를 원합니다.

하자 말을 : 우선 두 컴퓨터는 임의의 포트를 선택 192.168.0.1:2345하고 192.168.0.2:5432.

컴퓨터 A는 source 192.168.0.1:2345와 destination 과 함께 패킷을 보냅니다 3.3.3.3:80. 게이트웨이는이 패킷을 소스 1.1.1.1:2345대상으로 변환 3.3.3.3:80하고이 조합에 대한 응답은로 이동 함을 기억합니다 192.168.0.1. 이 소스에 회신 접수에 때, 3.3.3.3:80와 대상을 1.1.1.1:2345, 그것은 소스로 변환합니다 3.3.3.3:80및 대상 192.168.0.1:2345과의 패킷을 전송합니다.

컴퓨터 B는 source 192.168.0.2:5432와 destination 과 함께 패킷을 보냅니다 3.3.3.3:80. 게이트웨이는이 패킷을 소스 1.1.1.1:5432대상으로 변환 3.3.3.3:80하고이 조합에 대한 응답은로 이동 함을 기억합니다 192.168.0.2. 이 소스에 회신 접수에 때, 3.3.3.3:80와 대상을 1.1.1.1:5432, 그것은 소스로 변환합니다 3.3.3.3:80및 대상 192.168.0.2:5432과의 패킷을 전송합니다.

두 컴퓨터가 동일한 소스 포트 번호를 선택하면 게이트웨이는 다른 임의의 임의 소스 포트 번호를 선택하고 포트 번호도 변환해야합니다. 이를 PAT (Port Address Translation)라고도합니다. 이것은 기본적으로 NAT의 하위 집합입니다.

이 모든 것에 몇 가지 구현이 있습니다. 게이트웨이는 단순히 "컴퓨터 X가 소스 포트 Y를 사용함"을 기억하고 포트 Y가있는 모든 것을 컴퓨터 X로 전달합니다. 컴퓨터 X가 소스 포트 Y와 대상 Z를 사용하고 포트 Z에서 포트 Y로만 아무것도 전달한다는 것을 기억할 수 있습니다. 또는 전체 튜플을 기억하고 전체 소스 / 대상 IP 및 포트와 일치하는 트래픽을 컴퓨터 X로만 보내는 옵션이 있습니다.


감사. 모든 클라이언트가 포트 80을 사용하여 다른 포트 80으로 보낼 것이라고 생각했습니다. 많은 비전문가도 마찬가지라고 생각합니다.
Nicolas Zozol 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.