2012-10-15 3 views
7

TCP 연결에 임의의 포트 번호를 생성하려고합니다. 올린 사람 : http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers 포트 범위가 1024에서 49151까지는 예약되어 있지 않지만 그 중 일부는 UDP 만 알고 있습니다. 어떻게 유효한 TCP 포트 번호를 생성 할 수 있습니까?TCP의 허용 포트 범위

+1

1024 이상의 모든 것은 TCP 클라이언트로 간주됩니다. Wikipedia 페이지에서 '허용 가능한'TCP 포트가 될 수 있도록 항목을보아야하는 경우이 점에 대해 너무 많이 생각하고 있습니다. 모든 TCP 포트 = <1024는 클라이언트 소켓 소스 포트에 허용됩니다. –

답변

15

포트 0에 바인드하면 OS는 유효하지 않은 사용 포트를 선택합니다.

무작위로 임의가 필요한 경우 49152-65535의 모든 항목이 자동 사용에 안전해야하므로 해당 범위 내의 임의의 숫자 만 선택하면됩니다. (그러나 포트가 사용 중임이 판명되면 다시 시도해야 할 수도 있습니다.)

+0

그 범위 내의 어떤 포트라도 TCP를 지원합니까? wiki 페이지에서 일부 포트는 UDP 용으로 만 표시되기 때문입니다. 또한 포트가 사용중인 경우 Java를 체크인하는 방법은 무엇입니까? 감사! –

+1

1-65535의 모든 포트는 TCP를 지원하며 해당 페이지에 나열된 TCP/UDP는 등록 된 포트를 나타냅니다. 즉, 특정 용도로 할당 된 포트입니다. 포트가 사용 중인지 확인하는 것은 일반적으로 포트에 바인딩하려고 시도하여 수행됩니다. 사용중인 포트에 대해 오류가 발생하면 그 포트는 사용 중입니다. 어떤 포트를 얻었는지 상관 없지만 하나만 얻으면 문제가되지 않는다면 포트 0을 바인딩 한 다음 새 소켓에서 로컬 포트를 가져 와서 얻은 포트를 찾아야합니다. – Eric

+2

약간의 정교함을 위해 로컬 서버는 특정 포트에 바인딩되지만 UDP와 TCP는 서로 다른 "네임 스페이스"에 있으므로 독립적입니다. _both_를 사용하는 서버는 일반적으로 두 포트 모두 동일한 포트 번호를 엽니 다. _Connections_는 프로토콜, local-addr, local-port, remote-addr, remote-port의 5-tuple로 정의되어 있습니다. 이것은 왜 누화 등을하지 않는지 설명합니다. –

관련 문제