본 포스팅은 [10분 테코톡] 🔮 히히의 OSI 7 Layer 을 정리한 글입니다.
두 대의 컴퓨터가 통신하려면?
위 질문을 1계층 내내 품고, 1계층을 공부해보자.
✔ 모든 파일과 프로그램은 0과 1의 나열이다
✔ 결국 0과 1만 주고받을 수 있으면 된다
두 대의 컴퓨터를 전선 하나로 연결한다고 상상해보자.
✔ 1을 보낼 때는 +5V 의 전기를 전선으로 흘려보내고
✔ 0을 본래 때는 -5V 의 전기를 전선으로 흘려보내면
✔ 0과 1의 전송이 가능할 것이다
✔ 0과 1을 주고 받을 수 있으면 모든 데이터를 주고받을 수 있으므로
✔ 이제 두 컴퓨터는 모든 데이터를 주고 받을 수 있게 되었다
그러나... 이 간단한 아이디어는 현실에선 잘 동작하지 않았다. 그 이유는 무엇일까?
아래 그림은 시간 당 전압을 나타내는 그래프이다.(사인함수)
✔ 이것은 전자기파
를 표현하는 함수이다. (자세히는 몰라도 됨)
이 전자기파의 주파수는? 주파수란 1초당 진동한 진동횟수로, 단위는 헤르츠이다.
위 전자기파의 주파수는 4헤르츠이다. 1초에 4번 진동하기 때문이다.
✔ 이 파동은 파동이 진행되는 내내 주파수가 4이다
하지만 이런 전자기파라면 어떨까?
✔ 이런 전자기파는 주파수 값이 숫자 하나로 고정되지 않는다.
✔ 이 전자기파는 파동이 진행되는 내내 주파수 값이 계속 변한다.
✔ 위 전자기파의 주파수 최소값이 1Hz, 최대값이 10hz라고 생각해보자.
그런데 전선은 모든 주파수를 다 통과시키지 못한다. (전선 뿐만 아니라 모든 매질이 마찬가지)
어떤 전선이 5Hz ~ 8Hz 의 전자기파만 통과시킬 수 있다고 해보자.
처음에 보낸 신호와 나중에 보낸 신호가 달라졌다...
✔ 그런데 앞서 두 대의 컴퓨터가 통신하려면 0과 1을 주고받을 수 있으면 된다고 했었다.
✔ 두 대의 컴퓨터는 아래와 같은 전자기파를 주고받을 수 있으면 된다.
✔ 그런데, 수직선과 수평선이 있는 전자기파는 항상 0Hz~ 무한대의 주파수 범위를 가진다.
✔ 따라서, 이런 전기신호를 통과시킬 수 있는 전선은 없다.
그렇다면 이 신호를 어떻게 전송해야할까?
✔ 이렇게 아날로그 신호르 바꿔서 전송해야 한다.
그래서 결국 Physical Layer가 하는 일은?
✔ 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려보내고, (encoding)
✔ 아날로그 신호가 들어오면 이를 0과 1의 나열로 해석하여 (decoding)
✔ 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)
...을 Physical Layer라고 한다.
모듈이라는 건 함수들의 모임이라고 생각하면 된다.
가장 먼저, 데이터를 보내는 컴퓨터에서 인풋으로 0101 0101이 1계층 인코더에 들어가게 된다. 인코더에서 아날로그 데이터로 변조된 데이터는 전선을 통해 1계층 디코더의 인풋으로 들어가게 되고, 디코더에서는 이를 0101 0101로 해석한다.
인코더와 디코더는 함수라 할 수 있다.
인코더의 인풋은 0101 0101의 data
이고, 리턴값은 아날로그 데이터인 Signal
이다.
디코더의 인풋은 signal
이고 해석이 끝난 후 0101 0101 이라는 Data
를 리턴한다.
그렇다면 Physical Layer 기술은 어디에 구현되어있는가?
✔ PHY 칩
✔ 사실 1계층 모듈은 하드웨어적으로 구현되어있음
앞서 인코더와 디코더를 함수로 표현했었는데, 사실은 함수가 아니라 회로이다. 그러나 소프트웨어와 마찬가지로 회로(하드웨어)도 input을 받아서 output을 만들어내는 건 마찬가지이다.
이로써 1계층인 물리계층에 대한 공부가 끝났다.
2계층인 Data-Link Layer를 시작하기 전에, 여러 대의 컴퓨터간의 통신에 대한 기본적인 지식을 짚고 넘어가자
✔ 이런 방식은 전선 꽃을 구멍도 많이 필요하고, 전선도 많이 필요
✔ 통신하는 컴퓨터가 많아지면 많아질수록 비용면에서 비효율적
따라서, 전선 하나를 가지고 여러 대의 컴퓨터와 통신할 방법을 찾아야 한다
✔다음과 같은 모양의 전기가 통하는구리선에 여러대의 컴퓨터가 연결되었다고 하자
✔구리선은 전기가 통하므로, 신호는 구리선의 모든 곳으로 전달이 되어서, 모든 컴퓨터가 아날로그 신호를 받을 수 있게된다.
비록 다른 컴퓨터에도 전달했지만, 예림이는 혜림이에게 잘 전달했다.
그럼 이제, 가운데 관통하는 전선을 구겨서 빈 상자 안에 넣어보자
이제 이 4대의 컴퓨터는 통신이 가능하다!
하지만 여전히 한 컴퓨터가 데이터를 보내면, 나머지 모든 컴퓨터도 데이터를 전달받는다는 문제점이 존재한다.
✔ 그런데 만약, 이 상자가 메시지의 목적지를 확인해서 혜림이에게만 전달해줄 수 있다면?
✔ 이런 기능을 하도록 상자를 똑똑하게 만든 것을 스위치라고 한다. 스위치는 일종의 컴퓨터로써, 송신자가 원하는 컴퓨터에만 데이터를 전달할 수 있게 하는 기능을 한다.
이번에는 새로운 상황을 보겠다
하나의 스위치로 직접적으로 연결된 컴퓨터들을 하나의 네트워크라 한다. 아래 상황은 네트워크가 두개 있는 상황이다. 즉 두 개의 다른 네트워크가 존재하고 있다.
그러나 전선으로 연결되지 않아서 통신 불가...
만약, 스위치와 스위치를 연결할 수 있다면?
✔ 이와 같이, 스위치와 스위치를 연결해서 서로 다른 네트워크에 속한 컴퓨터들
끼리 통신이 가능하게
해주는 장비를 라우터라고 한다.
엄밀히 따지면 위 장비는 스위치+라우터 인 L3 스위치이지만, 그냥 뭉뚱그려 라우터라고 생각하자...
어쩄든 예림이와 혜림이는 서로 통신이 가능하게 되었다. 이때 민트색 기기는 우리가 잘 알고 있는 공유기에 해당한다.
이제 더 많은 네트워크들을 연걸해보자
라우터와 라우터를 라우터로 연결할 수 있다.
현재 5개의 네트워크가 연결되어있다.
✔ 이런 식으로 전 세계의 컴퓨터들을 연결
한 것을 인터넷
이라 한다.
파란색으로 표시한 저 최상위의 전선은 규모가 아주아주 클 것이다. 실제로 해저케이블이라고 매우 규모가 큰 케이블이 바다 밑에 깔린 방식으로 연결되어있다.
✔ 앞서 컴퓨터들이 계층구조로 연결되어있는 것을 보았다.
전 세계의 컴퓨터들이 계층구조로 연결된 것을 인터넷이라 한다.
✔ 이보다 더 앞서, 두 대의 컴퓨터가 0과 1로 된 데이터를 어떻게 주고받는지도 보았다. 이것은 OSI 7 Layer 중 1계층, 즉 물리계층에 속하는 기술이었다.
✔ 물리계층을 통해 두 대의 컴퓨터가 어떻게 통신하는지 알 수 있었다.
그러나, 1계층에 속하는 기술만으로는 여러 대의 컴퓨터가 통신하도록 만들 수 없다.
✔ 이제, 여러대의 컴퓨터가 어떻게 통신하는지 알아보자
4대의 컴퓨터가 스위치라는 장비를 통해 연결되어있다. 즉 하나의 스위치로 컴퓨터 4대가 연결되어있다.
세대의 컴퓨터가 거의 동시에 예림이의 컴퓨터로 데이터를 보냈다
그럼 예림이는 보낸 데이터들이 바로 쭉 붙어진 형태로 데이터를 받게된다. 이 데이터를 어떻게 끊어읽는지에 따라 올바르게 데이터를 읽을수도, 그렇지 않을 수도 있다.
✔ 어떻게 해야 데이터를 제대로 끊어읽을 수 있을까?
✔본래 의도대로 잘 끊어읽기 위해, 송신자는 데이터의 앞 뒤에 특정한 비트열을 붙인다.
✔ 예를 들어, (실제로 그런 것은 아님) 송신자가 데이터를 보낼 때 앞에는 1111을, 뒤에는 0000을 붙인다고 해보자.
✔ 그리고 어떤 컴퓨터로 다음과 같은 비트열이 들어왔다면...
✔ 0000 1111 이 나오는 부분을 찾으면 된다.
찾았다
파란 동그라미 부분이 서로 다른 두 데이터가 되는 것이다.
이렇게 하여, 예림이는 여러 발송지로부터 전달받은 데이터를 잘 끊어 읽을 수 있게 되었다.
그래서 결국 Data-Link Layer란?
✔ 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해 필요한 모듈
✔ Framing은 Data-Link 에 속하는 작업들 중 하나. 앞에서 0000 과 1111 로 원본 데이터를 감싼 것을 프레이밍이라 한다.
그렇다면 Data-Link 기술은 어디에 구현되어있는가?
✔ 랜카드
✔ 2계층 모듈도 1계층 모듈처럼 하드웨어적으로 구현되어있음
이로써 2계층 끝!
앞서 살펴본 인터넷 네트워크 구조이다. 이번에는 A가 B에게 데이터를 보내고 싶다고 한다.
라우터들에게 이름을 붙여주겠다.
A는 보내고 싶은 데이터 앞에 목적지 주소, 즉 B의 주소를 붙인다. 55.10.54.75와 같이, 각 컴퓨터들이 갖는 고유한 주소를 IP주소라 한다.
A는 B의 IP주소를 어떻게 아는걸까?
주소창에 www.naver.com 을 입력하면, 이 문자열들은 IP주소로 변환된다. 따라서 우리는 네이버의 IP 주소를 알고 있는 셈이다.
✔ 아무튼, 아래의 것을 패킷이라고 부르겠다. 데이터와 목적지 주소가 붙은 것
패킷의 여행을 따라가보자
✔가장 먼저, A가 라우터 (가)에게 패킷을 전달한다. A는 전선과 직접적으로 연결된 게 (가)밖에 없다.
패킷을 연 라우터 (가)
✔패킷을 받은 (가)는 패킷을 열어서 목적지 IP 주소를 확인한다. 라우터 (가)는 아래와 같은 생각을 하게 된다.
✔ (가)는 데이터를 다시 포장한 다음,
✔ 자신과 연결된 유일한 라우터인 (마)에게 전달
라우터 (마)는 라우터 (가)가 그랬던 것처럼 패킷을 까서 목적지 주소를 읽는다.
✔ 목적지가 B라는 것을 알게된 라우터(마)는 패킷이 B에 도착하려면 어느 전선으로 패킷을 내보내야하는지 알아내야 한다.
사람은, 어디로 보내야 하는지 눈에 딱 보이는데, 라우터 (마)는 심각한 고민에 빠질 것이다. 라우터 (바)에게 주어야할지, (가)? (나)? (바)? 에게 주어야 할지 모르겠기 떄문이다.
✔ 라우터(마)는 어떻게 데이터를 (바)에게로 전달해야 한다는 것을 알아낼 수 있을까?
이것이 궁금하다면 라우팅을 자세하게 공부해보길 바란다.
✔ 우리는 그냥, B에게 데이터를 보내려면 일단 라우터(바)에게 그 데이터를 주어야 한다는 것을 라우터(마)가 알고 있다고 가정하자.
(마) 다시 데이터를 패킷으로 포장해서, (바)에게 넘겨준다.
패킷이 (바)에 도착했고, 바는 (마)가 했던 것과 동일한 방법으로 (라)에게 패킷을 보낸다.
(라)는 자신과 연결된 컴퓨터들 중에 IP주소가 55.10.54.75 인 컴퓨터가 있다는 것을 알고 있어서, 패킷을 B에게 전달한다.
✔이렇게 해서 A에서 출발한 패킷이 B로 무사히 도착했다.
그래서 결국 Network Layer란?
✔ 수많은 네트워크들의 연결로 이루어지는 inter-network 속에서
✔ 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해
✔ IP주소를 이용해서 길을 찾고(routing)
✔ 자신의 다음 라우터에게 데이터를 넘겨주는 것(forwarding)
Network Layer기술은 어디에 구현되어있을까?
✔ 운영체제의 커널에 소프트웨어적으로 구현되어있다
Network Layer 끝!
✔앞서 네트워크 레이어까지 거치며, 이제 인터넷 상의 모든 컴퓨터가 서로와 통신할 수 있게 되었다.
✔ 데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받을 수 있게 되었다.
✔ 그런데 컴퓨터에는 여러개의 프로그램들이 실행되고 있다
✔ 컴퓨터는 자신의 받은 세개의 데이터를 프로세스들에게 나누어주려고 한다.
✔ 그런데 어떤 데이터를 무슨 프로세스에게 주어야할지 컴퓨터는 어떻게 아는가?
✔ 먼저, 데이터를 받고자하는 프로세스들은 포트번호(port number)를 가져야 한다.
✔ 포트번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야 하는 정수값이다.
예를 들어, 이 컴퓨터에서 코코아톡은 8081번의 포트번호를 가지고 있고, 배달의 부족은 9000번 포트를 가지고 있다고 하자.
✔ 한편, 송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트번호를 붙여서 보낸다.
데이터 전송자는 9000이라는 포트번호까지 미리 알고 있어야 한다.
검색창에 www.naver.com이라고 입력하는 것은, 사실 뒤에 :80이 생략된 것이다. 즉 우리는 네이버의 포트번호도 알고있는 셈인것이다.
그래서 결국 Transport Layer란?
✔ port 번호를 사용하여
✔ 도착지 컴퓨터의 최종 도착지인 프로세스에까지
✔ 데이터가 도달하게 하는 모듈
Transport Layer 기술은 어디에 구현되어있을까?
✔ 운영체제의 커널에 소프트웨어적으로 구현되어있다
그런데 왜 갑자기 세션과 프레젠테이션을 건너뛰고 Application으로 넘어왔는가?
✔ 사실 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 따르고 있다.
✔ 현대의 인터넷이 TCP/IP를 따르는 이유는 OSI모델이 시장싸움에서 졌기 때문
오늘날 Updated모델이 더 많이 사용됨
✔ TCP/IP 소켓 프로그래밍
✔ 소켓프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로 따로 만들어서 동작시킬 수 있다.
✔ 뿐만 아니라, TCP/IP 소켓 프로그래밍을 통해 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있다.
이게 무슨 뜻이냐면, 누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있다는 뜻이다.
✔ Application Layer도 다른 Layer들과 마찬가지로 인코더 디코더가 있다
✔ 대표적인 Application Layer 프로토콜인 HTTP로 인코딩&디코딩을 살펴보자
✔HTTP를 이해하기 위해서는, 먼저 클라이언트&서버 패러다임을 알아야 한다.
아래 예시 상황을 보자.
사실 데이터전송측은 클라이언트일때도 있고, 서버일 때도 있는데, 이번 예시에서는 서버라고 가정하자.
✔ MVC 패턴은 소프트웨어 아키텍쳐 중 하나이다.
✔ MVC와 마찬가지로, 소프트웨어 아키텍쳐 중에 Layered 아키텍쳐 라는 것이 있다
✔ Layered 아키텍처를 따르는 대표적인 예가 네트워크 시스템이다.