<aside>
💡 패킷 교환 방식의 문제점 = 중간에 사라지는 패킷이 생겨 부족한 데이터가 될 가능성
→ 오류를 감지하고 해결하여 데이터가 온전히 전송될 수 있게 하는 프로토콜인 TCP
</aside>
TCP(Transmission Control Protocol)
- 신뢰성 있는(오류 없는) 데이터 통신을 보장하는 프로토콜
- 패킷마다 번호를 붙여 사라진 패킷을 파악
- 클라이언트가 데이터를 응답 받고 난 뒤 서버에게 데이터를 잘 받았다는 메시지 전달
- 연결형 프로토콜: 데이터를 주고받기 전에 미리 클라이언트와 서버가 서로 통신할 준비가 됐는지 확인해 연결 오류로 인한 데이터 유실을 방지
- 연결 수립 → 3방향 핸드셰이크
- 연결 해제 → 4방향 핸드셰이크
TCP 헤더
- 헤더
- 모든 프로토콜은 데이터의 앞에 해당 데이터에 대한 정보가 담긴 헤더를 추가해 전송
- 프로토콜마다 다른 형태와 크기
- TCP 헤더
- 시퀀스 번호: 패킷의 번호(현재, 다음)를 담음
- 윈도 크기
- 플래그: 활성화 여부에 따라 패킷의 상태를 알림
- 각 1비트로 총 6개
- ACK(Acknowledgement): 데이터를 잘 받았다는 의미
- SYN(Synchronize): 연결을 요청
- FIN(Finish): 통신이 마무리되어 연결의 해제를 요청
TCP 연결 수립: 3방향 핸드셰이크(3-way handshake)
[Step 1]
- Client → Server 연결 요청(SYN)
- Client 상태: 요청 보냄(SYN_SENT), 응답을 기다림
[Step 2]
- Server → Client 응답+연결 요청(ACK+SYN)
- Server 상태: 요청 받음(SYN_RECEIVED)
[Step 3]
- Client 상태: 연결됨(ESTABLISHED)
- Client → Server 응답(ACK)