유튜브 OSI 7계층 테코톡 강의를 정리한 내용입니다!
두 대의 컴퓨터 통신 → 결국 0과 1만 주고 받을 수 있으면 된다.
BUT, 전자기파의 경우 0에서 무한대[Hz]의 주파수
범위를 가진다. 따라서 이런 전기신호를 통과시킬 수 있는 전선은 없다.
그럼 컴퓨터가 이 신호를 보내기 위해서는 어떻게 해야 할까?
Physical Layer란
→ 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding), 아날로그 신호가 들어오면 0과 1의 나열로 해석하여(decoding), 전선이라는 물리적인 매체로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module = 프로그래밍할 때 만드는 함수라고 생각하면 됨)
사실 1계층 모듈은 하드웨어적으로 구현되어 있다.
여러 대의 컴퓨터 간의 통신
전선 하나를 가지고 여러 대의 컴퓨터와 통신할 방법을 모색해야 한다.
이때, 여러 대의 컴퓨터들을 연결하는 전선을 하나의 상자에 넣는다고 해도 여전히 그 상자에 연결된 모든 컴퓨터에 데이터가 전달 되는 문제점은 존재한다.
그런데 만약 상자가 메시지의 목적지를 확인해서 특정 한 컴퓨터에게만 전달해줄 수 있다면 어떨까? 이러한 기능을 하도록 하는 상자가 ‘스위치’이다.
하나의 스위치로 직접적으로 연결된 아이들을 하나의 네트워크 (= 하나의 인트라넷)

서로 다른 네트워크 2개가 있고 하나의 네트워크에서 다른 네트워크로 데이터를 보내고 싶다면?
스위치와 스위치를 연결해서 서로 다른 네트워크에 속한 컴퓨터끼리 통신을 가능하게 해주는 장비를 ‘라우터’라고 한다.

라우터와 라우터를 라우터로 연결할 수도 있다.
이렇게 전세계의 컴퓨터들을 연결한 것을 ‘인터넷’이라고 한다.
1계층에 속하는 기술만으로는 여러 대의 컴퓨터가 통신하도록 만들 수는 없었다..여러 대의 컴퓨터가 어떻게 통신하는지 알아보자~
<예시>
4대의 컴퓨터가 스위치라는 장비를 통해 연결되어 있다. A의 컴퓨터로 3대의 컴퓨터가 거의 동시에 데이터를 보냈다. 그럼 A의 컴퓨터는 데이터를 010111110001로 받게 된다.
이때, 받은 데이터를 잘못 끊어 읽으면 안된다!! 어떻게 해야 제대로 끊어 읽을 수 있을까?
이를 위해 송신자(데이터를 보내는 사람)는 데이터의 앞 뒤에 특정한 비트열을 붙인다.(= Framing)
Data-Link Layer란?
→ 같은 네트워크에 있는 여러대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈
Framing은 Data-link Layer에 속하는 작업들 중 하나이다.
2계층 모듈도 하드웨어적으로 구현되어 있다.
더 많은 컴퓨터들 사이의 통신
A가 B와 통신하고 싶다.
A는 데이터 앞에 목적지 주소, 즉 B의 주소를 붙인다. ex) 55.10.54.75 (data)
** IP주소 : 각 컴퓨터들이 갖는 고유한 주소
A가 B에게 데이터를 보내기 위해서는 B의 IP주소를 알고 있어야 한다.
예를 들어 주소창에 www.naver.com을 입력하면 이 도메인(= 영어주소)은 IP주소로 변환되어 사용된다. [→ DNS 더 공부] 따라서 우리는 naver의 IP주소를 알고있는 것과 마찬가지이다.
결론적으로 상대방의 IP주소를 알고 있어야 메세지를 보낼 수 있다.
DNS 란?
Domain Name System으로 도메인 이름과 IP주소에 대한 정보를 관리하는 시스템이다. 따라서 인터넷 사용자는 IP 주소를 몰라도 된다.
DNS 동작 과정
브라우저 캐시 확인 → hosts 파일과 캐시 확인 → DNS서버에게 www.naver.com IP주소를 요청
이때, 하나의 DNS 서버에서 전세계의 모든 DNS 정보를 관리하는 것인가?
아니다! 도메인을 계층적이게 관리해 서버를 분리한다.
DNS 계층 구조
Root NS, TLD NS, Sub Domain NS
네임 서버(NS, Name Server)
앞으로 이런 구조를 ‘55.10.54.75 (data)’ 을 패킷이라고 부르자
패킷을 받은 라우터 “가”는 패킷을 열어 목적지 IP주소를 확인한다. → 라우터 “가”의 경우, 나와 연결된 컴퓨터 중에는 이 IP주소를 가진 컴퓨터가 없음을 확인했다.
라우터 ”가”는 데이터를 다시 포장한 후, 자신과 연결된 유일한 라우터인 “마”에게 전달한다. → 라우터 “마”의 경우, “가”가 그랬던 것처럼 패킷을 까서 목적지를 읽는다. 이때, 목적지가 B라는 것을 알게된 라우터 “마”는 패킷이 B에 도착하려면 어느 전선으로 패킷을 내보내야 하는지 알아내야 한다. 이때, 라우터 “마”는 “가”에게 줘야 할지 “나”혹은 “바”에게 줘야할지 심각한 고민에 빠진다.[→ 라우팅 더 공부]
Network Layer란?
→ 수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해, IP주소를 이용해서 길을 찾고(= routing) 자신 다음의 라우터에게 데이터를 넘겨주는 것(=forwarding)
3계층 모듈은 운영체제 커널에 소프트웨어적으로 구현되어 있다.
데이터를 받는 수신자는 전세계의 컴퓨터로부터 데이터를 받을 것이다. 그런데 컴퓨터에는 여러 개의 프로그램(= 프로세스)들이 실행되고 있다.
예를 들어, 컴퓨터는 세 개의 데이터를 프로세스들에게 나누어 주려고 한다. 어떤 데이터를 무슨 프로세스에게 줘야할 지, 컴퓨터는 어떻게 알 수 있을까?
먼저, 데이터를 받고자 하는 프로세스들은 포트번호를 가져야 한다. 포트 번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값이다.
한편, 송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 보낸다.
ex. 검색창에 www.naver.com을 입력하는 것은 사실 뒤에 :80이 생략된 것이다. 우리는 네이버의 포트 번호도 알고 있다.
Transport Layer란? → Port 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스까지 데이터가 도달하게 하는 모듈
4계층 모듈도 운영체제 커널에 소프트웨어적으로 구현되어 있다.

OSI 모델 vs TCP/IP 모델
→ 사실 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 따르고 있다. TCP/IP 모델은 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델이다. 현대의 인터넷이 TCP/IP 모델을 따르는 이유는 OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 졌기 때문이다.
TCP/IP Updated Model의 경우, 5,6,7계층이 뭉뚱그려짐 → Application Layer로!
TCP/IP 소켓 프로그래밍
→ 운영체제의 Transport layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것을 TCP/IP 소켓 프로그래밍, 또는 네트워크 프로그래밍이라고 한다.
소켓 프로그래밍 만으로도 클라, 서버 프로그램을 따로따로 만들어 동작 시킬 수 있다. 뿐만 아니라 TCP/IP 소켓 프로그래밍을 통해서 누구나 자신만의 Application layer 인코더와 디코더를 만들 수 있다.
누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있다는 뜻이다.
대표적인 Application Layer 프로토콜인 HTTP로 살펴보자!!
Layered 아키텍처를 따르는 대표적인 예가 네트워크 시스템 → 네트워크 시스템은 하나의 커다란 소프트웨어라고 할 수 있다.