(다음은 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:2345
및 3.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로만 보내는 옵션이 있습니다.