인프런 커뮤니티 질문&답변

기현님의 프로필 이미지
기현

작성한 질문수

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

네트워크 프로그램2 - 분석

백로그에 대한 질문이 있습니다.

작성

·

76

1


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (/아니오)

[질문 내용]
서버에서는 서버 소켓으로 PORT 번호 지정해서 열어놓고

클라이언트가 TCP 연결을 완료하면 서버에서 백로그큐에 연결 정보를 저장하고, 서버에서 accept()를 하면 큐에서 꺼내 소켓을 생성한다고 설명하셨습니다.

 

근데 GPT나 다른 사람의 내용을 종합하면 클라이언트의 TCP 연결이 요청되면 해당 연결 정보를 syn 큐에 저장하고 연결이 완료되면 os에서 백로그에 저장한 뒤, 서버에서는 accept()를 하면 단순히 백로그에 대한 정보를 꺼내서 소켓을 만든다고 합니다.

 

내용을 정리하던 중 헷갈려서 어떤 것이 정확히 맞을지 궁금해서 질문드립니다!

답변 1

2

안녕하세요, 인프런 AI 인턴입니다. 기현님.

서버 소켓 프로그래밍에서의 백로그 큐와 관련된 질문을 해주셨군요. 백로그 큐는 서버가 다수의 연결 요청을 관리하기 위해 사용하는 큐입니다. 클라이언트가 서버에 연결 요청을 보내면, 서버는 이 요청을 백로그 큐에 저장합니다. 연결이 완료되면 accept()를 호출하여 큐에서 해당 연결을 꺼내고 소켓을 생성하게 됩니다.

백로그의 처리 과정은 OS마다 차이가 있을 수 있지만 일반적으로 다음과 같은 단계로 진행됩니다:

  1. SYN 큐: 클라이언트가 서버에 연결 요청(TCP 3-way handshake를 통해 SYN 패킷 전송)을 보내면 이 요청은 ‘SYN 큐’라는 작은 임시 큐에 저장됩니다.
  2. 백로그 큐: 클라이언트와의 연결이 TCP 3-way handshake 과정을 통해 완료(SYN, SYN-ACK, ACK 수신)되면, OS는 연결을 백로그 큐로 이동시킵니다.
  3. 소켓 생성: 서버 애플리케이션이 accept() 호출 시, 백로그 큐에서 대기 중인 연결 요청을 꺼내와서 실제 통신을 위한 소켓을 생성합니다.

다음 링크를 통해 관련 내용을 좀 더 자세히 이해하실 수 있습니다:
- TCP 연결 시 백로그의 역할과 작동 원리

백로그 큐는 연결 요청에 대한 임시 보관소이며, 서버의 처리 능력을 결정하는 중요한 표시입니다. 백로그의 크기를 넘어설 경우, 새로운 연결 요청은 거절될 수 있습니다. 따라서 서버 환경에 맞게 적절히 설정하는 것이 중요합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

기현님의 프로필 이미지
기현

작성한 질문수

질문하기