많은 질문이 있습니다. 하나씩.
특정 포트를 사용하는 서비스가 있고 동일한 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)에서 프로토콜을 기반으로하고 세션 쿠키를 사용하는 것이 최선의 방법 일 수 있습니다.
NAT 장치가 앞에있는 개인 네트워크를 언급하지 않는 한 동일한 IP 주소에 여러 대의 컴퓨터를 사용할 수 없습니다. – EJP