인터넷 서버는 개인 IP의 요청에 어떻게 응답합니까?

인터넷 서버는 개인 IP의 요청에 어떻게 응답합니까?

개인/공용 IP, 포트 전달 및 NAT에 대해 배우고 있지만 여전히 간단한 질문에 대한 답을 볼 수 없습니다.

동일한 네트워크에 있는 두 명의 사용자가 네트워크 외부의 단일 서버와 통신한다고 가정합니다(예: 나와 내 아내가 yahoo.com에 http 요청을 보냅니다). 서버는 두 사용자를 단일 공용 IP로 간주하며, 이 경우와 같이 동일한 포트에서 통신하는 경우가 많습니다. 라우터는 두 개의 서로 다른 연결에 따라 어떻게 패킷을 라우팅합니까? IP/포트 이외의 패킷 내부에 라우팅 정보가 있습니까? 어딘가에 '세션 테이블'이 유지되고 있나요? 누구에 의해 그리고 정확히 무엇을 포함합니까?

답변1

컴퓨터 내, 프로세스 간

먼저 어떻게하나의컴퓨터는 동시 연결을 구별합니다.

TCP, UDP, SCTP와 같은 대부분의 전송 프로토콜사용포트, 소스 및 대상– 즉, 연결의 양쪽 끝에 하나씩. 즉, 패킷하지 마라단순히 항구를 "통해" 걸어가십시오. 대신 그들은 여행을 떠난다~에서포트 X에게포트 Y.

그만큼목적지포트는 일반적으로 잘 알려져 있지만(HTTP의 경우 80, DNS의 경우 53…)원천포트는 일반적으로 OS 자체에서 무작위로 선택되며, 이는 또한 src/dst 조합이 고유함을 보장합니다.

따라서 브라우저가 "Yahoo의 포트 80"에 여러 연결을 만들면 실제로는 모두 서로 다른 연결을 갖게 됩니다.소스 포트, OS는 다음과 같은 소켓 테이블을 유지합니다.

PROCESS       PROTO  LOCAL                REMOTE            STATE
9894/firefox  tcp    192.168.6.175:39163  google.server:80  established
9894/firefox  tcp    192.168.6.175:52909  yahoo.server:80   established
17463/chrome  tcp    192.168.6.175:64981  yahoo.server:80   established
9894/firefox  udp    192.168.6.175:4984   8.8.8.8:53        --

따라서 OS가 yahoo.server:80로컬 포트 ​​52909로부터 TCP 패킷을 수신하면 이를 Firefox가 만든 특정 연결에 매핑할 수 있습니다.

NAT와는 아무런 관련이 없다는 점에 유의하세요.아직, 직접 연결된 경우에도 동일한 방식으로 발생합니다. (그러나 NAT는 이를 활용합니다.)

(Windows에서 이나 다양한 그래픽 도구를 사용하여 이 표를 볼 수 있습니다 netstat -n. 완전히 정확하지는 않지만 "로컬/원격"은 "소스/대상"으로 표시되는 경우가 많습니다.)


NAT 네트워크 내, 컴퓨터 간

NAT에 대한 귀하의 질문에 대한 답변은 매우 유사하며 모든 것이 더 큰 규모로 수행됩니다.

NAT를 수행하는 라우터는 내부 및 외부 주소와 포트를 모두 포함하는 "상태" 테이블을 유지합니다. 예를 들어 두 개의 HTTP 요청이 별도의 TCP 연결을 사용한 경우 다음과 같이 추적될 수 있습니다.

PROTO   ORIG-SRC             ORIG-DST         REPLY-SRC        REPLY-DST
6/tcp   192.168.6.42:52909   yahoo.server:80  yahoo.server:80  your.public.ip.addr:52909
6/tcp   192.168.6.175:39163  yahoo.server:80  yahoo.server:80  your.public.ip.addr:39163
6/tcp   192.168.6.175:52909  yahoo.server:80  yahoo.server:80  your.public.ip.addr:28330
17/udp  192.168.6.175:4984   8.8.8.8:53       8.8.8.8:53       your.public.ip.addr:4984

라우터는 REPLY-DST(공용 IP 주소)로 주소가 지정된 REPLY-SRC(Yahoo)로부터 패킷을 수신하면진짜NAT를 실행 취소하려면 ORIG-SRC 열에서 대상을 가져와야 합니다.

(일치하는 상태가 없으면 수동으로 구성된 포트 전달 규칙이 처리됩니다. 여전히 일치하는 것이 없으면 패킷은 실제로 라우터 자체를 위한 것입니다.)

상태 테이블에 어떤 내용이 포함되어 있는지 확인하세요.구애그리고포트, 동일한 서버에 대한 여러 연결을 포트 조합으로 구별할 수 있습니다. 내 예에서는 두 대의 컴퓨터가 실수로 동일한 포트 조합을 사용했기 때문에 두 번째 연결의 포트도 변환되었습니다.

(실제로 일부 NAT는오직포트에서 소스 주소를 완전히 무시하십시오. 이렇게 하면 가능한 연결 수가 줄어들지만 P2P 프로그램이 "NAT 홀 펀칭"을 수행하기가 훨씬 쉬워집니다.)

이러한 상태는 UDP 또는 ICMP와 같은 비연결 프로토콜의 경우에도 유지되므로 명시적인 "연결 닫기" 패킷이 없더라도 일정 기간 동안 활동이 없으면 항목이 만료됩니다. (상태 테이블은 실제로 방화벽의 일부이므로 NAT가 완료되지 않더라도 라우터는 여전히 이를 사용하여 "활성" 연결과 길 잃은 패킷을 구별할 수 있습니다.)

(라우터가 Linux 기반 conntrack -L이거나 cat /proc/net/nf_conntrack이 표를 표시하는 경우. OpenBSD 또는 pfSense의 경우 을 시도하십시오 pfctl -s state.)

관련 정보