[TIL 2023.03.24] OSI 7 Layer

김헤일리·2023년 3월 24일
0

TIL

목록 보기
42/46
post-custom-banner

웹개발에 대해서 공부하면서 네트워크 지식이 부족하다보니 주먹구구식으로 블로그 글들만 슬쩍 읽고 지나치는 개념들이 많아졌다. 지금 다 기억을 못 해도 어쨌든 검색하는 시간이라도 줄일 수 있도록 알아야할 개념을 정리해야겠다.

인터넷을 통해 컴퓨터들이 서로 정보를 공유하는 방식도 프로토콜이 정해져있고, 이것을 Internet Protocol Suite 한다. 이 프로토콜을 7계층 모델 혹은 4계층의 추상화된 모델로 설명하는데 먼저 OSI 7 계층 모델 먼저 정리해봐야겠다.


OSI 7 Layer 의 구성

  • OSI는 Open System Interconnection의 약자로, 개방형 시스템 상호연결을 의미하며 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 모델이다.
  • 네트워크 구성 요소를 표준화함으로써 서로 다른 통신 장치와의 상호 호환 가능하도록 하기 위해 1984년 국제표준화기구(ISO)에서 개발하였다.
  • 계층 별 모듈화 된 것이 하나로 조립된 구성이기 때문에 특정 계층에서 문제가 생기면 해당 계층만 고쳐서 해결이 가능하다.

📡    1 계층 :   Physical Layer

모든 파일과 프로그램은 0과 1로 나열되어있다. 컴퓨터와 컴퓨터가 통신할 때 서로 0과 1을 주고받으면서 정보를 나눈다.

이때 서로 통신하는 두 대의 컴퓨터 (A와 B 컴퓨터)가 "전선"을 통해 물리적으로 연결되어있다고 생각해보자.
그리고 통신할 때 전선에 다른 전기신호를 보냄으로서 0과 1을 구분한다.

  • 1을 보낼 땐 +5V를 보낸다.
  • 0을 보낼 땐 -5V를 보낸다.

0과 1만 전달할 수 있으면 사실상 모든 데이터를 주고받을 수 있기 때문에 A 컴퓨터와 B 컴퓨터는 서로 통신이 가능하게된다!
그럼 모든 컴퓨터들이 이렇게 전선으로 연결되어있기 때문에 우리는 서로 통신이 가능한걸까? 전선으로 연결되어있긴 하지만 그게 전부는 아니다.

우리가 생각하는 신호는 전자기파 (파동)의 형태로 전선을 통과하게 된다.
전자기파의 주파수 값은 일정하지 않는데, 파동이 초당 몇번을 진동하는지에 따라 주파수 (hertz)는 달라지기 때문이다.

그럼 어떠한 전자기파를 통해 우리가 데이터를 전달한다고 했을 때, 해당 전자기파의 주파수가 최소 1Hz ~ 10Hz 라고 가정해보자.

이렇게 생긴 전자기파를 전선을 통해 전달하는 것이다.

문제는 모든 전선이 모든 주파수를 통과시킬 수 없다는 것!
A 컴퓨터와 B 컴퓨터가 연결된 전선은 5Hz ~ 8Hz만 통과시킬 수 있다고 해보자.
위 전자기파의 주파수가 1Hz ~ 10Hz 일때 저 전선을 통해 신호를 주고 받는다면 특정 구간의 전자기파만 통과된다. 그럼 처음에 보낸 신호와 나중에 받은 신호가 달라지게 되는 것이다. (데이터 소실)


❗️ 그럼 전선을 사용하지 않는걸까?

당연히 아니다. 모든 범위의 주파수를 커버할 수 있는 전선이 없기 때문에 특정 주파수를 가진 아날로그 신호로 0과 1을 변형해서 전선을 통과시킨다.

어떠한 데이터가 0101 0101 형태라고 할 때, 이 데이터를 위와 같은 아날로그 신호로 정말 0과 1만 정의해서 전선을 통해 신호를 전송한다. 그리고 수신을 받은 컴퓨터는 전달된 아날로그 신호를 해석해서 0101 0101 이라는 결과값을 얻는다.


❗️ 그래서 결국 Physical Layer란?

  • 0과 1의 나열을 아날로그 신호로 바꾸어 전선을 통해 신호를 흘려보낸다. (Encoding)
  • 수신 받은 컴퓨터는 아날로그 신호를 다시 0과 1의 나열로 해석한다 (Decoding)
  • 이 두 가지 과정을 통해서 전선이라는 물리적 매체로 연결된 컴퓨터가 0과 1의 나열을 주고받게 하는 모듈이 Physical Layer라고 하는 것이다.

이때 각 컴퓨터에 있는 Encoder / Decoder는 PHY칩이라는 부품에 구현되어있다. PHY칩이라는 하드웨어에서 데이터라는 인풋을 아날로그 신호라는 아웃풋으로 변경하거나 아날로그 신호라는 인풋을 데이터라는 아웃풋으로 변경하는 것이다.


❗️ 그럼 여러대의 컴퓨터와 통신하고 싶다면 n개의 전선이 필요할까?

그럴리가... 이때 등장하는 개념이 바로 "라우터"이다.

라우터 이전에 "스위치" 라는 개념이 있는데, 여러개의 컴퓨터가 특정 허브에 연결되어있다고 생각해보자.

여기서 예림이라 혜림이에게 데이터를 전달하고 싶다고 한다면, 이 스위치는 송신자가 데이터를 보내는 수신자를 인식해서 신호가 다른 사람이 아니라 특정 수신자에게 도착할 수 있게 해준다.

이렇게 하나의 스위치에 연결되어 있는 것을 "네트워크" 라고 한다.


❗️ 만약 예림이와 혜림이가 각각 다른 스위치에 연결되어있다면?

그럼 스위치와 스위치를 연결함으로서 통신을 진행하는데, 그것을 "라우터" 라고 한다.
그리고 이 라우터가 공유기에 해당된다.

이렇게 수 많은 네트워크들이 라우터를 통해 연결된것이 우리가 생각하는 "인터넷" 인 것!
이런 통신을 진행하기 위해 실제로 해저 케이블이 전선의 역할을 하게된다. 해저 케이블을 통해 세계는 진짜 실제로, 물리적으로 연결이 되어있다!!! 해저 케이블 관리자분들 화이팅! 💪




이제 실제로 전선을 통해 두 대의 컴퓨터가 데이터를 주고 받는다는 것을 알게되었다. 그럼 여러 대의 컴퓨터가 데이터를 주고 받기 위해선 어떤 과정이 필요할까?

만약 예림이라 여러명의 친구들과 채팅을 하고 있다고 가정해보자.

  • 각 컴퓨터가 예림이에게 0101 이라는 데이터, 1111 이라는 데이터, 0001이라는 데이터를 보낸다
  • 데이터가 동시에 도착하면 예림이의 컴퓨터에 010111110001 이라는 데이터가 도착하는 걸까?
  • 데이터가 혼합된다면 누가 어떤 데이터를 보냈는지 어떻게 구분할 수 있을까?

수신자의 컴퓨터는 각 컴퓨터가 보낸 데이터를 똑바로 구분해서 읽어야 하는데, 데이터를 구분할 수 있도록 송신자의 컴퓨터는 보내고자하는 데이터의 앞뒤로 특정한 비트열을 붙이게 된다.

예를 들어 0101 데이터를 보낸 송신자의 컴퓨터는 데이터의 앞뒤로 11110000을 붙여 111101010000 형식의 데이터를 보내는 것.

아까 예림이가 3대의 컴퓨터로부터 받은 데이터는 111101010000 111111110000 111100010000의 형태로 받아서 데이터를 구분할 수 있다.

이렇게 원본 데이터를 특정한 비트열로 감싸는 과정을 "Framing" 이라고 한다.


  • 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해 필요한 모듈이다. (1계층 모듈처럼)
  • "Framing"은 Data-Link 계층에 속하는 작업들 중 하나이다.
  • 데이터를 특정 비트열로 감싸거나 감싸진 데이터를 해석하기위해 컴퓨터는 2계층 Encoder/Decoder 를 갖고있게 된다.
  • 1계층과 같이 2계층도 "랜카드" 라는 물리적 모듈로 구현되어있다.

❗️ 1~2 계층 통신 과정을 정리해보자!

  1. 컴퓨터는 데이터를 보낼 때 2계층 Encoder에 비트열을 넣어 Framing 작업을 한다.
  2. 그 후 작업을 마친 데이터를 1계층 Encoder에 넣어 아날로그 신호로 변경하고, 전선으로 신호를 내보낸다.
  3. 수신자 컴퓨터는 전선으로 아날로그 신호를 받고, 1계층 Decoder로 신호를 비트열로 해석한다.
  4. 비트열로 해석된 데이터를 2계층 Decoder에 넣어 실제 데이터를 해석한다.



📡    3 계층 :   Network Layer

특정 컴퓨터에게 데이터를 전송하기 위해 송신자 컴퓨터는 수신자 컴퓨터의 IP 주소를 알고있어야 한다. 목적지인 IP 주소를 전달하고자 하는 데이터 앞에 붙이게 되는데 이것을 "패킷(packet)" 이라고 한다.

IP 주소가 55.10.54.75 인 컴퓨터로 데이터를 전달한다고 가정해보자.
그럼 송신자 컴퓨터는 55.10.54.75 data 형태의 데이터를 내보낸다. Framing까지 완료된 데이터는 포장된 패킷이 되어 라우터에 전달된다.

라우터는 해당 패킷을 뜯어보고 자신과 직접적으로 연결된 컴퓨터 중 IP주소가 같은 컴퓨터가 있는지 확인한다.
이때 해당하는 수신자 컴퓨터가 없을 때 라우터는 자신 상위의 라우터에게 패킷을 다시 포장해서 전달한다. 그리고 상위 라우터는 자신과 연결된 수 많은 라우터 중 어디로 보내야할지 결정하게 된다.

라우터가 데이터의 목적지를 선택하는 과정을 "라우팅(Routing)" 이라고 한다. 라우터는 라우팅 테이블이라는 어떠한 표를 갖고 있고, 이 표에는 자신과 연결된 목적지의 주소들이 나열되어있다.

라우터는 패킷의 헤더에서 목적지에 대한 정보를 얻고, "라우팅 프로토콜(Routing Protocol) 을 통해 패킷을 식별해서 전달해야하는 네트워크 경로를 선택한다.


❗️ 그래서 결국 Network Layer란?

  • 수많은 네트워크들의 연결로 이뤄지는 인터넷(inter-network) 속에서 수신자 컴퓨터로 데이터를 전달하기 위해 IP 주소를 사용해서 길을 찾아 (routing) 다음 라우터에게 데이터를 넘겨주는 것
  • 라우터가 다음 라우터에게 데이터를 넘겨주는 과정을 "forwarding" 이라고 한다.
  • 라우터는 운영체재 커널에 소프트웨어적으로 구현되어있다.

❗️ 1~3 계층 통신 과정을 정리해보자!

  1. 송신자의 컴퓨터는 3계층 Encoder에 전송하고자 하는 데이터를 인풋으로 넣고, 아웃풋으로 IP 주소가 앞에 붙은 데이터가 생성된다. 아웃풋은 객체와 같은 형식이라고 할 수 있다.
  2. 3계층 Encoder의 아웃풋을 2계층 Encoder의 인풋으로 넣고, 아웃풋으로 특정 비트열로 감싸진 데이터를 생성한다.
  3. 2계층 Encoder의 아웃풋을 1계층 Encoder의 인풋으로 넣어 아날로그 신호를 만든 다음 전선을 통해 데이터를 라우터에게 전달한다.
  4. 라우터는 전달받은 아날로그 신호를 1계층 Decoder를 이용해 비트열로 해석한다.
  5. 해석된 비트열은 라우터의 2계층 Decoder의 인풋으로 들어가 아웃풋으로 특정 비트열이 제거된 데이터 (수신자의 IP와 데이터)를 생성한다.
  6. 2계층 Decoder의 아웃풋은 3계층 Decoder의 인풋으로 들어가 데이터 자체를 아웃풋으로 생성한다.
    • 이때 IP 주소는 포워딩 과정에 사용된다.
  7. 데이터 해석을 마친 라우터는 데이터를 다른 라우터에 전달하기 위해 다시 한번 Encoding을 한다.
    • 3계층 Encoder로 IP 주소를 데이터 앞에 다시 추가한다.
    • 2계층 Encoder로 특정 비트열을 추가해서 데이터의 시작과 끝을 표시한다.
    • 1계층 Encoder로 데이터를 아날로그 신호로 변경한 뒤 전선으로 데이터를 다음 라우터에게 전달한다.



📡    4 계층 :   Transport Layer

이제 컴퓨터는 전세계 어디에서든 데이터를 송수신할 수 있다. 하지만 특정 컴퓨터가 데이터를 여러개를 전달 받는다고 했을 때, 해당 데이터들이 어떤 프로그램(프로세스)을 위한 데이터인지 어떻게 구분할 수 있을까?

아래 사진처럼, 3가지 데이터를 받는다고 하고, 사용자의 컴퓨터엔 현재 2개의 프로그램이 실행중이라고 한다면, 어떤 데이터가 어떤 프로그램에 사용되는 데이터인지 컴퓨터는 구분해야만한다.

데이터를 받는 프로세스들은 각자 "포트번호"를 갖고 있다.

  • 포트번호: 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값.
    • localhost3000 에서 3000이 포트번호에 해당한다.
    • 위의 사진 예시에서 코코아톡은 포트번호 8081을, 배달의 부족은 포트번호 9000을 갖고있다.

송신자는 데이터를 보낼 때 해당 데이터가 도달해야하는 프로세스의 포트번호가 포함되어야 한다.


❗️ 그래서 결국 Transport Layer란?

  • port 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 데이터가 도달하도록 만드는 모듈이다.
  • 송신자와 수신자 간의 신뢰성있고 효율적인 데이터를 전송하기 위하여 오류검출 및 복구, 흐름제어와 중복검사 등을 수행한다.
  • 전송 계층에서 데이터 단위는 "세그먼트(Segment)"라고 한다.
  • 전송 계층은 운영체재 커널에 소프트웨어적으로 구현되어있다.

❗️ 4 계층 통신 과정을 정리해보자!

  1. 송신자 컴퓨터는 4계층 Encoder를 통해 데이터 앞에 도착해야하는 프로세스의 포트번호를 추가한다.
  2. 해당 데이터는 3계층 Encoder를 통해 수신자 컴퓨터의 IP 주소를 추가한다.
  3. IP 주소까지 추가된 데이터는 2계층 Encoder의 인풋으로 들어가 Framing되어 아우풋으로 생성된다.
  4. Framing까지 완료된 데이터는 1계층의 Encoder를 통해 아날로그 신호로 변경되어 전선을 통해 라우터에 도착한다.
  5. 데이터를 전달받은 라우터는 1계층 Decoder를 통해 비트열로 아날로그 신호를 해석한다.
  6. 라우터는 해석된 비트열을 2계층 Decoder를 통하여 데이터의 시작과 끝을 구분한다.
  7. 라우터는 3계층 Decoder를 이용해 IP 주소를 확인하고, 다시 3-2-1 계층의 Encoder를 이용해서 데이터 패킷을 다음 라우터에게 전달한다.
  8. 수신자 컴퓨터는 라우터를 통해 데이터를 받는다.
  9. 데이터가 수신자 컴퓨터에 도착하면, 해당 컴퓨터는 1-2-3 계층 Decoder를 사용해서 포트번호와 데이터를 알아낸다.
  10. 수신자 컴퓨터는 4계층 Decoder를 이용해서 포트번호를 제외한 데이터 자체를 해당 포트번호를 갖고있던 프로세스에게 전달한다.



📡    5 계층 :   Session Layer   /   6 계층 :   Presentation Layer

❗️ Session Layer

이렇게 1~4단계를 통해 두 대의 컴퓨터가 데이터를 주고 받는 "통신"을 진행한다. 이때 해당 통신의 시작과 종료를 담당하는 계층이 바로 Session Layer다.

통신이 시작될 때부터 종료될 때까지의 시간을 세션이라고 하기 때문에 해당 작업을 담당하는 계층이 세션 레이어가 되는 것!

세션 계층은 교환되고 있는 모든 데이터를 전송할 수 있도록 충분히 오랫동안 세션을 개방한 다음 리소스를 낭비하지 않기 위해 세션을 즉시 닫을 수 있도록 조취를 취해야한다.

또한 세션 계층은 데이터 전송을 체크포인트와 동기화하는 작업을 담당한다.

  • 예를 들어, 100MB의 파일이 전송되는 경우 세션 계층이 5MB마다 체크포인트를 설정할 수 있다.
  • 52MB의 데이터가 전송 된 후 연결이 끊어 지거나 에러가 발생하면 마지막 체크 포인트에서 세션을 재개한다.
  • 즉, 5MB마다 체크포인트가 지정되었기 때문에, 52MB 이전 마지막 체크포인트인 50MB 부터 시작해서 50MB의 데이터만 더 전송하면 되는 것.
  • 체크 포인트가 없으면 전체 전송을 처음부터 다시 시작하게 된다.

❗️ Presentation Layer

프레젠테이션 계층은 데이터의 변환, 암호화, 압축을 담당한다. 송신 측과 수신 측 사이에서 데이터의 형식(png, jpg 등)을 정하고, 받은 데이터를 코드 변환, 구문 검색, 인코딩 - 디코딩 및 암호화, 압축의 과정을 통해 올바른 표준 방식으로 변환한다.

  • 데이터를 압축할 경우, 전송할 데이터의 양이 최소화되기 때문에 통신의 속도와 효율을 높일 수 있다.

서로 통신하는 두 개의 통신 장치는 서로 다른 인코딩 방법을 사용하고 있을 수 있으므로, 계층 6은 수신 장치의 애플리케이션 계층이 이해할 수 있는 구문으로 수신 데이터를 변환하는 일을 담당하는 것이다.

장치가 암호화된 연결을 통해 통신하는 경우, 계층 6은 최종 송신자에게 암호화를 추가할 뿐만 아니라 최종 수신자에게 암호화를 디코딩하여 암호화되지 않은 읽기 쉬운 데이터로 애플리케이션 계층을 제시할 수 있도록 하는 역할을 맡기도 한다.




📡    7 계층 :   Application Layer

운영체제의 Transport Layer에서 제공하는 API를 활용해 통신 가능한 프로그램을 만드는 것을 네트워크 프로그래밍이라고 한다. (TCP / IP 소켓 프로그래밍이라고도 한다.)

이 프로그래밍만으로도 클라이언트 프로그램과 서버 프로그램을 따로따로 만들어서 동작시킬 수 있다. 또한 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있다.

  • Application Layer 인코더와 디코더를 만들 수 있다는 것은, 누구나 자신만의 Application Layer 프로토콜을 사용할 수 있다는 것을 의미한다.
  • 대표적인 Application Layer의 프로토콜은 "HTTP 프로토콜" 이다.


❗️ 그래서 결국 Application Layer란?

  • 이 계층은 사용자의 데이터와 직접 상호 작용하는 유일한 계층이다.
  • 사용자로부터 정보를 입력받아 하위 계층으로 전달하고 하위 계층에서 전송한 데이터를 사용자에게 전달한다.
  • 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 네트워크에 연결 및 수행하는 역할을 맡고 있다.
  • 대표적인 프로토콜로는: HTTP, DNS, Telnet, FTP 등이 있다.



📡 계층모델 정리

  • 네트워크 시스템은 하나의 거대한 소프트웨어라고 할 수 있다.
  • OSI 7 Layer 모델은 이 소프트웨어의 구조를 설명한 것이다.
  • 하지만 현재 인터넷은 OSI모델이 아닌 TCP/IP 모델을 따른다.

  • TCP / IP 모델은 업데이트되어 현재 가장 오른쪽에 있는 모델을 사용하고 있다.
  • 계층 구조(Layer)는 네트워크뿐만 아니라 운영체제 등 다양한 분야에서 적용되는데, 계층 구조를 사용하는 목적은 분할 정복(Divide and Conquer) 때문이다. 쉽게 말하자만 어떠한 복잡한 문제를 해결하고자 할 때, 나누어 생각하면 쉽게 해결할 수 있다는 취지인 것이다.
  • 계층 구조의 또 다른 특징은 위(Up), 아래(Down) 층으로만 이동할 수 있다는 점이다.
    • 건너뛰어서 맨 위층 또는 맨 아래층으로 갈 수 없다. 즉, 다음 단계로 넘어가려면 이전 계층이 전제 조건이 되어야 한다.


출처

profile
공부하느라 녹는 중... 밖에 안 나가서 버섯 피는 중... 🍄
post-custom-banner

0개의 댓글