TCP 소켓의 입출력 버퍼
TCP 소켓의 데이터 송수신에는 경계가 없음
서버가 한 번의 write 함수 호출로 40바이트를 전송해도 클라이언트는 네 번의 read 함수 호출로 10바이트씩 받는게 가능
→ 그럼 클라이언트가 10바이트를 먼저 수신했다면, 나머지는 어디서 대기?
→ write나 read 함수 호출 시 즉시 데이터가 전송되거나 수신되는 것이 아닌 write 함수 호출 시 데이터가 출력 버퍼로 이동하고, read 함수 호출 시 입력버퍼에 저장된 데이터를 읽음
TCP 소켓의 입출력 버퍼의 특성
- TCP 소켓 각각에 대해 별도로 존재
- 입출력 버퍼는 소켓생성시 자동 생성
- 소켓을 닫아도 출력버퍼에 남아있는 데이터는 계속해서 전송
- 소켓을 닫으면 입력버퍼에 남아있는 데이터는 소멸
TCP의 내부 동작 원리
- 상대 소켓과의 연결
- 접속을 요청하는 쪽에서 SYN(Synchronization) 신호 패킷을 보냄
- Server에서는 SYN, ACK 신호를 클라이언트 쪽으로 보냄
- 클라이언트에서 다시 ACK 신호를 보냄으로써 연결이 이루어짐
- SEQ(Sequence Number)는 패킷 번호
- 받은 쪽은 다음에 요청할 패킷 번호를 ACK Number를 통해 전달
상대 소켓과의 데이터 송수신
- 연결 후 데이터를 송수신
- 데이터를 보낸 패킷에 대해 ACK Number를 Sequence Number + 전송된 바이트 크기 + 1로 받음
- 전송된 바이트 크기를 포함해서 받음으로써 데이터의 손실 유무 확인
- 패킷 전송 시 타이머가 작동해서 일정 시간 안에 ACK 메세지가 오지 않을 경우 재전송
상대 소켓과의 연결 종료
- 4단계에 걸쳐서 연결 종료
- 양쪽 모두 정상적 종료를 위해 FIN 신호를 주고 받음
'개인 공부 > 네트워크' 카테고리의 다른 글
[Chapter 06-2] UDP 기반 서버/클라이언트 구현 (0) | 2023.08.28 |
---|---|
[Chapter 06-1] UDP에 대한 이해 (0) | 2023.08.28 |
[Chapter 05-1] 에코 클라이언트의 구현 (0) | 2023.08.21 |
[Chapter 04-3] Iterative 기반의 서버, 클라이언트 (0) | 2023.08.07 |
[Chapter 04-2] TCP기반 서버, 클라이언트 구현 (0) | 2023.08.07 |