# CHAPTER 2 네트워크 - OSI 7계층 & TCP/IP 5계층

금성·2022년 12월 23일
0

CS 전공지식 노트

목록 보기
3/19

SECTION 2.2 - OSI 7계층 & TCP/IP 5계층 (강의 참고)

1계층 - 물리계층 ( Physical Layer )

[10분 테코톡]🔮 히히의 OSI 7 LAYER
두 대의 컴퓨터가 통신하기 위해서는?

모든 파일과 프로그램은 0과 1의 나열
=> 따라서 0과 1만 주고받을 수 있으면 통신에 성공했다고 볼 수 있음

다음 그림을 예시로 들어보자.

0과 1을 주고 받을 수 있으므로 모든 데이터를 전송 받을수 있게 되었다고 볼 수 있을까?..

다음은 전자기파를 표현한 sin함수로 예시를 들어 보자.
1초에 sin함수가 4주기 동안 진동 했으므로 4 ( hz )라고 볼 수 있음

1초동안 진동한 횟수를 주파수 (Hz) 라고 부름

하지만 모든 전자기파가 저렇게 일정하지 않음

어떤 전선5~8 ( Hz ) 의 전자기파만 통과시킬 수 있다고 가정해 보자.

위에 가정에서 최소값이 1 ( Hz ) 최대값이 10 ( Hz )인 전자기파를 보낼경우 어떻게 될까?..

5~8 ( Hz )에 해당하는 부분만 통과하여 원본과 다른 데이터가 도착

0과 1의 데이터만 주고 받을 수 있으려면 어떻게 해야할까?.
위 같은 전자기파를 주고 받으면 된다.

  • 하지만 수직선과 수평선이 있을경우 0~무한대의 주파수( hz )를 가짐
  • 따라서 0~무한대의 주파수를 가진 전자기파를 가진 전기신호를 통과시킬 수 있는 전선은 없음 (전선은 항상 한정적인 주파수를 통과)

그래서 위 신호를 아날로그로 바꿔 전송해야함

정리하자면

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

physical layer 인코딩/ 디코딩 (codec 코덱)

  • 인코더에서 input으로 data를 받고, return은 아날로그 데이터인 signal
  • 디코더에서 input으로 signal을 받고 return은 원본 data
    => 함수로 표현 가능

하지만 1계층에서는 하드웨어적으로 구현이 되어있음 (PHY 칩)
SW나 HW 모두 input을 받고 output을 만들어내는건 같음

2계층 - 데이터-링크 계층 ( Data-Link Layer )

물리계층을 통해 두 대의 컴퓨터가 어떻게 통신하는지 알 수 있었음

그러면 여러 대의 컴퓨터 간의 통신은 어떤식으로 이루어질까?..

  • 전선 꽂을 곳과 전선이 많이 필요함
  • 통신하려는 컴퓨터가 많아질수록 비용면에서 비효율적

전선하나로 여러 컴퓨터와 통신할 방법을 모색해야함
아래와 같이 연결되었다고 가정

데이터가 잘 전달 되지만 나머지 다른 컴퓨터에서도 그 데이터를 읽을 수 있음.

그러면 이제 가운데 구리선을 상자에 구겨 담아보자.

여전히 다른 컴퓨터들도 데이터를 읽을 수 있음

만약 예림 -> 혜림에게 데이터를 전달할때 상자가 메시지의 목적지를 확인해서 전달해줄 수 있는 역할을 할 수 있게 된다면?

상자는 스위치 역할을 함!

다른 상황을 또 예시를 들어보자

서로 다른 네트워크가 두개 구축되어있다고 가정

이때 데이터를 보내려면 어떻게 해야할까?

스위치를 연결해 보자.

그리고 이렇게 서로다른 네트워크끼리 통신이 가능하게 해주는 장비를 라우터라고 함 ( 우리가 잘알고 있는 공유기 )

(사진에서는 엄밀이 따지면 스위치+라우터)

그리고 이 라우터를 이용해 라우터를 라우터로 연결할 수 있음

그리고 이렇게 전 세계의 컴퓨터들을 연결한 것을 인터넷이라고 함

아래 파란색으로 표시된 케이블이 바로 = 해저케이블

1계층에 속한 기술만으로는 여러대 컴퓨터를 통신하게 할 수 없음

Data-Link Layer
세대의 컴퓨터가 동시에 데이터를 보냈다고 가정해 보자

...010111110001 과같이 쭉 이어진 데이터를 받게 된다

어떻게 끊어읽냐에 따라 올바른 데이터를 받을 수도, 아닐수도 있게 된다.

어떻게 제대로 끊어 읽을 수 있을까?

송신자는 데이터 앞 뒤에 특정한 비트열을 붙임

예를들어 앞에는 1111, 뒤에는 0000을 붙인다고 가정
0000과 1111이 나오는 부분을 찾으면 된다.

정리해보면

  • 같은 네트워크에 있는 여러 컴퓨터들이 데이터를 주고 받기위해 사용한 모듈
  • 1111과 0000으로 원본데이터를 감싸는 것을 Framing 이라고 하는데 이또한 Data_link Layer에 속하는 작업들 중 하나

3계층 - 네트워크 계층 ( Network Layer )

더 많은 컴퓨터들 사이의 통신

A에서 B로 데이터를 전송하고 싶은 경우, A컴퓨터에 B의 주소를 담아 데이터를 전송함

이 때 입력하는 주소는 각 컴퓨터의 고유한 주소를 가지게 되는데 이를 IP라고 함

예를 들어보자.

www.naver.com을 입력할 경우 이 영어 주소는 IP주소로 변환되어 사용됨 ( DNS )
즉, 다시말해 영어주소를 알고 있으면 IP주소를 알고 있는것과 다름이 없다.
=> (IP + data 형태 = 패킷( packet ))

패킷의 이동 방향 ( A가 이동해서 B로 간다고 가정 )

  1. A가 라우터 '가'로 패킷을 전달
  2. 패킷을 받은 라우터 '가' 는 패킷을 열어 IP주소를 확인
  3. 라우터 '가' 에서 연결된 컴퓨터 확인 -> 없을경우 패킷을 다시 포장
  4. 라우터 '가' 와 연결되어 있는 유일한 라우터 '마' 로 패킷 전달
  5. 라우터 '마' 는 라우터 '가' 가 했던것처럼 패킷을 열어 목적지를 확인 -> 목적지가 B라는것을 확인
    => 라우터 '마' 는 B까지 가기위해 어느 전선으로 패킷을 내보내야 할지 고민에 빠지게 됨 ( 가? 나? 바? )

여기서 라우터 '마' 에서 '바'로 전달하는것을 알아낼수 있게 해주는 라우팅에 관해 앞서 간단하게 설명 했음 *

라우터 '마' 는 라우터 '바' 에게 데이터를 보내야함을 안다고 가정

라우터 '바' 에 패킷이 도착

  1. 라우터 '바' 는 라우터 '마'가 했던 똑같은 방법으로 라우터 '라' 에게 패킷을 보냄
  2. 라우터 '라' 는 이미 해당 IP주소가 있는 컴퓨터를 알고 있음 -> 라우터 '라' 에 해당 컴퓨터가 직접 연결 되어있기 때문
    => A에서 출발한 패킷이 B에 도착

정리해보면

  • 수많은 네트워크들의 연결로 이루어진 inter - network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해 IP 주소를 이용해 길을 찾고 ( routing ) 자신 다음의 라우터에게 데이터를 넘겨주는 것 ( forwarding )


4계층 - 전송 계층 ( Transport Layer )

이제 인터넷 상의 모든 컴퓨터가 송신을 할 수 있게 되었다.

데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받을 것

하지만 컴퓨터에는 여러 개의 프로그램들이 실행되고 있음

제일 우측의 세개의 데이터들을 나누어 주려고 함

어떤 데이터를 무슨 프로세스에게 줘야할지 어떻게 알 수 있을까?..

포트 번호 ( Port Number )

하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값

송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 전송하게 됨

IP와 비슷한 맥락으로 검색창에 www.naver.com을 입력하는 것은 :80이라는 포트번호가 생략 된 것
=> 즉 우리는 네이버의 포트번호도 알고있는 셈

다시 돌아가서

데이터에 포트번호를 가지고 들어오면 각 프로세스에 잘 전달해줄 수 있음

정리하자면

  • 포트 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 까지 데이터가 도달하게 해주는 모듈 ( TCP )


5계층 - 응용 계층 ( Application Layer )

어플리케이션 계층을 설명하기 앞서 왜 다른 계층은 건너뛰고 하는지 간단하게 이야기하고 시작해보자.

OSI 모델 vs TCP/IP 모델

제목에서도 봤듯이 OSI는 7계층으로 이루어져있음 하지만,

  • 현대 인터넷은 TCP/IP 모델을 따르고 있음 -> OSI vs TCP/IP 시장점유율 싸움에서 OSI가 패배했기 때문
  • 그림에서 보듯이 조금씩 레이어 이름이 다른것을 확인할 수 있지만 우리는 OSI모델에 있는 1~4 계층에 대해 알아보고 5계층은 TCP/IP 모델의 어플리케이션 계층으로 넘어가려고 함

처음부터 이쪽에맞추고 하지 갑자기 왜 저쪽에 맞추냐고 생각할 수 있음 이유가 뭘까?

TCP/IP모델이 업데이트 되면서 바뀌게 됨

처음부터 TCP/IP Updated로 진행 하고 있었음

업데이트 되면서 TCP/IP 아래 1~4계층은 OSI 계층과 똑같아졌고 위에 5~7계층이
Application layer로 합쳐짐
=> 그래서 TCP/IP Updated에 맞춰 Application layer에 대해 알아보려고 함

  • TCP/IP Updated가 가장 많이 사용되기 때문

Application Layer

  • L1 ~ L4 계층을 통해 통신 방법 정의, 네트워크 접속, 인터넷 연결 및 포트 번호 관리를 통해 컴퓨터 프로그램 간 완벽한 통신이 준비
  • 프로그램들 간 메시지를 전송하고 수신하는 대화가 가능하고 이러한 대화에 관한 프로토콜이 응용 계층에서 정의
  • 웹 서비스를 제공하기 위한 HTTP, 메일을 전송하기 위한 SMTP, 파일 전송을 위한 FTP나 도메인 주소를 IP 주소로 변환시켜 주는 DNS 프로토콜 등
  • TCP/IP 소켓 프로그래밍

    운영체제의 Transport layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것

    • 뿐만아니라, TCP/IP 소켓 프로그래밍을 통해 자신만의 Application Layer 인코더와 디코더를 만들 수 있음

      자신만의 Application Layer 프로토콜을 만들어 사용할 수 있음

대표적인 Application Layer 프로토콜인 HTTP로 인코딩 & 디코딩을 살펴 보자.

HTTP

먼저 HTTP를 이해하기 위해 클라이언트 & 서버 패러다임을 알아야 함
또한, HTTP의 세부적인 부분에 대해서도 익숙해야 함 -> 이글을 읽는 사람이라면 백엔드 개발자 이므로 알고 있고 익숙할것이라고 생각하고

이미 알고있는 지식을 활용해보자

최종적으로는

앞에서 배운 각 계층의 모듈들이 하는 일들을 생각하고 인코딩 디코딩 하는 과정을 거치게 되면 위와같이 데이터를 주고 받을 수 있게 된다.


마치며

OSI 7 Layer 모델은 거대한 네트워크 소프트웨어의 구조를 설명하는 것.

profile
내일부터 공부 해야지

0개의 댓글