SeSac) DevOps/내용 정리

[2주차 - 네트워크 (TCP/IP) 및 데이터 통신 기본] 세션 계층 (L5)

tierr 2025. 12. 31. 20:44

세션, 소켓 프로그래밍 학습 중에 생긴 의문 정리


소켓 프로그래밍 관련 질의응답 정리

출처 - https://andjjip.tistory.com/281

Q1. accept()가 호출될 때 새로운 전용 소켓이 생기는 이유는 무엇인가?

서버가 '멀티태스킹(다중 접속)'을 하기 위해서

  • 리스닝 소켓(Listening Socket): 입구에서 새로운 손님이 오는지 감시만 하는 '안내원' 역할
  • 전용 소켓(Connected Socket): 실제 데이터 통신을 담당하는 '전담 웨이터'
  • 만약 전용 소켓을 따로 만들지 않고 안내원이 직접 서빙(통신)하러 들어간다면, 그동안 입구에 새로 도착한 다른 클라이언트의 요청을 받을 수 없게 된다.

Q2. 소켓과 전송 계층(TCP/UDP)의 차이는 무엇인가?

'도구''규칙'의 차이

  • 전송 계층: 데이터가 깨지지 않게 보내는 내부적인 '통신 규칙(TCP/UDP)'입니다. 운영체제 커널이 관리함
  • 소켓: 개발자가 전송 계층의 기능을 사용할 수 있도록 운영체제가 제공하는 '창구(인터페이스)'다.
  • 우리는 소켓이라는 핸들을 조종하여, TCP라는 엔진을 구동시키는 것

Q3. 소켓 생성과 3-Way Handshake 중 무엇이 먼저인가?

소켓 객체(도구) 생성이 먼저이며, 순서는 다음과 같다.

  1. 소켓 생성 (socket()): 통신을 위한 빈 도구(껍데기)를 먼저 만든다. (사용자 영역)
  2. 연결 시도 (connect()): 이 도구로 연결해달라고 OS에 명령한다.
  3. 3-way Handshake: OS 커널이 내부적으로 인사를 나눈다. (전송 계층 동작)
  4. 소켓 완성: 인사가 끝나면 소켓의 상태가 '연결됨(Established)'으로 변하며 실질적으로 완성된다.

Q4. 소켓은 4계층(전송 계층) 개념 같은데 왜 5계층(세션 계층)에 포함되나?

소켓의 역할이 '연결 관리'이기 때문이다.

  • 4계층은 데이터 전송 규칙 자체를 다루지만, 소켓은 두 응용 프로그램 간의 통로를 열고(connect), 유지하고, 닫는(close) 일을 한다.
  • 계층 모델에서 '연결의 성립과 단절'을 관리하는 것은 5계층(세션 계층)의 정의와 일치하므로, 소켓은 5계층의 구현체로 분류된다.

Q5. 네트워크 계층은 1층부터 7층까지 순서대로만 처리되나?

데이터 조립은 순서대로 되지만, 제어권은 사용자 영역과 커널 영역을 수시로 왔다 갔다한다.

  • 개발자가 소켓 함수를 호출하면 제어권이 사용자(7~5층)에서 커널(4~1층)로 넘어간다(System Call).
  • 커널이 네트워크 작업을 마치면 다시 결과를 사용자 영역으로 돌려준다.
  • 즉, 논리적인 계층은 수직적이지만 실제 처리는 '사용자-운영체제' 간의 탁구 게임처럼 이루어진다.

Q6. 소켓을 왜 '물리적' 엔드포인트라고 부르나?

눈에 보이는 선은 아니지만, OS가 메모리에 할당한 '실체적인 자원'이기 때문이다.

  • 세션: "둘이 대화 중이다"라는 추상적인 상태.
  • 소켓: IP와 Port를 점유하고 메모리를 실제로 차지하고 있는 구체적인 도구.
    추상적인 개념인 '세션'에 대비하여, 실제로 존재하는 자원임을 강조하기 위해 '물리적(실체적)'이라는 표현을 쓴다.