[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의 나열을 주고받을수 있게 해주는 모듈
- 인코더에서 input으로 data를 받고, return은 아날로그 데이터인 signal
- 디코더에서 input으로 signal을 받고 return은 원본 data
=> 함수로 표현 가능
하지만 1계층에서는 하드웨어적으로 구현이 되어있음 (PHY 칩)
SW나 HW 모두 input을 받고 output을 만들어내는건 같음
물리계층을 통해 두 대의 컴퓨터가 어떻게 통신하는지 알 수 있었음
그러면 여러 대의 컴퓨터 간의 통신은 어떤식으로 이루어질까?..
- 전선 꽂을 곳과 전선이 많이 필요함
- 통신하려는 컴퓨터가 많아질수록 비용면에서 비효율적
전선하나로 여러 컴퓨터와 통신할 방법을 모색해야함
아래와 같이 연결되었다고 가정
데이터가 잘 전달 되지만 나머지 다른 컴퓨터에서도 그 데이터를 읽을 수 있음.
그러면 이제 가운데 구리선을 상자에 구겨 담아보자.
여전히 다른 컴퓨터들도 데이터를 읽을 수 있음
만약 예림 -> 혜림에게 데이터를 전달할때 상자가 메시지의 목적지를 확인해서 전달해줄 수 있는 역할을 할 수 있게 된다면?
상자는 스위치 역할을 함!
다른 상황을 또 예시를 들어보자
서로 다른 네트워크가 두개 구축되어있다고 가정
이때 데이터를 보내려면 어떻게 해야할까?
스위치를 연결해 보자.
그리고 이렇게 서로다른 네트워크끼리 통신이 가능하게 해주는 장비를 라우터라고 함 ( 우리가 잘알고 있는 공유기 )
(사진에서는 엄밀이 따지면 스위치+라우터)
그리고 이 라우터를 이용해 라우터를 라우터로 연결할 수 있음
그리고 이렇게 전 세계의 컴퓨터들을 연결한 것을 인터넷이라고 함
아래 파란색으로 표시된 케이블이 바로 = 해저케이블
1계층에 속한 기술만으로는 여러대 컴퓨터를 통신하게 할 수 없음
Data-Link Layer
세대의 컴퓨터가 동시에 데이터를 보냈다고 가정해 보자
...010111110001 과같이 쭉 이어진 데이터를 받게 된다
어떻게 끊어읽냐에 따라 올바른 데이터를 받을 수도, 아닐수도 있게 된다.
어떻게 제대로 끊어 읽을 수 있을까?
송신자는 데이터 앞 뒤에 특정한 비트열을 붙임
예를들어 앞에는 1111, 뒤에는 0000을 붙인다고 가정
0000과 1111이 나오는 부분을 찾으면 된다.
정리해보면
- 같은 네트워크에 있는 여러 컴퓨터들이 데이터를 주고 받기위해 사용한 모듈
- 1111과 0000으로 원본데이터를 감싸는 것을 Framing 이라고 하는데 이또한 Data_link Layer에 속하는 작업들 중 하나
더 많은 컴퓨터들 사이의 통신
A에서 B로 데이터를 전송하고 싶은 경우, A컴퓨터에 B의 주소를 담아 데이터를 전송함
이 때 입력하는 주소는 각 컴퓨터의 고유한 주소를 가지게 되는데 이를 IP라고 함
예를 들어보자.
www.naver.com을 입력할 경우 이 영어 주소는 IP주소로 변환되어 사용됨 ( DNS )
즉, 다시말해 영어주소를 알고 있으면 IP주소를 알고 있는것과 다름이 없다.
=> (IP + data 형태 = 패킷( packet ))
패킷의 이동 방향 ( A가 이동해서 B로 간다고 가정 )
- A가 라우터 '가'로 패킷을 전달
- 패킷을 받은 라우터 '가' 는 패킷을 열어 IP주소를 확인
- 라우터 '가' 에서 연결된 컴퓨터 확인 -> 없을경우 패킷을 다시 포장
- 라우터 '가' 와 연결되어 있는 유일한 라우터 '마' 로 패킷 전달
- 라우터 '마' 는 라우터 '가' 가 했던것처럼 패킷을 열어 목적지를 확인 -> 목적지가 B라는것을 확인
=> 라우터 '마' 는 B까지 가기위해 어느 전선으로 패킷을 내보내야 할지 고민에 빠지게 됨 ( 가? 나? 바? )
여기서 라우터 '마' 에서 '바'로 전달하는것을 알아낼수 있게 해주는 라우팅에 관해 앞서 간단하게 설명 했음 *
라우터 '마' 는 라우터 '바' 에게 데이터를 보내야함을 안다고 가정
라우터 '바' 에 패킷이 도착
- 라우터 '바' 는 라우터 '마'가 했던 똑같은 방법으로 라우터 '라' 에게 패킷을 보냄
- 라우터 '라' 는 이미 해당 IP주소가 있는 컴퓨터를 알고 있음 -> 라우터 '라' 에 해당 컴퓨터가 직접 연결 되어있기 때문
=> A에서 출발한 패킷이 B에 도착
정리해보면
- 수많은 네트워크들의 연결로 이루어진 inter - network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해 IP 주소를 이용해 길을 찾고 ( routing ) 자신 다음의 라우터에게 데이터를 넘겨주는 것 ( forwarding )
이제 인터넷 상의 모든 컴퓨터가 송신을 할 수 있게 되었다.
데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받을 것
하지만 컴퓨터에는 여러 개의 프로그램들이 실행되고 있음
제일 우측의 세개의 데이터들을 나누어 주려고 함
어떤 데이터를 무슨 프로세스에게 줘야할지 어떻게 알 수 있을까?..
포트 번호 ( Port Number )
하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값
송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 전송하게 됨
IP와 비슷한 맥락으로 검색창에 www.naver.com을 입력하는 것은 :80이라는 포트번호가 생략 된 것
=> 즉 우리는 네이버의 포트번호도 알고있는 셈
다시 돌아가서
데이터에 포트번호를 가지고 들어오면 각 프로세스에 잘 전달해줄 수 있음
정리하자면
- 포트 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 까지 데이터가 도달하게 해주는 모듈 ( TCP )
어플리케이션 계층을 설명하기 앞서 왜 다른 계층은 건너뛰고 하는지 간단하게 이야기하고 시작해보자.
제목에서도 봤듯이 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가 가장 많이 사용되기 때문
- L1 ~ L4 계층을 통해 통신 방법 정의, 네트워크 접속, 인터넷 연결 및 포트 번호 관리를 통해 컴퓨터 프로그램 간 완벽한 통신이 준비
- 프로그램들 간 메시지를 전송하고 수신하는 대화가 가능하고 이러한 대화에 관한 프로토콜이 응용 계층에서 정의
- 웹 서비스를 제공하기 위한 HTTP, 메일을 전송하기 위한 SMTP, 파일 전송을 위한 FTP나 도메인 주소를 IP 주소로 변환시켜 주는 DNS 프로토콜 등
TCP/IP 소켓 프로그래밍
운영체제의 Transport layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것
자신만의 Application Layer 프로토콜을 만들어 사용할 수 있음
대표적인 Application Layer 프로토콜인 HTTP로 인코딩 & 디코딩을 살펴 보자.
먼저 HTTP를 이해하기 위해 클라이언트 & 서버 패러다임을 알아야 함
또한, HTTP의 세부적인 부분에 대해서도 익숙해야 함 -> 이글을 읽는 사람이라면 백엔드 개발자 이므로 알고 있고 익숙할것이라고 생각하고
이미 알고있는 지식을 활용해보자
최종적으로는
앞에서 배운 각 계층의 모듈들이 하는 일들을 생각하고 인코딩 디코딩 하는 과정을 거치게 되면 위와같이 데이터를 주고 받을 수 있게 된다.
마치며
OSI 7 Layer 모델은 거대한 네트워크 소프트웨어의 구조를 설명하는 것.