2013-08-25 2 views
-1

특정 포트를 사용하는 서비스가 있고 동일한 IP 주소를 가진 컴퓨터가 여러 개인 경우 어떻게 처리합니까? 서비스가 IP 주소의 컴퓨터에 정보를 보내야한다고 지정해야합니까? 같은 IP상의 두 컴퓨터가 동일한 서비스를 사용하지만 다른 정보를 요청하면 어떻게 될까요?동일한 IP의 여러 클라이언트

또한 클라이언트가 동적 IP를 사용하는 경우 서비스에서 IP가 변경되었지만 클라이언트 (및 세션)가 동일하다는 것을 어떻게 감지해야합니까? 클라이언트는 모든 요청에 ​​대해 스스로를 식별해야합니까 (http 이상의 쿠키와 비슷합니까)?

+0

NAT 장치가 앞에있는 개인 네트워크를 언급하지 않는 한 동일한 IP 주소에 여러 대의 컴퓨터를 사용할 수 없습니다. – EJP

답변

0

나는 당신이 말한 것을 완전히 이해하지 못한다고 생각합니다. 여러 컴퓨터가 동일한 IP 상에있을 방법은 없습니다. 이것은 인터넷이 작동하는 방식이 아닙니다. 그런 것들이있는 프로토콜이 있습니다.

당신이 서버이고 여러 대의 컴퓨터가 연결을 시도 했습니까? 그렇다면 포트에서 수신 대기하고 해당 컴퓨터의 서비스를 위해 새 스레드를 열고 여전히 수신 대기하는 메인 루프

+0

아니, 사실이 뜻. 한 집에서 ISP로부터 1 개의 IP 주소를 받지만 같은 인터넷 서비스를 사용하려는 두 대의 컴퓨터가 있습니다. 그들의 요청은 동일한 ip에서 유래합니다. 서비스가 각 사용자에게 개별적으로 어떻게 응답해야합니까? – Ihmahr

+0

한 집에 라우터가있는 경우 각 컴퓨터마다 다른 IP 주소가 부여됩니다 –

+0

두 가지 모두 옳습니다. 원래의 IP 모델은 아니지만 여러 컴퓨터간에 단일 IP 주소를 공유하는 것은 오늘날 매우 일반적입니다. 이 공유를 가능하게하는 장치를 NAT (Network Address Translation)라고합니다. 모든 가정의 "라우터"및 기타 여러 장치가이 NAT 기능을 수행합니다. NAT는 주소와 포트 번호의 "종단 간"투명성을 파괴하기 때문에 혼동을 줄 수 있습니다. 서버의 관점에서 두 클라이언트는 동일한 IP 주소에서옵니다 (별도의 "로컬"주소가 있음에도 불구하고). 하지만 소스 포트를 통해 구분할 수 있습니다! – sleinen

1

많은 질문이 있습니다. 하나씩.

특정 포트를 사용하는 서비스가 있고 동일한 ip addess에 여러 컴퓨터가있는 경우 어떻게 처리합니까?

누군가 여러 대의 컴퓨터가 동일한 IP 주소를 가질 수 없다고 언급했습니다. 원래의 IP 모델에서는 이것이 사실이지만 오늘날 NAT를 통한 이러한 주소 공유가 일반적입니다. 하지만 원래 모델에서도 약간 수정하면 문제가됩니다.

"특정 포트를 사용하는 서비스가 있고 동일한 IP 주소에 번 클라이언트이 여러 개있는 경우 어떻게 처리합니까? ? "

동일한 호스트 (동일한 대상 주소 + 포트 조합 사용)에 연결하려고 시도하는 동일한 호스트에 여러 클라이언트 프로세스가있을 수 있으므로 동일한 IP 주소를 공유합니다. IP가 개발되었을 당시에는 자연스럽지 않았습니다. 네트워크에 연결할 수있는 강력한 성능을 가진 대부분의 기계가 다중 사용자 기계 였기 때문입니다. 이것이 TCP (및 UDP)가 양측에 포트 번호를 가지고있는 이유입니다 (출발지와 목적지 또는 클라이언트와 서버). 클라이언트 프로세스는 일반적으로 서버에 접속할 때 원본 포트를 지정하지 않지만 "일시적인"원본 포트는 소켓 수명 기간 동안 호스트 운영 체제에 의해 소켓에 할당됩니다 (연결). 따라서 서버가 동일한 주소의 클라이언트를 소스 포트별로 구별하는 방법입니다.

NAT는 다른 "내부"IP 주소를 가진 다른 호스트를 동일한 "외부"IP 주소로 매핑하지만 송신 패킷에 고유 한 원본 포트도 할당합니다. 그래서 서버는 원래의 경우처럼 이것을 봅니다 (동일한 "호스트"/ IP 주소의 여러 클라이언트 프로세스). 그런 다음 NAT는 다른 내부 호스트에 대한 서버의 응답을 "역 다중화 (demultiplexes)"합니다.

서비스에서 IP 주소의 컴퓨터 중 정보를 보내야한다고 지정해야합니까? 같은 IP상의 두 컴퓨터가 동일한 서비스를 사용하지만 다른 정보를 요청하면 어떻게 될까요?

서버는 다른 클라이언트가 원본 주소/포트로 사용한 동일한 주소 + 포트 조합으로 응답을 보내 이것을 수행합니다. 이것은 대부분 소켓 API에 의해 자동으로 처리됩니다. 위에서 설명했듯이 두 클라이언트는 별도의 연결을 가지며 서버는 이들을 별개의 "세션"으로 처리하고 이러한 세션 간의 요청을 혼동하지 않습니다.

또한 클라이언트가 동적 IP를 사용하는 경우 서비스에서 IP가 변경되었지만 클라이언트 (및 세션)가 동일하다는 것을 어떻게 감지해야합니까? 클라이언트는 모든 요청에 ​​대해 스스로를 식별해야합니까 (http 이상의 쿠키와 비슷합니까)?

이제는 전체 웜입니다. 서비스가 클라이언트 IP 주소 변경 사항을 "생존"하려는 경우 다른 식별자를 사용해야합니다. HTTP (세션) 쿠키는 좋은 예입니다. TCP 연결은 주소 변경으로 인해 손상됩니다. TCP/IP를 설계 할 때 정상적인 작동의 일부로 변경되지 않았기 때문에 정상입니다. TCP/IP를 모바일 IP, MPTCP 및 SCTP와 같은 이러한 변경에 대해보다 강력하게 만들려고했지만 실제로는 아직 주류에 들어 있지 않았습니다. HTTP (S)에서 프로토콜을 기반으로하고 세션 쿠키를 사용하는 것이 최선의 방법 일 수 있습니다.