추상적인 개념보단 실제로 보이고 구체적인 것이 이해가 쉽다는 철학으로 하여금 작성하고 있습니다.
<aside> 💡 목차
</aside>
한층한층 설명해봅시다.
OSI 7계층을 설명하며 가장 중요한 것은
각 레이어들이 하는 일들이 전부 절대적으로 해당 레이어의 일이라는 것이 아니라는 것. 이 계층 구조는 구체적으로 클라이언트-서버 통신에서 일어나는 네트워크 프로세스를 추상적으로 “구분”하는 분류 체계일 뿐이지, 모든 프로세스들이 이 구분의 순서대로 단계를 밟는 것이 아니라는 것이다.
예를 들어 브라우져는 Application Layer에서 HTTP Request를 생성하고, HTTP Request를 Transport 계층으로 전달하는데, 브라우져가 운영체제의 네트워크 스택으로 $^*$메세지를 전달한다. 그걸 “HTTP Request 를 Transport 계층으로 전달” 이라고 표현한다. 하지만 이런 큰 흐름만 계층 구조를 따르고 디테일처럼 느껴지는(예를 들어, HTTPS에서 일어나는 패킷 암호화 등) 것들은 그것이 어디에 속해야 하는 지가 굉장히 모호하다. 보통 최신 기술일 수록 이런 성향이 있고, 그 이유는 최신 기술들은 계층 구분에 초점을 맞추지 않고 다양한 방법으로 더 나은 서비스를 만들기 때문에 계층 구조를 엄격히 따르지 않기 때문이라고 볼 수 있다.
$^*$브라우져와 운영체제 간에는 **소켓(Socket)**이라는 것으로 연결되어 있다. 운영체제의 네트워크 스택을 사용할 때 브라우져는 이 소켓을 열고 이 소켓을 여는 과정은 운영체제의 네트워크 계층 내에서 어떤 과정을 통해 열리게 된다. 그리고 브라우져가 열린 소켓을 통해 연결되면 Stream이 형성되고, 그 Stream으로 HTTP Request “메세지”가 오간다. 이 메세지가 또 추상적으로 느껴질 수 있다고 생각할 수 있는데, 그냥 어떤 데이터를 규칙(Protocol)에 따라 표현한 것을 메세지라 하며, 그걸 브라우져가 Stream에 쓰면 그걸 HTTP Request를 Stream을 통해 운영체제로 보냈다고 하고, 운영체제가 서버의 응답을 받아 브라우져-운영체제 간 스트림에 규칙에 따른 데이터 표현을 작성하면 그걸 HTTP Response를 운영체제가 브라우져로 전달했다고 표현하는 것이다.
OSI 7계층은 단순히 그 계층에서 무슨 일을 하고 있는가에 대한 일곱 개의 집합입니다. 어떤 작업 하나가 무조건 어떤 계층 딱 하나에 대응되고 그런 게 아니고 모호하게 걸쳐있는 것도 있습니다. 이를 명심하고 아래 설명을 볼까요?
$\huge \textsf{이쪽은 PC 안쪽}$
$\huge \textsf{이쪽은 PC 밖(공유기 등)}$