• 카테고리

    질문 & 답변
  • 세부 분야

    네트워크

  • 해결 여부

    해결됨

TCP 수신 관련하여 질문드립니다

23.01.04 22:36 작성 23.01.04 22:44 수정 조회수 274

0

강의를 보고, TCP 통신 과정에서 수신자가 Recv를 호출하면 소켓 수신 버퍼에 있던 데이터를 프로세스 상의 버퍼에 옮겨온다고 이해했는데요,

  1. 그러면 소켓 수신 버퍼는 Recv와 같은 api를 따로 호출하지 않아도 알아서 커널이 비동기로 데이터를 받아두는 건가요?

  2. TCP 세그먼트는 어디서 조립되는 건가요?

  3. 만약 TCP 세그먼트가 소켓 버퍼(혹은 그 이전)에서 조립되는게 아니라면, Recv를 호출할 시 세그먼트를 일부만 가져오는 경우가 생길 수도 있다고 생각되는데요, 이 경우에는 추후 어떻게 조립을 할 수 있고, 또 완성되었다는 근거는 어떻게 얻을 수 있는지 궁금합니다.

항상 감사드립니다~~!!^^

답변 1

답변을 작성해보세요.

1

  1. 네, 그렇습니다. 일단 운영체제가 수신한 후 프로세스가 가져가기를 기다리는 것으로 생각하면 됩니다. 그러므로 이 과정을 줄여서 운영체제가 최초 수신할 때 아예 프로세스 메모리에 저장해주면 불필요한 데이터 복사나 대기가 없어 더 성능이 개선됩니다. 대표적으로 IOCP가 그러합니다. 참고로 함께 알아 두시기 바랍니다.

  2. 운영체제 프로토콜 스택에서 합니다. 정확히는 TCP 프로토콜이 구현된 커널 프로그램이 한다고 보면 됩니다.

  3. 소켓 수준에서는 세그먼트 조립을 전혀 고민할 이유가 없습니다. 소켓 수준까지 올라왔다는 것은 전송오류 보정이나 세그먼트 조립이 모두 끝난 시점이기 때문입니다.

감사합니다. ^^