2017-01-22 1 views
1

동일한 실행 가능 이미지를 공유하지 않는 다른 프로세스 (예 : fork())가 Windows, Linux 또는 OSX에서 동일한 클라이언트 측 포트를 사용하도록 TCP에서 가능합니까? 이것은 특히 을 사용하여 설정 한 소켓 옵션 SO_REUSEADDRSO_REUSEPORT과 관련이 있다고 생각합니다.TCP - 서로 다른 응용 프로그램이 서로 다른 연결에 대해 동일한 클라이언트 측 포트를 동시에 사용할 수 있습니까?

내가 읽은 한, 동일한 프로세스/이미지가이 작업을 수행 할 수는 있지만 여러 프로세스/이미지에 대한 정보는 찾지 못했다고 생각합니다. 각 소켓은 5 값 튜플 [IP_PROTO, src_ip : src_port, dst_ip : dst_port]에 의해 정의되므로 이론적으로는 가능하다고 생각합니다. 그래서 클라이언트 측 포트를 공유하는 여러 개의 TCP 연결이 동일한 dst_ip : dst_port로 만들어지지 않는 한 이론적으로는 가능할 것이라고 가정합니다.

답변

0

UDP는 연결 지향이 아니며 클라이언트와 서버간에 실제 구분이 ​​없기 때문에 UDP의 경우이 질문은별로 의미가 없습니다.

TCP의 경우 SO_REUSEADDR을 사용하여 여러 클라이언트를 동일한 포트에 바인딩 할 수 있지만 그 이유는 무엇입니까? 일반적으로 연결을 설정하기 전에 클라이언트를 언 바운드 상태로두고 커널이 사용하지 않는 포트를 선택하도록합니다.

+0

원하지 않지만이 동작이 가능한지 여부에 따라 다른 응용 프로그램에서이 작업을 수행 할 수 있는지 알아야합니다. –

+0

다른 응용 프로그램에서도 실제로 이것이 가능하다는 것을 알고 싶습니다. –

+1

* 가능 * 할 수 있습니까? 네, 같은 포트의 모든 소켓이'SO_REUSEADDR' /'SO_REUSEPORT'을 사용한다면 그렇습니다. * 가능성이 *? 아니. –

관련 문제