HTTP - 인터넷 통신(TCP/UDP)
인터넷 통신 방법
클라이언트와 서버의 기본 구조
- 클라이언트 (Client): 사용자 측에서 요청을 보내는 주체로, 웹 브라우저, 모바일 앱, 데스크탑 애플리케이션 등이 포함됩니다.
- 서버 (Server): 클라이언트의 요청을 받아 처리하고 응답을 보내는 주체로, 웹 서버, 데이터베이스 서버, 애플리케이션 서버 등이 포함됩니다.
클라이언트와 서버는 요청과 응답을 통해 데이터를 서로 주고받으며 상호작용합니다.
IP의 한계
비연결성
- 패킷을 받을 대상이 없거나 서비스가 불능 상태여도 패킷 전송
비신뢰성
- 중간에 패킷이 사라져도 스스로 인식할 수 없음
- 패킷이 수많은 노드 순서를 통과하며 전달되는 과정에서 순서가 보장되지 않음
프로그램 구분 불가
- 서버의 IP에 통신하는 애플리케이션이 둘 이상이면 충돌이 발생
TCP
TCP(Transmission Control Protocol)는 인터넷에서 데이터 전송의 신뢰성을 보장하는 프로토콜입니다. TCP는 IP Stack의 4계층 중 전송 계층에 해당하며, 데이터의 정확하고 순서가 유지된 전송을 보장합니다. 다음은 TCP의 주요 특징입니다.
애플리케이션 계층 (Application Layer):
사용자가 직접 상호작용하는 계층으로, 웹 브라우저, 이메일 클라이언트 등과 같은 애플리케이션 프로토콜(HTTP, TLS, DNS 등)이 이 계층에 속합니다.
전송 계층 (Transport Layer):
데이터 전송의 신뢰성을 보장하고, 애플리케이션 계층에서 전달받은 데이터를 세그먼트(또는 패킷)로 나누어 송신합니다. TCP와 UDP가 이 계층에 포함됩니다.
인터넷 계층 (Internet Layer):
데이터를 패킷으로 나누고, 이를 목적지까지 전송하기 위해 라우팅을 수행합니다. IP(Internet Protocol)가 이 계층에 포함됩니다.
네트워크 인터페이스 계층 (Network Interface Layer):
데이터를 실제 물리적 네트워크 매체를 통해 전송합니다. 이 계층에서는 데이터가 프레임으로 캡슐화되며, Ethernet, Wi-Fi 등이 포함됩니다.
TCP 특징
SYN: 클라이언트가 서버에게 연결을 요청하는 패킷을 보냅니다. 이 패킷은 SYN(시퀀스 번호 동기화) 플래그가 설정되어 있습니다. 이 단계에서 클라이언트는 자신의 초기 시퀀스 번호를 서버에게 전달합니다.
SYN-ACK: 서버가 클라이언트의 요청을 수신하고, 연결을 수락한다는 응답을 보냅니다. 이 응답 패킷은 SYN과 ACK(확인 응답) 플래그가 설정되어 있으며, 서버의 초기 시퀀스 번호와 클라이언트의 시퀀스 번호를 확인합니다.
ACK: 클라이언트가 서버의 응답을 수신하고, 서버의 시퀀스 번호를 확인했다는 응답을 보냅니다. 이 단계에서는 ACK 플래그가 설정된 패킷이 전송됩니다.
따라서 TCP의 3 way handshake는 데이터 전달을 보증하고 순서를 보장해주는 신뢰할 수 있는 과정입니다.
주의점: TCP 3 way handshake는 논리상의 연결을 나타내는 것이지 실제 물리적인 연결을 나타내는 것은 아닙니다.
UDP
UDP(사용자 데이터그램 프로토콜, User Datagram Protocol)는 전송 계층에서 작동하는 네트워크 프로토콜로, TCP와는 달리 신뢰성 보장 없이 데이터를 전송합니다.
UDP 특징
비연결 지향적: UDP는 연결 설정이나 해제 과정 없이 데이터를 전송합니다. 송신자가 데이터를 보내면 수신자는 이 데이터를 받지 못할 수도 있습니다.
속도: 연결을 설정하거나 데이터의 순서를 보장하지 않기 때문에 TCP보다 전송 속도가 빠릅니다. 이는 실시간 애플리케이션에 유리합니다.
신뢰성 부족: 데이터 전송의 신뢰성을 보장하지 않습니다. 데이터가 손실되거나 중복되거나 순서가 뒤바뀔 수 있으며, 이러한 상황에 대한 처리나 재전송 기능이 없습니다.
IP랑 거의 기능이 같습니다. PORT + 체크섬 정도만 추가된 형태입니다. 실시간 통신, 스트리밍, 게임 등 지연이 중요한 애플리케이션에서 사용됩니다. 예를 들어, 비디오 스트리밍이나 온라인 게임에서는 빠른 전송이 중요하므로 UDP를 선호합니다.