인터넷의 동작 원리(OSI 7 layer)

Song-YunMin·2021년 2월 2일
4

Network

목록 보기
2/9
post-custom-banner

서론

오늘은 OSI 7 Layer1에 입각하여 인터넷의 동작 원리를 정리하고자 합니다.
사실 대학 네트워크 프로그래밍 시간 때 많이 학습한 내용이긴 하지만. 언제나 그렇듯이 항상 까먹기 때문에 리마인드 한다는 느낌으로 진행하였습니다.

Physical Layer (물리 계층)

먼저 물리계층에 해당하는 허브를 통해 플로딩(Flooding) 작업을 해줘야 합니다. 이는 브로드캐스트의 성질과 유사한데, 어떤 PC의 데이터가 허브로 보내졌다면, 허브에서는 허브에 포함된 모든 PC들에게 모두 데이터를 보내줍니다. 이는 빠른 송신을 위해서인데, 허브에서 목적지에 대한 조사나 원하는 곳으로만 데이터를 전달하게 되면 허브의 작업비용은 매우 높습니다.

전달받은 PC에서는자신에게 온 데이터라면 이를 받아들이고, 아니면 그냥 무시합니다.

또한 물리 계층에서는 물리적 전기 신호가 목적지까지 안전하게 갈 수 있도록 리피터(Repeater) 역할도 수행하게 됩니다. 이 리피터도 역시 플로딩 작업을 통해 작동하기 때문에 하나의 리피터에 연결된 모든 장비는 같은 데이터를 듣게 됩니다.

물리 계층(허브)에서 전기 신호를 플로딩으로 전송하였고, 수신자 측에서는 자신의 데이터가 맞다면 해당 데이터를 받아들일지 말지 판단해야 합니다. 이 판단을 수행하는 계층이 바로 데이터 링크 계층입니다. 물리 계층에서는 신호의 내용을 전혀 확인하지 않습니다. 하지만 데이터 링크에서는 앞서 온 신호를 Frame으로 변환할 수 있습니다.

이 Frame 에는 MAC Address 라는 고유한 주소가 존재합니다. 이 주소는 무조건 유일해야 합니다. 컴퓨터를 사거나 서버를 구매하게 되는 일이 생기면 공유 네트워크 카드가 존재합니다. 이 네트워크 카드가 가지고 있는 물리적 주소가 바로 MAC Address 입니다.

데이터 링크 계층에서는 MAC Address를 통해 주소 할당을 해주어야 합니다. 물리 계층에서 온 신호를 우리가 원하는 MAC Address 에 제대로 전달 해 줄 수 있어야 데이터 링크 계층의 역할을 한 것입니다. 이 기능을 수행하는 대표적인 장치가 스위치(Switch) 입니다.

또한 데이터 링크 계층은 물리 계층에서 발생한 오류를 감지할 수 있어야 합니다. 물리 계층에서는 신호 내용에 대한 체크를 하지 않으므로, 신호 증폭에 실패하여 데이터를 받지 못하게 된다해도 이를 알 방법이 없습니다. 그렇기에 물리 계층에서 데이터의 오류가 발생한다면 이를 데이터 링크 계층에서 알아차리고 MAC Address 에 써있는 주소에게 말해 데이터를 다시 보내라고 요청해야 합니다.

Network Layer (네트워크 계층)

이더넷을 통해 인터넷에 들어온 곳이 출발점 이라면, 목적지 네트워크까지 어떤 노드를 거쳐 어떻게 도달할지 정해야 합니다. 이 흐름 제어 역할을 하는 장비가 바로 라우터(Router) 입니다. 이 라우터에 도달한 정보들을 라우터가 정해주는 방향으로 움직이게 됩니다.

라우터가 하는 라우팅을 위해 모든 네트워크 접속자는 주소를 가지고 있어야 합니다. 이 주소가 바로 IP Address 입니다.

네트워크 계층에서 수행하는 작업들은 다음과 같습니다.

  • 라우팅 : 라우팅 테이블을 통해 Packet의 다음 경로를 어디로 할지 정해주는 작업
  • 포워딩 : 라우팅 작업을 통해 결정 된 경로로 데이터를 Packet구조로 만들어 다음 라우터로 Packet으로 전달하는 작업

네트워크 계층에서는 데이터 링크 계층에서 받은 Frame을 Packet으로 관리합니다. 데이터 링크 계층에서 MAC을 보고 데이터를 전달하고 수신 받았다면, 다음 라우팅의 목적지를 위한 MAC주소가 중요합니다. 여기서 새로운 Packet을 만들어 내야 하는데, Frame을 Packet으로 나누고 IP주소를 확인합니다. 라우터의 라우팅 테이블은 IP주소에 따라 어떤 MAC주소를 부여해야 할 지가 정의 되어 있습니다. 이렇게 만들어진 새로운 Packet을 네트워크 가드애 전해주는 것이 네트워크 계층의역할 입니다.

Transport Layer (전송 계층)

전송 계층의 주 목적은 양 끝에 있는 두 사용자간에 데이터를 정확하게 전달할 수 있는가? 입니다.

네트워크 계층에서 전송한 Packet이 IP주소를 통해 원하는 네트워크에 도달 했다면, Packet에서 IP부분을 제외한 Segment의 적합성을 봐야 합니다. 즉, 전송 계층에서의 데이터 단위는 '세그먼트(Segment)' 입니다.

과거의 송신은 '회선 교환' 방식이였습니다. 이 방식에서는 굳이 전송 계층이 필요하지 않았습니다. 왜냐하면 회선 교환 방식에서는 데이터 전송을 원하는 두 지점의 회선 경로가 미리 정해진 방식이였고, 데이터가 중간에 바뀔 염려는 없었습니다. 하지만 해다 회선(경로)에 문제가 생기면 데이터를 주고받지 못하는 문제가 생겼습니다.

현대의 송신은 '패킷 교환' 으로 전부 바뀌었습니다. 경로가 정해지지 않은채로 데이터를 전송하면 네트워크 환경 안에서 임의의 경로에 따라 움직이게 되었습니다. 일부 회선이 손상 되더라도 데이터가 송신된다는 장점은 있었지만, Packet의 정확성이 문제였습니다. 이러한 문제를 해결하기 위해 생겨난 프로토콜이 TCP(Transport Control Protocol)UDP(User Datagram Protocol)입니다.

TCP는 Three Way Handshake 로 이를 정의합니다.

  1. 내가 통신을 원하는 대상에게 통신을 원한다는 메세지를 보낸다. (SYN)
  2. SYN을 받은 대상이 통신 준비가 되었다는 정보를 송신자에게 보낸다. (SYN-ACK)
  3. SYN-ACK 를 잘 받았다고 다시 한번 수신자에게 확인을 한다. (ACK)

이렇게 두 네트워크가 연결이 되었다면 데이터를 서로 주고 받으며 정확성이 보장된 데이터를 주고 받게 됩니다. 이러한 정확성 보장은 TCP의 가장 큰 특징이기도 합니다. TCP에서는 내가 보낸 데이터가 얼마나 전송 되었고, 어느 부분이 누락 되었는지 까지 판단해 양자간의 정확한 전송이 보장됩니다.

반면에 UDP는 조금 다릅니다. UDP는 신뢰성 보다는 신속함에 초점이 맞춰져 있습니다. 앞서 설명한 과정 다 필요없이 그냥 IP주소보고 데이터를 마구잡이로 보내는 과정입니다. 이는 굉장히 쓸모없어 보이지만 미디어 전송에서 빛을 발합니다. 헤더의 길이가 TCP에 비해 월등히 짧기 때문에(UDP 헤더 : 목적지 주소와 실데이터) 데이터 누락이 발생 되었는지 눈치도 못 챌 정도로 잘 보여주게 됩니다.

Session Layer (세션 계층)

앞서 전송 계층을 통해 두 네트워크간의 연결이 성립되었다면, 우리는 이를 네트워크 세션이 생성되었다고 표현합니다. 만약 TCP로 연결이 성립되면 TCP세션이라고 합니다. 형성된 세션간의 데이터 송수신을 어떻게 관리 할지에 대해 정의해야 하는데 이것이 세션 계층에서의 역할입니다. 한번 연결된 세션에서 향후 표현 계층과 응용 계층에서 어떻게 사용자에게 정보를 보여줄 것인지, 형성된 세션이 끊기지 않도록 어떻게 관리할 것인지 정의하는 것이 세션 계층의 역할입니다.

세션 계층의 역할은 아래와 같습니다.

  • 세션 설정 및 해제 방법 정의 (인증 및 허가도 포함)
  • 세션 다중화 / 단일화 : 통신 효율을 위해 세션을 다중화 할지 단일화 할지 결정
  • 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex) 결정
  • 세션 화복

운영체제 실습을 해본적이 있는 사람이라면, 리눅스를 사용할 때 원격 접속을 위해 SSH를 사용하게 되는데, SSH가 세션계층에서 작동하는 대표적인 프로토콜입니다.

Presentation Layer (표현 계층)

표현 계층에서는 전달 받은 네트워크 메시지를 사용자가 볼 수 있도록 만드는 기능을 합니다. 지금까지 누군가가 보낸 메시지를 Frame, Packet, Segment로 포장해서 전달했다면, 이 포장지를 뜯어서 사용자에게 전달하는 기능이 표현 계층의 역할입니다.

표현 계층에서 진행하는 3가지 기능은 아래와 같습니다.

  • 수신자 장치(노트북, 스마트폰 등)에 적합한 어플리케이션으로 노출 시킬 수 있도록 데이터를 해석
  • 데이터 압축
  • 데이터 암호화 / 복호화

표현 계층에서는 우리가 응용 계층에서 메시지를 볼 수 있도록 진행하는 사전 작업이자, 네트워크 환경으로 데이터를 넘기기 위해 진행하는 사전 작업으로 볼 수 있습니다. 대표적으로 MIME(Multipurpose Internet Mail Extensions) 가 표현 계층에서 작동합니다.

Application Layer (응용 계층)

응용 계층은 우리에게 친숙합니다. 네트워크 기능을 작동하는 모든 프로그램들은 응용 계층에서 작동합니다. 우리가 쓰고 있는 크롬, 사파리 등 웹 브라우저는 물론이고, 인터넷에 글을 올리는 행위, 멀티 게임을 하기 위해 접속하는 행위 모든 것이 응용 계층입니다. 간단히 표현하면, 우리가 네트워크로 접속하기 위한 사용자 인터페이스를 의미합니다.

응용 계층에는 많은 프로토콜이 존재합니다. 아래는 대표적인 응용 계층의 프로토콜 입니다.

  • 텔넷(TELNET) : 원격지의 호스트 컴퓨터에 접속하기 위해 사용하는 인터넷 프로토콜
  • DNS(Domain Name System) : 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 반대의 변환을 수행하는 프로토콜
  • FTP(File Transfer Protocol) : 서버/클라이언트 사이의 파일 전송을 위한 프로토콜
  • HTTP(Hyper Text Transfer Protocol) : WWW 상에서 정보를 주고받을 수 있는 프로토콜, HTML 문서를 주고 받는 역할 등
  • SMTP(Simple Mail Transfer Protocol) : 인터넷에서 이메일을 보내기 위해 사용하는 프로토콜

Reference

1. OSI 7계층
OSI 모형 - 나무 위키

profile
고독한 서버 개발 3년차
post-custom-banner

0개의 댓글