현생/TCP 소켓 프로그래밍
5-2 TCP 소켓의 입출력 버퍼 [TCP/IP]
푸더기
2022. 1. 17. 15:57
반응형
TCP소켓은 데이터 송수신의 경계가 없고, 데이터의 손실이 없습니다. 그러나 서버가 보낸 데이터보다 클라이언트가 받은 데이터가 적을 수도 있고, 그의 반대일 수도 있는데 아직 받지 않은 데이터는 어딨는건지 의문을 가질 수 있습니다.
데이터를 송신하는 쪽이 write 함수를 호출할 때 데이터가 출력버퍼로 이동하고, 데이터를 수신하는 쪽이 read 함수를 호출하면 입력 버퍼에 저장된 데이터를 읽어들이게 됩니다.
따라서 데이터를 보내면 먼저 출력버퍼에 전달되고, 상황에 맞춰 적당히 상대방의 입력버퍼로 전달됩니다. 특징을 정리하면 다음과 같습니다.
- 입출력 버퍼는 TCP 소켓 각각에 대해 별도 존재
- 입출력 버퍼는 소켓생성시 자동으로 생성
- 소켓을 닫아도 출력버퍼에 남아있는 데이터는 계속해서 전송
- 소켓을 닫으면 입력버퍼에 남아있는 데이터는 소멸
여기서, 만약 클라이언트의 입력버퍼 크기가 50바이트인데 서버에서 100파이트를 전송받는 가정을 할 수 있습니다. 하지만 입력버퍼의 크기를 초과하는 데이터 전송은 발생하지 않는데, TCP에서는 슬라이딩 윈도우라는 프로토콜이 존재하기 때문입니다. 자신이 받을 수 있는 데이터 량을 서로 알려주며 송수신하게 되기에 초과하지 않습니다.
반응형