FTP 수동 모드에서는 서버가 데이터 채널을 설정할 수있는 임의의 포트 번호를 클라이언트에 보냅니다.
그런 다음 클라이언트는 임의 포트 번호에서 서버가 보낸이 포트 번호로 데이터 채널을 설정합니다.
내 질문은 서버가 클라이언트에 임의의 포트 번호를 보내는 이유는 무엇입니까? 클라이언트가 서버 측에서 포트 번호 20으로 데이터 채널을 직접 설정할 수없는 이유는 무엇입니까?
FTP 수동 모드에서는 서버가 데이터 채널을 설정할 수있는 임의의 포트 번호를 클라이언트에 보냅니다.
그런 다음 클라이언트는 임의 포트 번호에서 서버가 보낸이 포트 번호로 데이터 채널을 설정합니다.
내 질문은 서버가 클라이언트에 임의의 포트 번호를 보내는 이유는 무엇입니까? 클라이언트가 서버 측에서 포트 번호 20으로 데이터 채널을 직접 설정할 수없는 이유는 무엇입니까?
답변:
이것이 FTP 프로토콜이 수동 모드에서 작동하도록 설계된 방식입니다. 이 모델이 다른 프로토콜에서 다시 반복되지 않는다고 생각하지 않기 때문에 아마 좋은 생각이 아니 었습니다 (FTP 활성 모드에 대해서는 더 그렇습니다).
데이터 연결 포트에는 프로토콜이 없습니다. 해당 연결에 정보를 전달하는 유일한 서버 인 서버가 알고있는 것은 연결하는 포트 번호입니다.
매번 같은 포트에 연결했다면 서버는 어떤 파일을 연결할지 알 수 없습니다. 포트 번호는 제어 연결의 전송 요청과 데이터 연결 간의 링크 역할을합니다. 포트 번호는 PASV
명령 에 대한 응답에 포함됩니다 .
두 클라이언트가 동시에 전송을 요청한 경우 서버가 단일 포트에서 연결을 허용하면 서버는 전송할 파일을 말할 수 없습니다. 물론 서버는 결정을 위해 클라이언트 IP를 사용할 수 있습니다 (실제로 많은 FTP 서버는 클라이언트 IP가 보안을 위해 제어 연결에 사용 된 IP와 일치하는지 검증합니다).
그러나 이것은 작동하지 않습니다.
부분적으로 내 대답에서 복사 단 하나 개의 포트에 반대 FTP 패시브 모드 포트 범위를 필요로 않는 이유는 무엇입니까? 서버 결함.
일반적으로 서버는 임의의 포트를 보내지 않지만 정의 된 (설치에 의해) 범위 / 풀에서 무료 포트를 보냅니다. 클라이언트의 경우이 포트가 무작위로 보입니다. 이 포트는 범위를 정의해야하는 방화벽에서 전달되어야합니다.
불행히도 FTP는 고대입니다. 고대 서버는 포트를 제외하고 여러 클라이언트의 데이터 세션을 구별 할 수 없었습니다. 일반적으로 단일 소켓 세션 내에서 모든 것이 깔끔하게 패킷 화되는 최신 프로토콜로 이동하는 것이 좋습니다.