TCP 통신에서 버퍼(Buffer)는 데이터를 일시적으로 저장하는 메모리 공간을 말한다.
클라이언트와 서버 간 데이터를 주고받을 때, 송신 측과 수신 측에서 각각 버퍼를 사용하여 데이터를 처리한다.
데이터를 송신(보내기)하는 과정
송신 측에서는 데이터를 일정한 크기의 버퍼에 담아 소켓을 통해 전송한다.
1. 데이터 준비
송신할 데이터를 버퍼에 저장한다.
예를 들면, 문자열이나 파일 데이터를 일정 크기로 나눈다.
2. send() 함수 호출
소켓의 send() 함수를 호출하여 버퍼에 담긴 데이터 전송한다.
3. 흐름 제어
TCP는 수신 측의 ACK(확인 응답) 패킷을 기다리며 송신 속도 조절한다.
수신 측이 데이터를 받을 준비가 안 되었으면 송신 측 버퍼에 데이터를 잠시 저장한다.
데이터를 수신(받기)하는 과정
수신 측에서는 네트워크로부터 데이터를 수신할 때 일정한 크기의 버퍼로 받아 저장한다.
1. recv() 함수 호출
소켓의 recv() 함수를 호출하여 데이터를 일정한 크기의 버퍼로 읽는다.
recv()는 데이터가 버퍼에 도착할 때까지 대기한다.
2. 버퍼 크기 지정
recv(버퍼 크기)처럼 버퍼 크기를 지정한다.
recv(1024) // 1024바이트씩 데이터 받기
3. 데이터 재조립
받은 데이터가 버퍼 크기를 초과할 경우, 여러 번 recv()를 호출해 데이터를 순차적으로 읽어와 조립한다.
TCP는 전송계층에서 이뤄지는 작업이므로 IP패킷단위의 네트워크/인터넷 계층의 데이터를 세그먼트단위로 재조립하게 된다.
출처 : https://dd-developer.tistory.com/110
TCP에서는 송신 측과 수신 측 간 흐름 제어를 통해 각 측의 버퍼 상태를 고려한다.
정리
TCP에서 버퍼를 주고받는 방식은 소켓의 send()와 recv() 함수로 구현하며
송수신 측이 각자의 버퍼를 사용하여 데이터를 처리한다.
TCP는 흐름 제어와 혼잡 제어 기능이 자동으로 적용되어
사용자는 소켓 API를 통해 간단하게 데이터를 주고받을 수 있다.
한 줄 요약
전송계층은 오류/흐름 제어 등을 위해 존재하고 TCP는 이 전송계층에서 신뢰성을 보장하는 전송을 담당하는 프로토콜이다.