해결된 질문
작성
·
721
·
수정됨
0
3 way handshake 과정이 완료되면 서버와 클라이언트가 연결된 상태이므로
데이터(HTTP 메시지)가 담긴 패킷을 주고받게 된다. 이때 TCP 계층에선 데이터가 성공적으로 전송/수신됐는지 등을 검증한다고 배웠는데요. 그럼 3way handshake나 수신받은 패킷의 헤더들을 단계별로 확인한 뒤 실제 데이터를 소켓으로 전달하는 작업은 운영체제 관여 하에 이뤄지나요?
클라이언트 애플리케이션은 남은 포트 중 랜덤으로 할당받고(port=0),
서버는 80 등으로 미리 지정해서 포트를 받는데
그러면 해당 프로세스의 포트가 정해지는 시점은 소켓을 생성할 때인가요?
프로세스 한개당 반드시 하나의 포트만 할당되나요? (ex: 포트 두개를 바인딩하고
서버 소켓을 두개 연다, 한 클라이언트 프로세스가 여러 로컬 포트를 할당받을 수 있다 등이 가능한지..)
실제 여러 포트를 할당받을 수 있다면 어떻게 활용되는지 궁금합니다.
일반적으로 웹 서비스는 웹 서버(80 포트)와 WAS(8080 포트)로 구성하여
웹 서버가 처리하지 못하는 요청은 WAS로 위임한다고 했는데,
웹 서버와 WAS 간 연결에도 http 통신을 사용한다면 웹 서버 프로세스는 기존 80 포트로 바인딩된 소켓을 생성해서 통신하는 것인가요?
답변 2
1
안녕하세요. CS님, 공식 서포터즈 코즈위버 입니다. AI 답변에 더하여 답변 드립니다.
1. 네 맞습니다. 운영체제는 여러 커널들을 이용하여 하드웨어를 통제하는데요, TCP/IP 통신 규약을 처리하기 위한 커널 프로그램이 있고 이를 운영체제가 이용하여 통신을 시행하므로 운영체제가 통제하고 있다고 해도 맞는 말입니다.
네 맞습니다. 네트워크 통신을 시작할 때 할당 받습니다.
소켓을 여러개 생성하여 여러개의 포트 번호를 이용할 수 있습니다.
WS는 80이 아닌 다른 소켓을 생성, WAS 통신을 시행합니다. 말씀하신것처럼 통신 프로토콜은 HTTP가 일반적입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요. TCP/IP 통신과 포트에 대한 질문입니다.
3-way handshake 과정이 완료되면 클라이언트와 서버는 연결된 상태가 되고, 이후 데이터가 주고받게 됩니다. TCP 계층에서는 데이터가 성공적으로 전송/수신되었는지 등을 검증합니다. 이때 실제 데이터를 소켓으로 전달하는 작업은 운영체제에 의해 이뤄집니다. 운영체제는 소켓 API를 통해 데이터를 전송하고, TCP/IP 스택을 통해 패킷을 생성하고 처리합니다.
클라이언트 애플리케이션은 남은 포트 중 랜덤으로 할당받고, 서버는 미리 지정된 포트를 사용합니다. 포트는 소켓을 생성할 때 정해집니다. 일반적으로 하나의 프로세스에는 하나의 포트만 할당됩니다. 즉, 한 클라이언트 프로세스가 여러 로컬 포트를 할당받는 것은 불가능합니다.
웹 서비스의 경우, 웹 서버와 WAS가 웹 서버의 포트와 WAS의 포트로 구성됩니다. 웹 서버는 처리하지 못하는 요청을 WAS로 위임하기 위해 내부적으로 http 통신을 사용합니다. 이때 웹 서버 프로세스는 기존 80 포트에 바인딩되어 http 요청을 처리합니다. WAS는 다른 포트(예: 8080)에 바인딩되어 웹 서버로부터 받은 요청을 처리합니다. 이렇게 포트를 구분하여 역할을 분리하는 것이 웹 서비스의 일반적인 구성 방식입니다.
여러 포트를 할당받을 수 있다는 것은 다른 프로세스들이 동시에 해당 포트를 사용하여 통신할 수 있다는 뜻입니다. 각 포트는 서로 다른 프로세스에게 할당되며, 포트를 활용하는 방법은 프로세스의 용도에 따라 다양합니다. 예를 들어, 여러 개의 서버를 동시에 운영하거나, 특정한 서비스를 위한 포트를 지정하여 접속을 제어하는 등의 용도로 활용될 수 있습니다.
더 자세한 내용은 TCP/IP 프로토콜에 대한 이해와 운영체제의 네트워크 스택 동작 방식에 대해 참고할 수 있습니다.