본문 바로가기

CS(Computer Science)

[네트워크] 7Layers, 물데네전세표응 전체적인 구조 뽀개기

컴퓨터 공학에 가장 중요한 개념 중에 하나인 7Layers는 늘 공부를 해도 헷갈렸다.
네트워크통신에 대해 한번쯤 책을 쳐보거나 정리를 해본 사람이라면
7Layers가 물리계층, 데이터링크계층,네트워크계층,전송계층,세션계층,표현계층,응용계층으로 나눠져 있다는 것 쯤은 알 수 있다.

이번에 컴퓨터 네트워크에 대해 좀 더 깊이, 그러니까 물리계층이랑 데이터링크계층이 대체 뭐냐라고 질문을 받으면
정확하게 정돈되게 말하고 싶을 정도로 공부를 하고 싶어 컴퓨터망이라는 수업을 듣는데
지금 바이블로 쓰면서 기준을 잡고 있는 책은

컴퓨터네트워킹 하향식 접근, James F. Kurose Keith W. Ross 저, 최종원,강현국 번역, 피어슨에듀케이션코리아, 2012

네트워킹에 대한 바이블로 꼽히는 책인데 해당 책에서는 7Layers에 대해 알려주면서 바로 인터넷이란 무엇인가? 부터 시작해서 패킷포맷, datastream, 권역ISP 등 너무 많은 정보를 쏟아내서 기준점을 잡고 알아가기가 힘들었다. 그래서 좀 큰 개념을 제대로 알고 공부하고 싶어서 유튜브를 뒤졌는데 우테코에서 정리한 아주 좋은 강의를 찾았다.
https://youtu.be/1pfTxp25MA8

물리계층부터 차근차근 알려주는데 핵심적인 부분을 알려주고 있어서 굉장히 유익했다.

1. 물리계층


물리계층이라는 건 컴퓨터가 통신을 하기 위해서는 0,1이라는 값으로 통신을 하게 되는데 실제로 컴퓨터는 고철 덩어리가 아닌가.
그럼 0,1로 통신을 하는건 실제로 고철덩어리에 전류가 흐를때 전류를 통해서 통신이 가능하게 된다.

전자기파라는 주파수를 통신을 하는데 우린 그런 전자기파를 0,1라는 신호로 바꿔서 전류가 흐르는 고철덩어리끼리 뭔가를 주고 받을 수 있게 해야하는 거다.
컴퓨터에는 PHY라는 칩이 있는데 그 칩이 아날로그의 전기신호를 해석하여 0,1신호로 바꿔주는 역할을 한다.
0,1을 전기신호로 바꾸는 걸 encoding이라고 표현하고, 전기신호를 0,1로 바꾸는 걸 decoding이라고 한다. 물리계층에서의 통신은 하드웨어적인 기술로 구현된 것이다.

그럼 우린 세상에 2대의 컴퓨터로만 세상을 살아가는게 아니다. 그럼 여러대를 통신할 때는 어떻게 될까. 그런 의문점이 데이터링크 계층에서 풀리게 된다.

2. 데이터 링크 계층


아까 통신을 하면서 0,1 신호를 보내면 어떤 기타 장치 없이 전선으로 여러대 컴퓨터를 연결하면 모든 컴퓨터가 같은 신호를 받게 된다. 즉, end Point(목적지)가 없다.
그래서 통신을 할 때 그 부분을 제어해주는게 우리가 한번쯤 들어본 스위치(switch)라는 것이다.  스위치에서 특정 IP주소를 해석하여 그 특정 주소의 목적지로만 데이터가 전송되게 한다.
그래서 스위치 한 개에 묶여있는 통신전선들이 묶인 컴퓨터들은 인트라넷이라고 표현한다. 연결된 특정 그룹의 컴퓨터만 같은 네트워크를 쓰는 것을 말하며 보통 회사에서는 사내 기밀 자료들이 있기에 내부망(인트라넷)으로 통신을 한다.

같은 네트워크에서 스위치를 통해서 네트워크를 구성했다고 하는데 물리계층에서 데이터정보는 01010111101011 이런 0과 1조합이 서로 다른 컴퓨터에서 여러번 보내게 된다. 그럼 어느 컴퓨터가 어떤 정보를 보내는지를 어떻게 판단을 할 것인가? 데이터를 전송하기 전에 앞뒤에 특정 비트열을 붙여서 보내겠다고 약속을 하면, 우린 붙어져있는 데이터를 잘 잘라내서 어떤 데이터 정보인지를 인식할 수 있을거다. (개발을 할때 전문통신을 할 때 느끼겠지만 Fixed data type은 어느길이만큼 데이터를 자르냐에 따라 데이터를 식별 가능하지 않은가)

데이터링크 계층에서 하는 것이 좀 더 본질적인 그 기본적인 과정이라 볼 수 있다. 그런걸 framing 작업이라고 하는데 여러대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈이라고 보면 된다. 데이터 링크 계층에서 송신 컴퓨터는 2계층 데이터링크에서 데이터를 식별할 수 있게 framing 작업을 해서 데이터를 1계층인 물리계층에게 보내면 물리계층이 encoding작업으로 전자기파 형태로 전자기파를 보내고, 그걸 받은 수신 컴퓨터는 해당 전자기파를 1계층에서 1010형태의 신호로 해석하고 2계층인 데이터링크에서 데이터를 찾기 위해 1010신호를 자르는 작업을 하게 된다. 그럼 그 framing 작업을 어디서 하느냐? 바로 랜카드라는 하드웨어 장치가 하고 있다. 그렇다면 1,2계층 모두 전자신호로 데이터를 통신하기 위해 물리적 장치가 해당 작업을 하고 있다고 볼 수 있다.

그러면 내부망, 즉 같은 네트워크가 아닌 다른 네트워크와 통신하고 싶을 때는 어떻게 해야 하냐.  그걸 네트워크 계층에서 설명할 수 있다.

3. 네트워크 계층


우리가 회사에서만 쓰는 내부망만 있는게 아니라 전세계에서 공유하는 정보들에 접근이 가능하다. 해외 유튜버들 영상을 보고 해외 기업에 이메일로 지원도 하고 그러지 않는가. 그럼 같은 네트워크를 쓰고 있는 망들을 모아주는 기능을 어떤 것이 하느냐. 그걸 라우터라고 한다! 라우터는 서로 다른 네트워크끼리 통신할 수 있도록 도와준다.
(그래서 개발 업무를 하다보면 대외계 개발(내부 DB가 아닌 외부DB를 가져와야 할 때) fep 통신을 하면 라우팅 정보를 꼭 써야 하는데 그게 서로 다른 네트워크 끼리 통신을 할 때는
라우터에 정보를 보내야 하기 때문이란 걸 알 수 있다)

이런 라우팅은 라우팅끼리도 연결이 가능한데 서로 다른네트워크를 라우터로 연결하고, 또 그걸 다른 네트워크랑 연결하고 쭉쭉 연결하다보면 토너먼트처럼 맨 위에서 만나게 된다. 우린 WWW(World Wide Web)을 쓰는 세기에 살고 있지 않은가. 그건 다 서로 다른 네트워크를 연결해주는 라우터끼리 연결되어서 전세계 사람들이 통신이 가능한거라고 보면 된다. 우린 그것은 통상적으로 뭐라고 부른다? INTERNET(인터넷)이라고 한다. 전세계 컴퓨터들이 계층구조로 연결된 상태를 말한다.

자 그럼, 인터넷을 쓰는 우리가 해외에 살고 있는 어떤 친구에게 메일을 보낸다고 생각하자. 해당 데이터를 보내려면 특정 주소가 필요한데 우린 그걸 IP주소라고 한다. 각 컴퓨터가 가지고 있는 고유의 주소라고 한다. 그래서 IP주소와 데이터를 붙여서 데이터 통신을 하게 되는게 그걸 '패킷'이라고 한다.  패킷은 라우터에서 해석이 되는데 패킷을 열어서 패킷에 담긴 주소를 알아내서 해당 주소로 데이터를 보내는 작업을 한다. 그렇게 데이터 통신이 가능해진다.

네트워크 통신을 정리하자면 수많은 네트워크  연결로 인한 inter-network 속에서 어딘가 목적지인 컴퓨터에 도달하기 위해 IP주소를 이용해서 길을 찾고(routing) 자신 다음의 라우터에서 데이터를 넘겨주는 걸(forwarding)이라고 할 수 있다.

그래서 3계층인 네트워크 계층에서 데이터를 받으면 데이터에 IP주소를 붙여서 패킷 구조체(객체)를 만들어서 2계층 데이터 링크로 보내게 되고, 링크 계층에서 framing작업을 해준 뒤에 물리계층에 보내면 그 데이터를 전자기파로 만들어서 '라우터'로 보내게 된다. 라우터에서 1계층 물리모델에서 전자기파를 10신호로 해석하고, 2계층에서 framing 작업으로 데이터를 정제한 뒤에 3계층으로 넘어와서 IP주소를 뺀 데이터를 확인할 수 있다. IP주소를 확인해서 해당 주소에 대한 정보가 없으면 다시 3,2,1계층 순으로 데이터를 싸서 다름 라우터로 내보내게 되는 거다.

그럼 IP주소를 열어보고 데이터의 목적지를 확인하는 기술은 어디에 구현되어 있냐면, 바로 운영체계 커널!!에서 하고 있다. 만능 커널...커널에서 저런 작업을 하고 있었다. 그럼 우리가 운영체제라고 하면 하드웨어와 소프트웨어를 이어주는 역할을 하는 걸 말하는데, 그 역할 중 하나에 IP주소를 판단하는 기술이 있다는 걸 짐작할 수 있다.

인터넷 상의 모든 컴퓨터가 통신이 가능한 상태가 됐다. 그럼 운영체제가 깔린 컴퓨터를 생각했을 때 우리가 어떤 데이터를 받았을 때 어떤 실행되는 프로그램(프로세스)에서 그걸 받아야 하는지를 알 수 있을까? 전송 계층에서 알아보자.

4. 전송계층


데이터를 받고자하는 프로세스들은 포트번호(Port Number)가 필요하다. 그래서 포트번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져가야 하는 정수값이다. 우리가 개발을 하다보면 8080, 8050같은 포트번호를 쓰는데 톰캣 아파치 포트번호가 겹치면 에러가 나지 않는가. 그게 바로 전송계층에서 데이터를 특정 프로세스에 줘야 하는데 목적지 주소가 겹쳐버리면 데이터를 제대로 전달 할 수 없어서다.

포트번호가 필수적인데 우리가 아까 네트워크 계층에서  IP주소와 데이터를 합친다고 하지 않았던가. 그걸 또 전송계층에서는 포트번호를 앞에 붙여준다. 결국 전송계층은 포트번호라는 것을 사용해서 데이터가 목적지인 특정 프로세스에 데이터가 전달되게 하는 모듈이다.

슬슬 매우 반복적인 얘기인데 1,2,3계층과 마찬가지로 4계층에서 포트번호 붙이고, 3계층에서 IP붙이고, 1,2계층에서 전자기파 만들고, 라우터로 보내고 라우터에서 1,2계층에서 1,0신호 해석하고 3계층에서 IP해석하고 4계층에서 포트번호를 확인한다. 대충 데이터가 어떻게 흘러가서 통신되는지 슬슬 눈에 보이지 않는가.
그럼 전송계층이 하는 이 기술 역시 운영체계의 만능인 커널!!이 하고 있다.

자 이제 마지막 계층만을 두고 있다. 그럼 뭐지. 3개 남았는데 라고 할 수 있는데 7Layers인데..? OSI체계에서는 세션계층과 프레젠테이션 계층이 있지만, 사실 현재 애플리케이션은 TCP/IP모델을 따르고 있어서다.

5. 어플리케이션 계층


어플리케이션 계층에서는 TransFort Layer에서 제공하는 API를 사용해서 네트웨크 프로그래밍, TCP/IP 소켓 프로그래밍이 가능하다. 소켓 프로그래핑만으로도 클라이언트 서버 프로그램을 따로 만들 수 있다. 어플리케이션 네트워크에서 인코더 디코더를 스스로 정의할 수 있고, 어플리케이션만의 프로토콜을 만들 수 있다. 대표적인 프로토콜로 http가 있다. 백엔드 개발자라면 클라이언트-서버 패러다임을 알텐데 header, request, response 등이다.

그럼 우리가 사용자가 http 프로토콜을 쓰는 웹사이트에 접속해서 아이디를 입력하면 아이디라는 데이터는 http 프로토콜로 인해서 header등의 정보로 5계층인 어플리케이션 계층에서 감싸지게 된다. 4계층에서는 포트번호가, 3계층에서는 IP주소가, 1,2계층에서는 전자기파로 변환되고, 라우터로 다른 컴퓨터로 가게되면 역순으로 풀어서 데이터를 받을 수 있게 된다.

이런 전체적인 흐름에서 데이터 통신이 일어나게 되고 우리가 쓰고 있는 인터넷에서 여러 어플리케이션들이 이런 방식으로 데이터통신을 한다고 대략적으로 알 수 있다. 네트워크 계층엣 어떻게 패킷안에 있는 IP주소가 정확히 도달할 수 있는지 IP주소 체계나 인터넷 접속시 IP주소가 아닌 https://www.naver.com인지 DNS 개념 등은 좀 제쳐두고 아주 큰 흐름만 보면 이렇다.  네트워크에 대한 디테일하고 깊은 지식은 아니지만 대략적인 흐름과 네트워크 통신의 전체적인 구조를 알 수 있게 됐다.



'CS(Computer Science)' 카테고리의 다른 글

컴퓨터구조 정리글  (0) 2022.10.31