프로토콜은 크게 5 계층으로 이루어져 있는데
로우 레벨로 갈수록 기계에 가까워진다고 보면 된다.
이때 Http 에서 소켓을 거치면서 TCP 주소로 변환이 되고, LAN 이라는 지역망을 거쳐 WAN 을 통해 전세계로 연결이 된다. 우리가 지금 쓰는 연결망은 TCP/IP 가 인터넷 기준에 맞추어 많은 프로토콜 컬렉션들을 포함하게 되면서 대용량의 정보를 전세계적으로 주고받을 수 있게 된 결과물이다.
인터넷 프로토콜은 이름 그대로 Lv.3 의 IP 주소를 통해 데이터를 주고 받는다. IP 로 한 영역에 들어서면, '포트' 라는 항구를 통해 다양한 기능을 한 컴퓨터에서 즐길 수 있다. 다만 중간에 패킷이 손실되거나 순서대로 오지 않을 시 에러를 검출하기가 어렵기 때문에, Lv.4 의 TCP 로 IP 를 보완해서 쓴다.
TCP 헤더에는 포트 주소 뿐 아니라 ACK number, checksum 등이 있기 때문에 전달되는 데이터의 신뢰성을 높인다.
사진에서 볼 수 있는 TCP에는 굉장히 많은 기능들이 있다. 기본적인 기능 뿐 아니라 데이터의 신뢰성과 In-order 을 보장해주는 Ack num, Flags, Checksum 등이 존재하기 때문에 정확성이 중요한 Vod 나 스트리밍 서비스에 자주 쓰인다. 다만 데이터 오버헤드가 비교적 크기 때문에 반대급부로 전송 속도가 느리다.
TCP 3 ways handshake
1. 클라이언트 --(SYN)---> 서버
2. 클라이언트 <--(SYN + ACK)--- 서버
3. 클라이언트 --(ACK)---> 서버
TCP 는 ACK 을 통해 데이터의 순서를 보장할 수 있다!
위에서 IP 로 전달되는 데이터의 신뢰성을 TCP 로 높인다고 했는데, Lv.4 에는 TCP 만 쓰이는 것이 아니다. 꼭 필요한 옵션만 넣어 만든 UDP 가 있는데, 데이터의 신뢰성이 비교적 낮은 대신 TCP에 비해 빠른 전송이 가능하기 때문에 실시간 중계 등의 리얼타임 서비스에 유리하다. 다만 현대에 와서는 보안과 신뢰성의 중요성이 점점 커지고 있기 때문에 대부분 4레벨에는 TCP를 채택하고 있다.
원래는 HTML 전송용으로 나왔기에 GET 만 지원했으나, 점점 발전하며 HTML 뿐 아니라 json, xml 등 많은 데이터 형태의 전송을 지원하고 있다.
라는 특성을 지니고 있다.
무상태(stateless) 는 기본적으로 일관적인 상태를 유지하지 않는다는 말이다. 식당에 갔을 때 점원이 매번 바뀐다고 생각하면 이해하기 쉽다. 때문에 응답 서버를 바꾸기가 쉽고, HTTP는 비연결성 - 상시 연결을 유지하지 않는 상태 - 지향이기 때문에 굉장히 많은 양의 요청을 빠르게 처리할 수 있는 것이다. 1시간 동안 수천 명이 써도 실제로 동시 처리를 하는 양은 얼마 되지 않는다고 한다.