STCP에서 동일한 포트 번호로 수신 대기 중인 여러 프로세스가 있는 경우 연결이 요청될 때 포트 번호에 바인딩된 첫 번째 프로세스만 알림을 받게 됩니다. 이 제한 을 둘러싼 한 가지 일반적인 방법은 연결이 완료되면 청취 소켓을 닫은 다음 새 소켓을 만들고 바인딩하고 다시 듣는 것입니다. 이렇게 하면 청취 소켓 체인의 끝에 청취 소켓이 배치됩니다.
17.1부터 이 절차는 기본 STCP 매개 변수 값을 변경하지 않고 더 이상 작동하지 않습니다.
17.1 이전에 STCP는 소켓 옵션의 의도를 SO_REUSEADDR 잘못 해석했습니다. 이 옵션의 의도는 포트 X에서 수신 대기 중인 프로세스가 종료되고 시스템이 여전히 TIME_WAIT 상태에서 X포트에 바인딩된 소켓이 있는 경우 즉시 다시 시작할 수 있도록 하는 것이었습니다. 그러나 STCP의 이전 릴리스에서는 포트 X에 바인딩된 기존 소켓의 상태에 관계없이 SO_REUSEADDR 소켓 옵션이 설정된 경우 포트 X에서 프로세스를 들을 수 있습니다. 이 동작을 사용하면 두 개의 서로 다른 응용 프로그램이 동일한 포트 번호를 들을 수 있습니다. 첫 번째 응용 프로그램이 청취 포트 재활용 절차를 사용하거나 프로세스가 종료되고 다시 시작하면 두 번째 응용 프로그램이 포트를 효과적으로 납치합니다.
릴리스 17.1에서 시작하여 바인딩 함수는 요청된 포트에 바인딩된 모든 소켓이 TIME_WAIT 상태에 없는 한 EADDRINUSE 오류를 반환합니다. 또는 두 번째 프로세스에는 첫 번째 프로세스와 세션 ID가 동일합니다. 동일한 부모 프로세스에서 시작된 모든 프로세스는 동일한 세션 ID를 갖으므로 프로세스가 여러 자식 프로세스를 포크할 수 있으며 모든 자식은 포트 X에서 들을 수 있습니다.
STCP의 동작을 pre 17.1 동작으로 다시 변경하는 데 사용할 수 있는 릴리스 17.1에 추가된 두 개의 STCP 매개 변수는 tcp_reuseaddr_action udp_reuseaddr_action. 각 매개 변수에는 "안전"(기본값) 및 "안전하지 않은" 값이 있습니다. 설정으로 인해 위에서 설명한 포트 하이재킹을 허용하기 때문에 안전하지 않은 용어가 사용됩니다.
analyze_system 요청 list_stcp_params 사용하여 이 두 매개 변수(그림 1)의 현재 설정과 set_stcp_param 요청을 표시하여 설정을 변경할 수 있습니다(그림 2). 모든 STCP 매개 변수 변경은 시스템이 재부팅될 때까지만 효과적이므로 변경 이 영구적으로 매개 변수를 안전하지 않은 명령 설정으로 설정하려면 module_start.cm 파일 또는 start_stcp.cm 파일에 배치되어야 합니다.
analyze_system -request_line 'list_stcp_params tcp_reuseaddr_action'-종료
오픈보스 출시 17.1.0ab, analyze_system 릴리스 17.1.0ab
현재 공정은 481, ptep 89B6B740, Noah_Davids.CAC
TCP SO_REUSEADDR 조치 [안전/안전하지 않음] (tcp_reuseaddr_action) 안전
준비 17:10:29
analyze_system -request_line 'list_stcp_params udp_reuseaddr_action'-종료
오픈보스 출시 17.1.0ab, analyze_system 릴리스 17.1.0ab
현재 공정은 481, ptep 89B6B740, Noah_Davids.CAC
UDP SO_REUSEADDR 조치 [안전/안전하지 않음] (udp_reuseaddr_action) 안전
준비 됨 17:11:16
|
그림 1 – 두 재사용제 작업 매개 변수의 표시 |
analyze_system -request_line '안전하지 않은 set_stcp_param tcp_reuseaddr_action'-종료
오픈보스 출시 17.1.0ab, analyze_system 릴리스 17.1.0ab
현재 공정은 481, ptep 89B6B740, Noah_Davids.CAC
TCP SO_REUSEADDR 조치 변경(tcp_reuseaddr_action)
안전에서 안전하지 않은 것까지
준비 완료 07:30:38
|
tcp_reuseaddr_action 안전하지 않은 것으로 변경하는 그림 2 명령 |