통산 단위: packet(출발지 ip, 목적지 ip 등 포함. package + bucket의 준말.)
한계
비연결성: 대상 서버가 패킷 수신 가능여부를 판단하지 못한다(무작정 보내게 된다)
비신뢰성: 통신 과정에서 패킷의 순서나 내용이 변질되어도 알 수 없다
프로그램 구분: 같은 ip를 사용하는 서버에서 어떤 애플리케이션에 패킷을 전달하는 것이 맞는지 판단할 수 없다.
TCP, UDP
TCP(transmission control protocol)
주요 역할
port 정보 전달
IP의 역할 보완(비연결성, 비신뢰성, 프로그램 구분 문제 모두 해결)
- 연결 지향: 3 way handshake
데이터 정합성 보장
데이터 전달 순서 보장(전송 순서가 다르면 다른 순서 시작위치부터 재전송), 설정 개별 최적화 가능
한계
확인 과정들로 인해 느린 속도
UDP(user datagram protocol)
주요 역할
port 정보 전달, 간단한 checksum(기능이 거의 없다)
상대적 빠른 전송 속도
필요시 애플리케이션에서 추가 작업 가능
(최근 http3에서 3 way handshake를 없애고 udp를 활용하는 방안을 시도중이며 각광받고 있다)
한계
데이터의 정합성을 보장하지 않는다(IP와 거의 비슷한 만큼 비연결성, 비신뢰성 문제가 있다)
HTTP
HTTP의 주요 발전과정
HTTP/0.9(1991): 헤더가 없으며 GET 메서드만 지원
HTTP/1.1(1997): 가장 많이 사용, 현재 HTTP 통신의 가장 기본이 되는 버전
HTTP/2(2015): 성능 개선
HTTP/3(~진행중): TCP 대신 UDP 사용, 성능 개선
HTTP 특징
client-server 구조(request-response)
무상태(stateless)성, 비연결(connectionless)성에 기인하는 효율성, 확장성: scale-out, scale-in의 핵심은 무상태성이다.
- client 측에서 추가 데이터를 계속 전송해야 하고, 매번 3 way handshake로 연결을 해야하는 비효율성이 있었으나, HTTP persistent connection이라는 방법을 통해 개선되었다.