해결된 질문
작성
·
327
1
선생님! 안녕하세요.
Server쪽 Socket의 생성 시점에 관하여 궁금한 점이 있습니다.
질문)
Server쪽 Socket은 무엇이 Trigger가 되어 Socket이 Create되고 Open되는지 궁금합니다.
Client와 Server가 통신을 하기 위해선 우선 서로 Socket이 생성되어야 합니다.
Client쪽에서 Process가 통신을 하기 위해 운영체제에게 요청하여 Socket을 생성(혹은 개방)한다는건 알겠습니다. 즉 Process의 요청이 Trigger가 되어 Socket이 생성이 되는거죠.
그리고 Client에서 Socket이 만들어지면 Server로 요청이 가는데 이때 Server쪽 Socket이 Listen 즉 연결 대기 상태가 아니라면 Kernel의 TCP에서 연결을 받아줄 Socket이 없어서 응답을 못받아준다고 설명하셨습니다.
그럼 Server쪽에서는 Socket을 Create하고 Open되어 Listen 상태가 되어있어야 하는데 이는 무엇이 Trigger가 되어 만들어지는 건가요?
그니깐 Client에서 최초 요청을 보낼 때 Server는 이때 처음 Client에게서 요청이 온건데 그러면 당연히 Client와 통신할 사실을 모르고 있을거기 때문에 Process가 Socket을 생성해놓지 않았을거고 그러면 응답이 거부되는 상황밖에 안생기는데 이는 뭔가 아닌거 같아서요.
Client에서 Server에 Socket을 만들어라는 뭔가 모르는 Trigger가 있는건가요?
(나름 열심히 작성했는데 글 솜씨가 부족하여 제 질문의 의도를 파악하실지 모르겠습니다ㅠ)
답변 2
1
서버 소켓은 트리거가 있는 것이 아닙니다. 개발자가 소켓을 생성하도록 명시적으로 코드를 작성하는 것이고 외부 접속을 받을 수 있도록 Listen 상태로 전환해 접속 대기하는 것이죠.
이렇게 접속 대기 상태에 있는 소켓에 클라이언트가 접속할 경우 이 요청이 트리거가 되어 서버는 클라이언트와 통신하기 위한 소켓을 새로 하나 생성합니다. 만일 서버가 접속 대기 상태가 아닌데 클라이어트 접속 요청이 온다면 이를 받아줄 소켓이 없으므로 운영체제는 연결을 거절합니다. 당연히 새로운 통신 소켓이 만들어지지도 않습니다. 참고하시기 바랍니다.
선생님
그렇다면 서버에 소켓을 Listen 상태로 만들지 말지를 제어하는것도 개발자인거죠?