
NAT 테이블을 알고 있습니다. 개인 근거리 통신망에 있는 두 클라이언트가 동일한 포트에서 정확히 동일한 리소스를 다운로드하려는 경우 어떻게 되는지 알고 싶습니다. 즉, 서버에서 패킷이 오면 라우터는 어떤 클라이언트가 이 패킷을 받아야 하는지 어떻게 결정할 수 있습니까?
내가 틀리지 않았다면 서버에서 들어오는 패킷에는 공용이고 둘 다 동일한 라우터의 대상 IP 주소가 있으며 이 경우에도 동일한 대상 포트 번호도 있습니다.
라우터나 서버에 이를 감지하는 메커니즘이 있습니까? 아니면 애초에 이런 행동이 가능할까요?
다음과 같은 질문을 검색했습니다.이것, 이는 포트가 사용 중이기 때문에 오류가 발생한다는 것은 의미가 있지만 두 개의 별도 시스템에 대해 묻고 있습니다.
업데이트 :의견을 통해 제가 충분히 명확하지 않다는 것을 깨달았으므로 예를 들어 다시 말씀드리겠습니다.
나는 장치의 "소스" 포트에만 관심이 있습니다. 두 대의 랩톱( 192.168.2.10
및 ) 이 있고 192.168.2.11
둘 다 인터넷 어딘가에 있는 동일한 서버에서 동일한 파일을 다운로드하고 있다고 가정합니다. 각각에는 임의의 포트를 생성하는 운영 체제가 있으므로 소스 IP와 소스 포트는 다음 192.168.2.10:6321
과 같습니다 192.168.2.11:7132
. NAT에서 라우터는 랩톱의 포트와 함께 (공용) IP 주소를 설정하므로 홈 라우터의 공용 IP 주소가 이면 이 두 패키지는 각각 소스 IP와 소스 포트 를 65.82.23.32
얻습니다 65.82.23.32:6321
.65.82.23.32:7132
이제 응답이 돌아오면 라우터는 포트 번호를 통해 어떤 패킷이 어떤 노트북에 대한 것인지 알아낼 수 있습니다. 여태까지는 그런대로 잘됐다. 하지만 실수로 또는 의도적으로 두 개의 랩톱이 정확히 동일한 소스 포트를 생성하면 어떻게 될까요? 예를 들면 : 192.168.2.10:6000
및 192.168.2.11:6000
. 이제 라우터는 이전과 마찬가지로 공용 IP 주소를 소스 IP 주소로 설정하지만 이제 해당 포트 번호를 사용하려고 하면 해당 패키지는 : 65.82.23.32:6000
및 와 같이 정확히 동일한 소스 IP 및 소스 포트 번호를 갖게 됩니다 65.82.23.32:6000
.
응답이 돌아왔을 때 라우터가 어떤 패킷이 어떤 노트북용인지 어떻게 결정할 수 있는지 혼란스러워졌습니다.
@mfinni의 답변 이후 이것이 PAT의 작동 방식이 아니라는 것을 알았습니다! NAT 장치(여기서 라우터)는 각 개별 노트북(개인 IP 주소)에 고유한 포트를 할당한 다음 이러한 고유 포트(예: 7777
및 7778
)를 사용하여 패킷을 전송합니다. 따라서 응답이 돌아오면 어떤 패킷이 포트의 어떤 랩탑에 대한 것인지 명확하고 라우터는 이를 각각 --> 로 65.82.23.32:7777
변환 합니다 .65.82.23.32:7778
192.168.2.10:6000
192.168.2.11:6000
답변1
HTTP 및 기타 여러 프로토콜의 기초가 되는 TCP 연결은 특정 시점에 4가지 매개변수로 고유하게 정의됩니다.
- 로컬 IP
- 로컬 포트
- 원격 IP
- 원격 포트
동일한 컴퓨터에서 동시에 두 번 동일한 요청을 하더라도 두 개의 IP 주소가 동일하고 대상 포트가 동일하더라도 원본 포트는 다릅니다.
마찬가지로, 두 개의 장치에서 동일한 NAT 장치를 통과하는 두 개의 요청이 있는 경우 NAT 장치는 서로 다른 소스 포트를 사용합니다. 장치에 따라 원래 소스 포트를 유지하거나(충돌이 있는 경우 하나만 변경) 항상 원래 소스 포트와 별도로 새 소스 포트를 할당할 수 있습니다.
그런 다음 NAT 장치는 각 연결에 대해 외부 연결(외부 IP, 외부 소스 포트, 대상 IP, 대상 포트)이 내부 연결(내부 호스트 IP, 내부 호스트 소스 포트, 대상)에 매핑된다는 변환 테이블의 매핑을 유지합니다. IP, 대상 포트).
답변2
NAT 테이블은 각 클라이언트의 소스 포트가 다르다는 것을 알고 있으므로 실수로 잘못된 내부 클라이언트에 잘못된 패킷을 보내는 일이 없습니다. NAT 장치는 또한 다른 아웃바운드 포트를 할당하며 이는 다른 내부 클라이언트 간에 동일하지 않습니다.
답변3
당신이 언급할 때 NAT
당신은 아마도 실제로 다음을 언급하고 있을 것입니다.NAPT
. NAT 장치에서 (적어도 필요한 경우) 소스 포트를 변경합니다. 따라서 소스 포트가 변경됩니다.
예를 들어iptables
MASQUERADE
이 경우 NAT를 수행할 때 어떤 "외부 포트"가 어떤 "내부 클라이언트 및 포트"와 관련되어 있는지 추적하는 "연결 추적"도 필요합니다. iptables에서는 다음을 사용하는 규칙을 자주 볼 수 있습니다 RELATED,ESTABLISHED
. 또한 NAPT를 수행하는 라우터가 다시 시작되면 모든 연결이 끊어지는 것을 알 수 있습니다. NAT가 없는 라우터는 일반적으로 모든 연결을 재개합니다. (클라이언트 시간이 초과되기 전에 다시 시작이 완료된다고 가정)
답변4
라우터는 랩톱이 WAN으로 나가는 요청에서 생성하는 것과 동일한 소스 포트 번호를 사용하지 않고 고유한 소스 포트를 생성합니다. 라우터의 NAT 테이블은 laptop1:6000을 publicip:N으로, laptop2:6000을 publicip:M으로 변환합니다. 그런 다음 인터넷에서 트래픽이 도착하는 포트를 통해 수신 패킷을 라우팅할 위치를 파악합니다.