IP 응답 패킷은 개인 LAN 내부의 대상에 어떻게 도달합니까? [복제]


26

이것은 꽤 오랫동안 나를 혼란스럽게 한 작은 이론적 질문입니다.

기본적으로 개인 LAN 내부에 있고 들어오는 패킷이 시스템 중 하나에있는 HTTP 서버에 도달하기를 원하는 경우 들어오는 패킷이 해당 컴퓨터에 정확하게 도달하도록 포트를 전달합니다.

이제 웹 페이지를 열 때와 같이 '응답'패킷이 LAN 내부의 대상에 도달하는 방식에 대해 혼란스러워합니다. 해당 주제에 대한 유용한 정보를 찾을 수 없습니다.

누군가 나에게 몇 가지 단서를 줄 수 있거나 설명 할 수있는 정보로 나를 연결하기를 바랍니다. 감사.

편집 : 나는 명확히해야한다고 생각합니다. 내가 묻는 것의 예는 다음과 같습니다.
1. 단일 외부 IP를 가진 LAN 내부의 컴퓨터는이 LAN 외부의 웹 서버에서 웹 페이지를로드하려고 시도합니다 (기본적으로 인터넷에서)
2 웹 서버가 응답하여 웹 페이지를 해당 컴퓨터로 다시 보냅니다.

이 시점에서 나를 혼란스럽게하는 것은 이전 포트 전달없이 라우터가 들어오는 데이터를 보낼 컴퓨터 (라우터가 여러 컴퓨터의 LAN에 연결된 경우)를 어떻게 알 수 있는지입니다.


: 그냥 주제에 대한 좋은 비디오 시청 Computerphile - 네트워크 주소 변환
데르 Hochstapler

답변:


56

질문이 완전히 다루어졌지만. 이 과정을 단계별로 설명하는 것이 가장 좋습니다.

이 예에서는 라우터를 통해 인터넷에 연결된 개인 LAN에 앉아 있습니다. 네트워크는 단일 공용 IP 주소를 공유하므로 NAT를 사용합니다.

그래서 superuser.com많은 IP 패킷을 생성 하는 페이지 를 요청하면 . 하나를 봅시다.

IP 패킷
소스 : 192.168.1.12(my IP)
대상 : 64.34.119.12(superuser.com)

이제 내 시스템은 문제의 시스템과 유사하게 설정되어 있습니다. 내 자신의 IP 주소 ( 192.168.1.12), 서브넷 마스크 ( 255.255.255.0) 및 기본 게이트웨이 ( 192.168.1.1)가 있습니다. 이제 내 IP 패킷의 대상 필드가 내 네트워크 와 다른 네트워크를 가리 키 므로 컴퓨터가 아닌 기본 게이트웨이로 전송됩니다.

그러나 대상이 완전히 다른 곳을 가리키는 경우 어떻게 패킷이 기본 게이트웨이에 도달 할 수 있습니까?

이더넷

이더넷 프로토콜 주소 지정을 사용하기 때문에 쉽습니다. IP 패킷의 목적지 IP 주소와 기본 게이트웨이의 MAC 주소를 이더넷 프레임 의 목적지로 설정했습니다 .

이제 기본 게이트웨이가에 대한 패킷을 가져옵니다 superuser.com. 예이!

이제 게이트웨이에는 패킷이 있으며 경로에서 바로 보낼 수 있습니다. 그러나 답을 얻으려면 먼저 패킷 소스 주소 를 바꿔야합니다 (그렇지 않으면 superuser.com존재하지 않는 일부 장치에 대한 답변을 네트워크의 IP 주소 로 보내려고 시도합니다) . 아주 좋은).
내 라우터가 배치됩니다 그래서 공공 에 IP 주소를 소스 필드 :

IP 패킷
소스 : 92.69.127.243(내 공개 IP)
대상 : 64.34.119.12(superuser.com)

이제 동일한 게임이 패킷이 도착 superuser.com하고 응답이 생성 될 때까지 전 세계의 모든 라우터에서 계속 진행 됩니다.

대답

IP 패킷
소스에 응답 : 64.34.119.12(superuser.com)
대상 : 92.69.127.243(내 공개 IP)

좋아, 대답은 내 라우터에 도착했다. 이제 무엇? 내 라우터는 이제 답변을 보내는 방법을 어떻게 알 수 192.168.1.12있습니까?

TCP

글쎄, 실제로 우리는 통신의 IP 및 이더넷 부분 만 살펴 봤기 때문에 실제로 작동합니다. 이 작업을 수행하는 것은 TCP 부분입니다.

웹 서버는 일반적으로 포트에서 실행된다는 것을 알고있을 것입니다 80. IP는 포트 개념이 없습니다 . 이것은 TCP 에서 온 것입니다 . TCP에서는 소스대상 포트 가 (IP와 같이) 있습니다.

superuser.com으로의 TCP 패킷
소스 : 192.168.1.12(my IP)
소스 포트 : 11111(내 컴퓨터가 구성한 포트)
대상 : 64.34.119.12(superuser.com)
대상 포트 :80

라우터가 초기 패킷을 보내면 ( superuser.comon port 주소 지정 80) 새 소스 포트를 (예 :)에 넣습니다 12345.
그리고 이것은 중요한 부분입니다! 그는 그 교체를 기억할 것입니다!

superuser.com에 대한 라우터의 TCP 패킷
출처 : 92.69.127.243(내 공개 IP)
소스 포트 : 12345(내 라우터가 구성한 포트)
대상 : 64.34.119.12(superuser.com)
대상 포트 :80

따라서 라우터가 수신 한 응답 패킷은 실제로 다음과 같습니다.
superuser.com의 TCP 패킷에 응답 합니다.
출처 : 64.34.119.12(superuser.com)
소스 포트 : 80
대상 : 92.69.127.243(내 공개 IP)
대상 포트 : 12345(내 라우터가 구성한 포트)

이제 그는 해당 패킷을 가져 와서 이전에 기억 한 포트 가 IP 주소 192.168.1.12(내 IP 주소)에 대한 NAT 작업에 할당 된 포트임을 확인합니다 .

라우터의 TCP 패킷에 응답합니다.
출처 : 64.34.119.12(superuser.com)
소스 포트 : 80
대상 : 192.168.1.12(내 IP)
대상 포트 : 11111(컴퓨터가 구성한 포트)


1
귀하의 답변을 편집했지만 포트 번호에 무슨 일이 있었는지 명확하게 표시하지 않았습니다. 중간 단계와 각 단계의 포트 번호에 대한 예제를 더 추가했습니다.
Scott Chamberlain

1
@OliverSalzburg 나는 동일한 질문에 대한 답을 찾고 있었고 당신의 설명이 나를 기억하는 데 도움이되었습니다. 라우터가이 역방향 매핑 (소스 포트)이 얼마나 많은 요청에 대해 계속 수행 할 경우 공간이 부족한 것처럼 느껴지는 지 궁금한 경우 너무 규칙적으로 플러시합니까?
Ahmed

@Ahmed : 해당 정보를 추적 할 메모리의 양이 제한되어 있습니다. 65536 개의 가능한 포트 번호가 있으며 2 바이트로 저장됩니다. 따라서 각 포트의 IP 주소 (4 바이트)를 기억하려면 최대 65536 x 4 바이트 = 262144 바이트 = 256kB가됩니다. 그러나 세부 사항은 라우터에서 구현되며 많은 메모리가 아닙니다.
Der Hochstapler

@Oliver 대단한 답변, 내가 찾던 정확히! 몇 가지 질문이 있습니다. (1) "전 세계의 모든 라우터에서 동일한 게임이 계속 진행되고 있습니다" -정확합니까? 각 단계에서 소스 필드가 계속 교체되지 않습니까? (2) 라우터가 열린 포트를 장기간 기억하거나 비 응답 요청에 대해 정기적으로 삭제합니까? (3) 이것은 해커가 중간자 공격으로 라우터의 방화벽을 통해 과거의 패킷을 얻을 수 있음을 의미합니까 : 발신 TCP 패킷을 스누핑 한 다음 목적지와 일치하는 스푸핑 된 소스 IP로 라우터의 열린 TCP 포트를 대상으로합니까?
존 벤틀리

1
LAN의 컴퓨터에 ICMP 핑 응답이 어떻게 다시 나타 납니까? TCP 용 포트와 비슷한 것이 있습니까? 다른 프로토콜은 어떻습니까?
Jean

11

네트워크 주소 변환 . 간단히 말해서 개인 LAN의 게이트웨이 라우터가 개인 LAN 소스 주소를 자신의 공용 주소로 바꾸면 원래 LAN 노드와 발신 요청에 다시 매핑되는 고유하고 다른 의미가없는 포트 번호를 할당하는 등의 방식으로 패킷을 수정합니다. . 이 포트 매핑을 기억하므로 응답이 퍼블릭 IP / 고유 포트 번호로 돌아올 때 라우터 (라우터)는 원래 노드 중 하나로 다시 매핑을 해제하는 방법을 알고 있습니다. 또한 여러 탭, 브라우저 또는 브라우저 인스턴스를 실행할 수 있으며 각 브라우저 요청에 대한 응답이 올바른 브라우저 및 탭으로 돌아옵니다.


2
JRobert : 포트 번호가없는 tcp 또는 udp 이외의 IP 프로토콜 (예 : ICMP)은 어떻습니까?
Uri

0

초기 패킷이 라우터의 외부 인터페이스에 도착하면 포트 전달 구성에 따라 패킷의 대상 IP 주소를 변경하고 라우터의 내부 인터페이스에서 수정 된 패킷을 전송합니다 (필요한 경우 일반적인 ARP 이후)

패킷은 웹 서버에 도달하지만 응답을위한 대상 주소로 사용될 외부 소스 IP 주소가 여전히 있습니다. 따라서 서버는 요청의 소스 IP 주소와 동일한 대상 IP 주소를 사용하여 일반적인 방식으로 발신 응답 패킷을 처리합니다. 요청자의 IP 주소는 외부이므로 패킷은 MAC 계층에서 라우터의 내부 인터페이스로 주소가 지정됩니다.

각 네트워크 계층마다 서로 다른 대상이 있습니다.


0

포트 포워딩은 일반적으로 라우터 나 근처의 장치에서 수행됩니다. LAN의 장치가 같은 LAN의 다른 장치로 트래픽을 보내면 라우터가 전혀 관여하지 않습니다. 교통은 심지어 그것을 건드리지 않습니다. 포트 전달 규칙은 LAN-to-LAN 트래픽에 영향을 미치지 않습니다.

이더넷은 각 컴퓨터가 물리적으로 동일한 매체에 연결된 "버스"토폴로지를 염두에두고 설계되었습니다. 최신 스위치는 포트의 다른 쪽 끝에서 MAC 주소를 학습하고 그에 따라 트래픽을 복제하여 트래픽 흐름을 최적화하지만 "버스"토폴로지는 여전히 남아 있습니다. 표준 스위치에 연결된 모든 것은 라우터와 같은 중간 장치를 "통과"할 필요없이 "동일한 서브넷 내에 있다고 가정"하여 "직접"도달 할 수 있습니다.

모든 컴퓨터를 연결하는 장치에 여러 개의 "LAN"이더넷 포트가 있고 하나의 "WAN"포트가있는 경우 혼동 될 수 있습니다. 이러한 유형의 장치는 실제로 동일한 섀시에있는 라우터 및 스위치입니다.

따라서 LAN 내부에서 HTTP 서버의 주소가 192.168.1.55 인 경우 LAN 내부에 도달하려면 브라우저의 주소 표시 줄에 " http://192.168.1.55 " 를 입력해야 합니다. 라우터는 그것을 보지 못합니다. LAN 외부로 연결하려면 외부 IP를 입력해야합니다 (예 : " http://256.99.88.77 : {여기에서 전달한 포트}"). 라우터에 도달하면 라우터의 NAT 기능이 작동 한 다음 라우터가 192.168.1.55로 보냅니다.


0

간단히 말해 개인 LAN 내부의 컴퓨터가 나가는 연결을 시작할 때 NAT 게이트웨이는 자동으로 포트 매핑을 생성합니다. {public port, private address, private port}와 같이 이전에 수동으로 입력 한 포트 매핑과 거의 같으며 거의 ​​같은 방식으로 사용됩니다. 동적 매핑의 가장 큰 차이점은 예상되는 포트 번호가 이미 사용중인 경우 NAT 게이트웨이가 종종 매핑에 공용 포트를 임의로 할당해야한다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.