🔊본 포스팅은 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 Inflearn 강의를 수강하고 정리한 글입니다.
앞서 보았던 IP 프로토콜의 한계점들을 해결해 주는 것이 바로 TCP이다.
채팅 프로그램에서 Hello, word! 라는 메시지를 보내는 상황을 가정한다.
1️⃣ 채팅 프로그램이 Hello, world! 라는 메시지를 생성한다.
2️⃣ 생성된 메시지를 SOCKET 라이브러리를 통해 OS 계층에 넘긴다.
3️⃣ OS 계층의 TCP 계층에서 메시지 데이터(Hello, world!)를 포함해 TCP 정보를 생성한다.
4️⃣ OS 계층의 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
- IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터)))
5️⃣ IP 패킷이 LAN 카드의 MAC 주소 등 물리적 정보가 포함됨.
TCP 정보: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증정보 ...
- 먼저 연결을 한 다음 메시지를 보냄
- 여기서 말하는 연결은 물리적인 연결이 아닌, 논리적인 연결이다.
TCP 3 way handshake
① 클라이언트가 서버에게 접속을 요청하는 SYN을 보냄
② 서버가 SYN을 받았으면, 서버에서 클라이언트로 접속을 요청하는 SYN과 함께 ACK를 보냄
③ 클라이언트가 SYN을 받았으면, 서버로 ACK를 보냄
3 way handshake 후, 클라이언트와 서버는 서로 연결되었다는 것을 인식한다.
④ 클라이언트가 서버로 데이터를 전송한다.
요즘은 3번 단계에서 ACK와 함께 데이터를 보내기도 함
- 패킷 손실이 되어 서버가 메시지를 받지 못한 경우, 클라이언트가 알 수 있다.
클라이언트가 데이터를 전송하고 서버가 데이터를 받았으면 클라이언트로 응답을 해준다.
순서보장
클라이언트에서 패킷을 보낸 순서대로 서버로 오지 않으면 서버가 클라이언트에 다시 순서대로 패킷이 전송되도록 요청한다.
신뢰할 수 있는 프로토콜
현재는 대부분 TCP 사용