osi7계층과 tcp/ip모델

ㅇ.ㅇ·2022년 7월 6일

레퍼런스
https://velog.io/@dev-joon/OSI-7-Layer%EB%A5%BC-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90

OSI 7계층이란

  • 네트워크에서 통신이 일어나는 과정을 7단계로 계층화하여 나눈 것을 말한다
  • 7단계로 나눈 이유
    통신이 일어나는 과정을 단계별로 파악하여 특정한 곳에 이상이 생긴다면 다른 단계의 장비 또는 소프트웨어를 건들이지 않고 이상이 생긴 단계만 고칠수 있기 때문이다.
    OSI 7계층은 다음과 같이 나뉜다.

  • 하지만 OSI 7 Layer Model은 참조 모델일 뿐 실제 사용되는 인터넷 프로토콜은 이 7계층구조를 완전히 따르지 않는다. (왜? : OSI 모델이 TCP/IP 모델과의 시장 점유율에서 졌기 때문)
  • 근래의 인터넷 프로토콜 스택은 현재 대부분 TCP/IP 모델을 따르며
    이 TCP/IP 모델 또한 한번 업데이트 되어 TCP/IP Updated 모델을 이제 주로 쓴다고 한다.

따라서 이번에 살피는 OSI 7 모델과 TCP/IP 모델은 전부 다 살피는 것이 아닌, 근래에 많이 쓰이는 TCP/IP Updated 모델이다. 5계층과 6계층의 Session Layer와 Presentation Layer는 Application Layer 하나로 뭉뚱그려 살펴볼 것이다.

1계층: Physical Layer

정의

0과 1로 이루어진 데이터 신호를 아날로그 신호로 바꾸어 전선을 흘려 보내고(encoding) 아날로그 신호가 들려오면 0과 1의 나열로 해석하여(decoding) 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고 받을 수 있게 해주는 모듈이다.

깊게생각하기

  • 모든 파일과 프로그램은 0과 1의 나열로 이루어져 있다. 결국 두 대의 컴퓨터가 서로 통신한다는 것의 의미는 두 대의 컴퓨터가 0과 1로 이루어진 데이터들을 주고 받는다는 의미이다.
  • 그렇게 되기 위해서는 두 대의 컴퓨터를 물리적인 전선으로 연결할 필요가 있다. 두 대의 컴퓨터를 하나의 전선으로 연결한다고 가정할 때, 0과 1로 이루어진 데이터를 전송하는 방법은 한쪽에서 일정 이상의 전압을 가하면 1, 전압을 가하지 않는다면 0으로 해석하기로 이론상 약속할 수 있다.
  • 이론상의 방식을 따른다면, 이런 방식으로 할 경우 x축이 시간, y축이 전압인, 곡선이 아닌 직선과 직각으로 이루어진 sin함수 비스무리한 형태의 전자기파 그래프처럼 통신을 해야한다.
  • 하지만, 수직선과 수평선으로 이루어진 전자기파는 항상 0~무한대 헤르츠의 주파수 범위를 가지기에 물리적으로 이러한 형태의 전기신호를 통과 시킬 수 있는 전선은 없다.
  • 따라서 우리는 실제로 전송을 할 수 있는 형태인 아날로그 형태의 전기신호로 두 대의 컴퓨터를 연결해야 한다.
    결론은 정의로 돌아온다
  1. 0과1로 이루어진 디지털 데이터들을 아날로그 형태로 바꾸어 전선으로 흘려 보내고.(encoding)
  2. 전선을 통해 들어온 아날로그 신호를 다시 0과 1로 이루어진 디지털 신호로 해석한다.(decoding)
  3. 따라서 Physical Layer라는 것은, 물리적으로 연결된 두 대의 컴퓨터가 전송하는 아날로그 신호를 디지털 신호로 변환하고/재변환을 해줄 수 있게 해주는 모듈이다.
어디에 구현이 되어있는가?

PHY칩

위의 사진처럼 1계층 Physical Layer의 모듈은 사실, 하드웨어적으로 구현되어 있다.
즉, 물리적인 회로인 것이다.

위의 1계층 Physical Layer에서는 두 대의 컴퓨터를 전선 하나로 연결했었다.
하지만 만약에 단순히 두 대의 컴퓨터가 아닌 여러대의 컴퓨터를 연결하고자 한다면 우리는 전세계의 수많은 컴퓨터들을 모두 전선으로 연결해야 할까?
그것은 너무나도 비효율적이기에 우리는 적은 수의 전선으로 여러 대의 컴퓨터와 연결을 할 수 있는 보다 효율적인 방법을 모색해야한다. 이를 위해 나온 것이 바로 버스 토폴로지와 스타 토폴로지 이다.

버스 토폴로지

버스 토폴로지는 모든 컴퓨터가 하나의 전선(Bus)에 연결되어 있으므로, 한 대의 컴퓨터가 전기신호로 데이터를 전송하게 된다면, 의도한 컴퓨터 외의 연결되어 있는 다른 모든 컴퓨터들 또한 데이터를 수신하게 됩니다.

스타 토폴로지

스타토폴로지는 버스 토폴로지의 컴퓨터들이 버스에 접촉하는 부분들을 모두 모아서 하나의 중계장치에 구겨넣은 것과 같은 구조를 지닌다. 이때 구겨넣은 중앙의 중계기 역할을 하는 기계장치를 허브라고 부른다
허브의 역할은 자신이 수신한 신호를 자신에게 연결되어 있는 모든 컴퓨터들에게 전달하는 것이며 많은 컴퓨터들에게 전달하기에 신호 강도를 유지하기 위해 신호 증폭을 수행한다.
이때 연결된 모든 컴퓨터에게 신호를 전달하는 것이 아닌 원하는 특정한 컴퓨터에게만 신호를 전달할 수 있도록 허브를 개량한 것이 바로 스위치이다.

이렇게 하나의 스위치를 중심으로 여러 대의 컴퓨터들이 연결되어 있는 구조를 네트워크라고 칭하자

그렇다면 각각 서로 다른 2개의 네트워크 상에 위치한 두 대의 컴퓨터가 서로 데이터를 교환하고 싶을 때는 어떻게 하면 좋을까?
-> 스위치와 스위치를 연결하여 서로 다른 네트워크를 연결한다.
이때 이를 가능하게 하는 장비를 라우터라고 한다.
이때 보통 스위치와 라우터는 서로 결합되어 있으며 이를 보통 공유기라고 부른다.

  • 수많은 네트워크들을 연결하기 위해 라우터와 라우터를 연결하여 필요할 시 상위의 새로운 라우터를 두어 또다시 라우터와 라우터를 연결하여 전세계의 컴퓨터들이 계층구조로 연결된 거대한 네트워크 그물망이 바로 인터넷이다.

여담으로 국가와 국가간의 장거리 네트워크를 연결하기 위해 지어진 시설들이 바로 해저케이블 같은 것들이다.

정의

같은 네트워크상에 있는 여러 대의 컴퓨터들이 데이터를 주고 받기 위해서 필요한 모듈이다.
이때 Framing은 Data Link Layer에 속하는 작업들 중 하나이다.

깊게 생각해보기

  • 스위치로 연결되어 있는 하나의 네트워크 내에 속한 한 대의 컴퓨터 A에게 나머지 컴퓨터들이 거의 동시에 데이터를 전송했다고 가정해보자.
  • 그렇다면 그 컴퓨터 A가 받은 데이터는 대략 10101010101010101010111000... 이런식으로 누가 보낸 데이터인지 구분할 수 없게 마구잡이로 연겨로디어 있을 것이다.
  • 이렇게 뒤섞인 데이터를 구분할 방법이 필요함을 느끼고, 이를 해결하기 위해 생긴 것이 Framing 이라는 작업이다.
  • Framing: 송신자가 자신이 송신하는 데이터의 앞 뒤에 특정한 비트열을 붙이는 작업이다.
    수신자는 이 비트열을 다른 데이터들과 구분할 수 있는 구분자로써 이용한다.
    ex)0101 0101이라는 데이터를 보낼 때, 앞에는 1111을, 뒤에는 0000을 붙이는 식이다.
  • 이러한 방식으로 인해 컴퓨터 A는 순서를 알 수 없게 뒤섞인 데이터 열을 이제 구분할 수 있게 된다.

어디에 구현이 되어있는가?

랜카드

2계층 Data Link Layer 또한, 1계층처럼 하드웨어적으로 구현되어 있다.

3계층: Network Layer

네트워크 계층은 네트워크에서 아주아주 중요한 계층이다.
수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 목적지로 지정한 컴퓨터로 데이터를 전송하기 위해 IP Address를 이용해서 길을 찾고(Routing) 자신 다음의 라우터에게 데이터를 넘겨주는것(forwarding)이 바로 Network Layer가 담당하는 기능이다.

주소부여(IP)/경로설정(Routing)

조금만 깊게 가보자

라우팅(Roouting)

데이터를 목적지까지 안전하고 빠르게 전달하는 기능을 말한다

  • 수많은 네트워크들로 복잡하게 얽히고 계층화되어 있는 inter-network 속에서 목적한 컴퓨터를 향해 최소한의 경로와 시간으로 경로를 선택하고 주소를 정하고 그 경로에 따라 패킷을 전달해주는 것이 바로 라우팅이다.

  • 네트워크 계층은 사용되는 프로토콜 종류도 다양하고 라우팅하는 기술도 다양하다.
    더 많은 것을 알고 싶지만 굉장히 복잡하고 많은 공부량이 예상되므로 라우팅에 대한 자세한 내용을 다음에 공부해보자

  • IP
    - 컴퓨터에게 데이터를 전송할때는 헤딩 컴퓨터의 주소를 알고 있어야 합니다.
    이때 네트워크 주소를 지정해주는 것이 IP입니다.

    • 데이터의 패킷은 목적지의 IP Address가 전송하고자 하는 데이터의 헤더에 붙어있는 형식으로 되어있다.

    어디어 구현이 되어 있는가?
    운영체제의 커널에 소프트웨어적으로 구현되어 있다.

    4계층 : 전송계층

    정의

    Port번호를 사용하여 IP Address로 명시된 목적지 컴퓨터의 최종 도착지인 프로세스(프로그램)에 까지 데이터가 도달하도록 하는 모듈이다.

  • 4계층 Transport Layer은 말그대로 통신을 활성화하기 위한 계층입니다.
    양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받게 해주는 역할을 합니다.

  • 보통 TCP 프로토콜을 사용하여 port를 열어서 원하는 프로세스가 데이터를 전송하고 받을 수 있도록 한다

  • 대표적인 프로토콜은 tcp와 udp 프로토콜이 있다.

  • 패킷 생성시 포트 번호를 데이터에 덧붙인다
    ex) ip address|port number | data

    깊게가보자
    1,2,3계층을 통해 이제 인터넷 상의 모든 컴퓨터가 서로 데이터를 교환하며 통신할 수 있게 되었다.
    그러면 이제 받은 데이터를 활용해보자

    전세계로부터 받은 데이터를 원하는 프로세스(실행중인 프로그램)에게 주기 위해서는
    컴퓨터가 어떤 데이터를 어떤 프로세스에게 주어야 하는지 알고 있어야 한다
    => 이를 위해 만들어진 가상의 관문이 바로 포트 번호이다.

  • 포트란
    우리는 ip 주소를 통해 원하는 서버를 찾아낸다 포트는 ip address를 통해 찾아낸 서버 내에서 원하는 프로그램으로 연결해주는 가상의 관문이다.
    포트 번호는 어떠한 프로세스(프로그램)으로 접속할 것인지 컴퓨터에게 알려주는 역할을 한다.

  • 송신자는 데이터를 보낼 때, 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트번호를 붙여서 보낸다. ex) port: 80| ip address | data

  • 따라서 데이터 전송자는 목적지 프로세스의 포트 번호를 알고 있어야 한다. 하지만 각기 원하는 대로 포트 번호를 마구 지정하는 것을 방지하기 위해 자주 쓰이는 포트번호들과 임시로 지정하는 범위가 규격화 되어 정해져있다.

  • 포트 번호 규정
    - Well known port ~1023
    의미 그대로 정말 잘 알려진 포트를 의미한다. 80번의 http, 22번의 ssh와 같이 자주 사용되는 포트들에 해당한다.

    • Registered port 1024~49151
      특정 용도로 사용하기 위해서 쓰이는 포트들로 3306 포트의 mysql 80번 port를 대체하기 위한 8080포트 (웹서버가 2개 이상인 경우)등이 있다.
    • dynamic port 1024~49151
      특정 용도로 사용하기 위해서 쓰이는 포트들로 3306 포트의 mysql, 80번 port를 대체하기 위한 8080 포트(웹서버가 2개 이상인 경우) 등이 있다.
    • dynamic port 49151~65535
      특별히 지정되지 않은 포트들로 자유롭게 사용해도 무방하다

어디에 구현이 되어 있는가?
특별히 지정되지 않은 포트들로 자유롭게 사용해도 무방하다

어디에 구현이 되어 있는가?
3계층과 마찬가지로 운영체제의 커널에 소프트웨어적으로 구현이 되어 있다.

5계층:session Layer + 6계층 Presentaion Layer + 7계층: Application Layer => Application Layer

정의
사용자가 필요로 하는 인터페이스와 프로토콜을 제공하는 계층이다.
5계층 Session Layer와 6계층 Presentation Layer와 7계층 Application Layuer에 있는 기능을 결합한다.

  • 사용자가 네트워크의 서비스를 쉽게 사용할 수 있도록 돕는다.
  • 네트워크 기반 응용 프로그램을 개발하는데 이용된다.
  • 사용자 로그인, 네트워크 장치 이름 지정, 메시지 및 이메일 형식 지정, 파일 전송 등과 같은 서비스를 제공한다.

대표적인 프로토콜로는

  • http:하이퍼미디어 데이터가 전송되는 방식을 정의한 프로토콜
  • ftp(file transfer protocol):클라이언트와 서버 간에 파일을 전송하기 위한 클라이언트/서버 기반 프로토콜
  • smtp(file transfer protocal):이메일을 보내고 받기 위한 프로토콜
  • dns:도메인 네임 <- ip address간의 변환 프로토콜
  • telnet:네트워크를 통해 호스트에 원격 로그인을 위한 프로토콜

그 외

TCP/IP socket programing

  • os의 transfer Layer에서 제공하는 api를 활용하여 통신가능한 프로그램을 만드는 것을 tcp/ip socket programming 또는 네트워크 프로그래밍이라고 한다.
  • 소켓 프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로따로 만들어서 동작시킬 수 있다.
    tcp/ip socket programming을 통해 누구나 자신만의 Application Layer 인코더와
    디코더를 만들 수 있다. -> 누구든 자신만의 Application Layer protocol을 만들 수 있다.

마치며

소프트웨어 아키텍처 중에 layere 아키텍처라는 것이 있다.
그리고 이 layered architecture를 따르는 대표적인 예시가 바로 네트워크 시스템이다.
-> 네트워크 시스템은 하나의 거대한 소프트웨어이면 osi 7계층은 이 거대한 소프트웨어의 구조를 설명하는 것입니다.

profile
기록과 정리하는것을 계속해서 하려고 노력중이에요 😊

0개의 댓글