s

네트워크 공부 키워드_네트워크 계층(OSI7 Layer, TCP/IP Layer)

OSI 7 Layer

일반적으로 네트워크를 7개의 계층으로 바라보자 라는 시각으로 OSI 7 Layer을 만들었다. 각각의 계층은 그림에서 보다 싶이 Application Layer, Presentation Layer, Session Layer, Transport Layer, Network Layer, Data Link Layer, Physical Layer로 구성되어 있다. 다만 실제로는 위와 같이 쓰이지 않는다. 그렇다면 왜 이것을 공부할까?

개발을 하다보면 추상화가 얼마나 중요한지 알 것이다. 이 추상화를 어떻게 하느냐에 따라서 복잡한 일이 쉬워질 수도 있고, 쉬운일이 복잡해질 수 있다. 그런 복잡한 것을 미리 이렇게 정의하고 모두가 알고 있다면 더 쉬워지지 않을까? 라는 관점으로 보면 좋을 것 같다.

각 나누어서 다시 봐보자.

  1. Physical Layer(물리적 계층): 케이블, 스위치 등 데이터 전송과 관련된 물리적 장비가 포함된다. 두 장치의 물리적인 계층은 두 장치의 1, 0이 구별이 된다.
  2. Data Link Layer(데이터 연결 계층): 동일한 네트워크에 있는 두 개의 장치 간 데이터 전송을 용이하게 한다. 네트워크 계층에서 가지고와, 프레임이라고 불리는 더 작은 조각으로 세분화 한다. 네트워크 통신에서 흐름 제어 및 오류제어를 담당한다.
  3. Network Layer(네트워크 계층): 서로 통신하는 두 장치가 동일한 네트워크에 있는 경우에는 네트워크 계층이 필요하지 않는다. 전송 계층의 세그먼트를 패킷이라는 작은 단위로 분리한다. 최상의 물리적 경로를 찾는데 이를 라우팅이라고 한다. 여기에는 IP, ICMP(인터넷 제어 메시지 프로토콜), IGMP(인터넷 그룹 메시지 프로토콜), IPsec등이 있다.
  4. Transport Layer(전송 계층): 두 기기간 종단 간 통신을 한다. 데이터를 세그먼트라고 하는 조각으로 분할한다. 흐름제어 및 오류 제어 기능을한다. 빠른 송신자가 연결 속도가 느린 수신자를 압도하지 않도록 속도 조절을 결정하게 만들어진다. 여기에는 TCP(전송 제어 프로토콜), UDP(사용자 데이터그램 프로토콜)이 있다.
  5. Session Layer(세션 계층): 두 기기 사이의 통신을 시작하고 종료하는 일을 담당하는 계층. 세션을 연 다음 리소스를 낭비하지 않도록 세션을 닫을 수 있다. 또한 세션 계층은 데이터 전송을 체크포인트와 동기화한다.
  6. Presentation Layer(프레젠테이션 계층): 애플리케이션이 소비할 수 있도록 데이터를 변환, 암호화, 압축을 한다. 두개의 장치는 서로 다른 인코딩 방법을 사용하고 있을 수 있어 이를 변환하여 사용할 수 있다. 압축을 하여 데이터 양을 최소화 하여 통신의 속도와 효율을 높이기도 한다.
  7. Application Layer(응용 프로그램 계층): 사용자의 데이터를 직접 상호 작용하는 계층이다. 여기에는 HTTP, SMTP이 있다.

TCP/IP Layer

일반적으로 바라보고 개발해야하는 범위로 크게 나누었을 때 4개로 나눈 것이다. 각각의 계층은 위에서와 마찬가지로 Application Layer, Transport Layer, Internet Layer, Network Interface Layer가 있다.

Network Interface Layer(네트워크 계층)

실질적으로 컴퓨터를 고유한 주소를 통해 이어질 수 있게 한다. 고유한 주소를 어떻게 부여할까? 라는 주제가 여기서 가장 중요하게 살펴봐야한다. 일단 이런 고유한 주소를 위한 장치로 NIC(Network Interface Controller)를 사용한다.

NIC(출처: 위키피디아)

이 인터넷 프로토콜을 표시하기 위해 MAC(Media Access Control)주소를 사용한다. 여기서는 미디어는 유선(인터넷 케이블, 광섬유 케이블)이나 무선(와이파이)를 뜻한다. 즉 모든 구분할 수 있는 주소라는 뜻이다.

이런 장치와 나타내는 것 때문에 고유한 아이디로 통신할 수 있는 것이다.

Internet Layer(인터넷 계층)

우리가 당장 우리 동네를 떠나게 되면, 다른 동네의 사람들은 내 이름을 들을 수 없다. 그래서 어디에 사는 누구입니다 라는 말을 통하여 그나마 어디 지역에 사는 사람인지 알 수 있다. 컴퓨터는 더욱 그렇다. 한 사람이서 수십가지의 컴퓨터를 가지고, 또한 그 내부에서 인터넷 계층은 몇개를 가지고 있다고 생각하면 얼마나 많은지 생각할 수 없다. 이를 어떻게 나눌까? 특히 한국에서는 IP를 통하여 자신이 어디에서 왔는지 대략적인 정보를 표시해준다.

그렇다면 명확히 어디로 가야한다라는 것은 어떻게 보여줄까? 바로 위에서 말한 네트워크 계층에서 MAC을 통하여 보내줄 수 있다. 이에 관련된 기기는 네트워크 스위치 또는 라우터가 일반적으로 담당한다. 추가적인 내용은 네트워크 스위치란? 에서 확인할 수 있다.

Transport Layer(전송 계층)

여기서부터는 드디어 소프트웨어에 들어간다. 위에서 인터넷 계층으로 어디에 사는 누구인지 밝히는 과정을 했다고 하면, 여기서부터는 수많은 동명이인 중 정확히 나이순으로 몇번째인 누구 라고 이야기 하는 것이다. 즉 헷갈릴 수 없도록 명확하게 짜는 것이다. 이 이유는 한 컴퓨터 내에는 여러개의 애플리케이션이 돌아갈 수 있기 때문이다. 그래서 그 프로그램들을 관리하는 운영체제가 포트를 확인하여 다른 응용프로그램으로 보낸다.

Application Layer(응용 계층)

실질적으로 그 프로그램이 원하는 데이터가 무엇인지 어떻게 전달하면 좋을지 정하는 것이다. 웹의 경우에서는 HTTP를 일반적으로 사용하며, 이를 프로토콜이라고 부른다. 프로토콜은 서로가 어떻게 보면 좋을지 생각하는 약속하는 규약이라고 생각하면 좋다. 자세한 내용은 프로토콜이란? 에서 확인하면 좋다. 이를 통하여 실질적으로 데이터를 생성하는 부분이다.

정리

위와 같이 여러개의 계층을 나누어 관리하는 모습을 볼 수 있다. 이런 Layer아키텍쳐의 장점은 자세하게 모르더라도 자신의 Layer와 바로 관계되어 있는 Layer만 안다면 알기 쉽다. 프론트엔드 경우에는 네트워크 계층까지는 모르더라도, 최소한 Internet Layer와 Transport Layer가 무엇을 아는지 알아야 하고, Application Layer의 경우에는 어떻게 돌아가는지 잘 알아야 할 것이다.

Documentation