사실 OSI 7계층 모델은 이미 시장에서 도태된 네트워크 시스템이다. 현대에는 OSI 7계층 모델의 일부를 계승한 TCP/IP 모델을 대부분 사용한다. 또, TCP/IP 모델에서도 한번 업데이트가 이루어져 사실상 Updated TCP/IP Model 이라 불리는 모델을 사용한다.
위와 같이 3개의 모델 변천사가 있었는데, 최종 모델인 TCP/IP updated 모델을 보면, 4계층 밑으로는 OSI 7계층과 동일하며, 5, 6, 7 계층만 응용 계층(Application Layer)이라는 이름으로 통합되었다.
이러한 모델로 변경된 이유는 이 모델이 시장에서 이겼기 때문이다. 비록 나는 그 시대에 개발자로 일하지 않았고 일했어도 저런 일에 관여하지 못했을 것이지만, 과거의 개발자들이 최대한 합리적인 모델을 선택했을 것이다.
주로 클라이언트 서버로 이루어진 애플리케이션에서 통신하기 위해 사용된다. 대표적으로 알려진 몇가지의 응용 계층 프로토콜이 존재하지만 사용자가 애플리케이션을 제작하고 자신만의 응용 계층 프로토콜을 만들 수도 있다.
HTTP(80)
: 웹 사이트를 접속하는데 이용된다.DNS(53)
: 도메인 이름을 해석하는데 이용된다.FTP(21)
: 파일을 전송하는데 이용된다.SMTP(25)
: 메일을 보내는데 이용된다.POP3(110)
: 메일을 받는데 이용된다.HTTP 통신은 응용계층에 구현된 대표적인 통신 프로토콜 중 하나이다. HTTP/1.0, HTTP/1.1, HTTP/2는 TCP 통신을 이용하지만, HTTP/3부터는 QUIC을 이용한 UDP 통신을 이용한다.
80
포트를 이용하여 HTTP 헤더가 씌워진 데이터를 보낸다.HTTP 통신은 주로 80포트를 사용하지만, 반드시 80포트를 사용해야 하는 것은 아니다.
HTTP/1.1 이전의 HTTP 통신에서는 매번 HTTP 요청을 보낼 때마다 일일이 TCP 연결을 맺고 끊고 했다.
그러나 HTTP/1.1부터는 keepalive
라는 기능이 추가되어, TCP 연결을 한 번 맺었다면, 필요한 데이터를 모두 교환한 이후에 연결이 끊어진다.
HTTP/2 이전에는 각 요청에 대한 응답이 얼마나 걸리든 상관없이 요청이 들어온 순서대로 응답을 했다.
그러나 HTTP/2부터는 요청에 대한 응답이 빠른 것부터 응답하여 순서대로 응답하지 않아도 되어 조금 더 속도의 향상을 이뤘다.
헤더의 내용은 애플리케이션 구현에 따라 다르며, 우리도 TCP/IP 소켓 프로그래밍이란 것을 통해 우리만의 애플리케이션 헤더를 구현하여 통신할 수 있다.