1.2네트워크 통신을 위한 약속
네트워크를 이용하기 위해 가장 기본이 되는 약속, 통신 규약
TL;DR
추억의 쪽지 시험
5. 네트워크의 규칙, 프로토콜

프로토콜(protocol)이란, 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계를 뜻한다.
6. OSI 7 계층과 TCP/IP 4 계층
네트워크 구조를 설명할 때 대표적으로 사용하는 계층 모델은 아래의 두 가지이다.
- OSI 7 계층(Open Systems Interconnection 7 Layers)
- TCP/IP 4 계층(Transmission Control Protocol / Internet Protocol 4 Layers)
6-1. OSI 7 계층이 등장한 배경
OSI 7 계층은 컴퓨터가 통신을 하기 위해 필요한 것을 7개 계층으로 분리한 것이다.
1980년대 초, 통신 기술이 빠르게 발전하며 개인용 컴퓨터가 빠르게 보급되며 다양한 생산사에서 컴퓨터를 만들었다. 컴퓨터 간 통신을 위해 필요한 통신 장치들, 즉 허브, 스위치, 라우터 등도 다양한 회사에서 만들었다. 하지만 통일된 기준이 없이 만들다보니, 통신을 하려는데 장치들이 서로 호환이 되지 않는 문제가 있었다.
이 문제를 해결하고자 국제표준화기구(ISO, International Organization for Standardization)에서 컴퓨터 간 통신이 가능하도록 OSI 7 계층이라는 표준을 제정했다. 이 표준은 모든 장치가 서로 간의 통신을 보장할 수 있게 하기 위해 만들어졌다. 좀 더 구체적으로는, 통신에 필요한 계층을 나누고 각 계층별로 필요한 장치를 정의했기 때문에 제조사들이 통신에 필요한 프로토콜을 통일할 수 있었다.
6-2. OSI 7 계층
OSI 7 계층은 컴퓨터와 컴퓨터가 통신하는 구조를 7개의 계층으로 정의해둔 약속(프로토콜)이다. 각 계층과 그에 대한 상세는 아래 도식과 같다.

예를 들어, 7 계층은 장치 사용자가 이메일, 웹 브라우징 등을 통해 통신을 시작하거나 받을 때의 계층이다. 이것이 1 계층에서 1과 0으로 된 비트 신호로 변환되기까지, 데이터 암호화(6 계층)나 연결 설정(5 계층), 전송 계층의 TCP 같은 프로토콜(4 계층), ...등이 순서대로 이어진다. 즉, 데이터 흐름의 관점에서 보면 송신자와 수신자에게 이 7 계층은 아래와 같이 방향이 역순이다.

송신자 관점에선 7 계층인 응용 계층이 시작점인 반면, 수신자 관점에선 1과 0으로 받은 데이터가 다시 변환되어 보이는 응용 계층이 끝나는 지점이다.
OSI 7 계층은 이론적인 표준안으로, 너무 계층이 많다는 단점이 지적되었다. 현실에선 TCP/IP 4 계층이 사실상의 표준(De Facto Standard)으로 쓰이고 있다.
6-3. TCP/IP 4 계층
OSI 7 계층은 컴퓨터 간의 통신을 위한 표준이었다. 이 이론을 기반으로 만들어진 인터넷 표준이 TCP/IP 4 계층으로, OSI 7 계층의 축약이다.

7. OSI 7 계층에서의 데이터 표현
OSI 7 계층을 거치며 처리하는 데이터가 달라지기에, 각 계층에서 데이터를 부르는 용어가 다르다.
- 응용 / 표현 / 세션 계층 : 데이터 또는 메시지
- 전송 계층 : 세그먼트
- 네트워크 계층 : 패킷
- 데이터 링크 계층 : 프레임
- 물리 계층 : 비트
5 ~ 7 계층의 데이터 또는 메시지는 말 그대로의 데이터 본문이다. 예를 들어, 이메일을 보낸다고 하면 이메일의 본문이 데이터다.
4 계층(전송)의 세그먼트에는 데이터에 포트(port) 번호가 추가된다. 포트 번호란 애플리케이션을 구분하기 위한 번호인데, 예를 들어 www.google.com 사이트에서 우리는 검색도 할 수 있고, 이메일을 보낼 수도 있다. 보낸 데이터를 어떤 응용 프로그램을 사용해서 처리해야할지를 알리는 정보가 포트 번호다.
3 계층(네트워크)의 패킷에는 송/수신자의 IP 주소가 추가된다. IP 주소(Internet Protocol Address)는 인터넷에 연결되어 있는 모든 장치(사용자 컴퓨터, 서버, 스마트폰 등)를 식별할 수 있도록 각각의 장치에 부여된 고유 주소다. 즉, IP 주소는 다른 장치와 중복될 수 없다. IP 주소는 인터넷 서비스(KT, SKT, LG...)에 가입하면 할당받는 주소(또는 공유기/라우터나 핫스팟이 받는 주소)로, 네트워크 계층에서 사용된다.
2 계층(데이터 링크)의 프레임에선 송/수신자의 MAC 주소가 추가된다. MAC 주소(Media Access Control Address)는 하드웨어 장치에 할당된 주소로, 네트워크 카드(랜 카드)에 공장에서 찍혀 나오는 번호로 다른 장치와 중복되지 않는다. MAC 주소는 컴퓨터를 구매할 때부터 할당되어 있는 기기 고유번호이며 데이터 링크 계층에서 사용된다.
데이터 링크 계층에선 트레일러(trailer)라는, 전달한 데이터에 오류가 없는지 검출하기 위한 정보도 붙는다.
192.168.0.10처럼 0 ~ 255 숫자 네 개를 점(.)으로 구분한 IPv4와 2001:0db8:85a3::8a2e:0370:7334처럼 16진수와 콜론(:)으로 이루어진 더 긴 형식인 IPv6이 쓰인다.IPv4는 총 32비트의 정보이므로 2^32 = 약 43억 개의 고유한 주소가 있다. 오늘날의 통신 장비 수가 몇 개일지 생각해보면 이보다 훨씬 많을 것임을 예상할 수 있는데, IPv6을 지원하는 네트워크 장비가 보급되는 속도보다 IPv4 주소가 포화되는 속도가 더 빨랐기 때문에, 하나의 IP를 여러 장치에서 쓸 수 있도록 하는 NAT 기술(Network Address Translation, 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하게 해줌)이 먼저 도입되게 되어 우리에게 친숙한
192.168.x.x 같은 IPv4 사설 IP 주소가 아직도 쓰이는 것이다. 이러한 IPv4 주소는 집이나 회사 안의 내부 네트워크에서 쓰는 주소로, 통신사로부터 받은 하나의 공인 IP 안에서의 주소이며 외부 인터넷과 통신할 때는 이 공인 IP 주소를 통해 통신하게 된다.MAC 주소는 보통
a1:b2:c3:d4:e5:f6 또는 A1-B2-C3-D4-E5-F6과 같이 콜론 또는 대시(-)로 구분된 형식이 쓰인다. 이 중 앞의 3자리(24비트)는 제조사 코드, 뒤의 3자리는 기기 고유코드이며, 총 48비트이기 때문에 가능한 모든 MAC 주소의 개수는 2^48 = 약 281조 개이다.그럼, 내가 지금 쓰고 있는 장치의 IP 주소와 MAC 주소는 어떻게 알 수 있을까? 아래 개인탐구 부분에서 살펴보았다.
8. 캡슐화와 역캡슐화
OSI 7 계층을 거치며 데이터에 포트 번호, IP 주소, MAC 주소 등 통신에 필요한 정보가 하나씩 덧붙여지는 과정을 캡슐화(Encapsulation)라고 하고, 이렇게 덧붙여지는 정보를 헤더(Header)라고 한다. 반대로, 헤더가 분리되는 과정은 역캡슐화(Decapsulation)라고 한다.
앞서 살펴본 캡슐화 과정에서 각 계층에 덧붙여지는 헤더 정보를 정리하면 아래와 같다.
| 계층 | 헤더 정보 |
|---|---|
| 전송(4) | 포트 정보 |
| 네트워크(3) | 송수신자의 IP 주소 |
| 데이터 링크(2) | 송수신자의 MAC 주소, 트레일러 |
역캡슐화 과정에선 1계층부터 시작해 7계층으로 올라가며 헤더 정보가 하나씩 벗겨진다. 즉, 데이터 링크 계층에서 MAC 주소를 획득하고, 네트워크 계층에서 IP 주소를 획득하고, 전송 계층에서 포트 번호를 획득하며 모든 정보를 얻어 수신자에게 통신 정보가 도달한다.
9. VPN
회사나 학교 등 기관의 네트워크에는 수십 대의 시스템이 운영되고 있으며, 일반적으로 이 시스템들은 개인 정보 등 기밀 정보들을 포함하고 있기에 외부에서 접근하지 못하도록 보안에 주의를 기울여야 한다. 하지만, 외부의 접근을 모두 막으면 정작 시스템에 접근해야하는 관계자들의 업무에 차질이 생길 수 있다. 이럴때 쓰는 것이 VPN으로, VPN(Virtual Private Network, 가상 사설망)은 인터넷을 통해 데이터를 안전하게 전송하기 위한 기술이다.
VPN은 일반적으로 아래와 같은 방식으로 동작한다:
- VPN 클라이언트 소프트웨어 설치: 외부에서 시스템에 접근하려는 사람들(직원들)은 자신의 컴퓨터에 VPN 클라이언트를 설치한다.
- VPN 서버 연결 및 인증: VPN 클라이언트 소프트웨어를 이용해 서버에 연결하고, 사용자 이름과 암호를 사용해 인증한다.
- 데이터 암호화: VPN 연결이 되면 모든 데이터는 암호화되어 전송된다. 따라서 인터넷을 통해 전송되지만 이 데이터는 다른 사람들은 알 수 없다.
- 터널링: 암호화된 데이터를 전송할 때는 터널링(Tunneling)이라는 기술을 사용하는데, 마치 터널이 뚫린 것처럼 네트워크 사이에 통로를 생성하는 기술이다.
- 이후 통신이 종료되면 VPN 터널이 해제되고 VPN 연결도 종료된다.
VPN은 아래 2가지 종류가 있다.
- IPSec(Internet Protocol Security) VPN: OSI 계층들 중 3 계층(네트워크)에서 동작하며, IP 패킷을 암호화한다. 소프트웨어를 설치하여 접속하는 방식이다.
- SSL(Secure Socket Layer) VPN: 4 ~ 7 계층에서 작동하며, 데이터를 암호화한다. 웹 브라우저에서 접속하는 방식이다.
요즘은 구현에서 SSL 대신 TLS가 쓰이는 경우가 많지만, 관습적으로 SSL VPN이라는 이름은 여전히 많이 사용되는 편이라고 한다.
🤠 개인 탐구
내가 지금 쓰고 있는 장치의 IP 주소와 MAC 주소를 알아보고 싶었다.
우선, IP 주소의 경우 맥북에선 애플 메뉴 → 시스템 설정 → 네트워크 → 사용중인 Wi-Fi를 통해 확인할 수 있다.

터미널에선 이런 식으로 확인할 수 있다:
bashipconfig getifaddr en0
여기서 getifaddr과 en0이 이상하게 보일 수 있다.
우선, 왜 ip가 아니라 if addr인지 궁금할 수 있는데, if는 interface의 약자이다. ifconfig는 옛날 유닉스에서 쓰이던 명령어로, if는 network interface를 의미하고, 컴퓨터는 여러개의 네트워크 인터페이스(Wi-Fi, 유선 LAN, 테더링, 가상 어댑터 등등)가 있을 수 있으므로 그 중 어떤 인터페이스의 주소를 찾으려는지를 지정해야하기 때문에 getifaddr를 쓰는 것이다.
en0은 주로 Wi-Fi 인터페이스다. 따라서 위의 명령어는 en0이라는 인터페이스(보통 Wi-Fi)에 붙어 있는 IP 주소를 보여달라는 뜻이고, 이에 앞서 본 Wi-Fi 메뉴에서 봤던 것과 같은, 10.102.92.238이라는 주소를 확인할 수 있게 된다.

이 주소는 IPv4인데, 앞서 언급했듯 실제 통신은 핫스팟을 제공하고 있는 내 휴대전화의 공인 IP로 이루어지고, 위 IPv4는 휴대전화 핫스팟이 사설 IP 대역을 만들어 이 맥북에 나눠준 주소다.
그렇다면 실제 통신이 이루어지고 있는 이 공인 IP 주소는 어떻게 확인할 수 있을까? 이건 내 컴퓨터가 보낸 요청이 외부에서 어떤 IP로 보이는지 알려주는 웹 서비스에 접속해보면 된다. 예를 들어, 아래의 명령어는 현재 사용 중인 공인 IP 주소를 확인할 수 있게 해준다.
bashcurl ifconfig.me

MAC 주소는 아래의 명령어로 확인할 수 있다.
bashifconfig en0 | grep ether
ifconfig과 en0은 앞서 설명했지만, 어떻게 여기에 ether라는 키워드로 grep을 해서 MAC 주소를 알아낼 수 있는걸까?
우선, ifconfig의 interface는 2계층과 3계층을 모두 포함한 정보를 보여준다. 따라서 ip주소(3계층)와 MAC 주소(2계층)를 모두 확인할 수 있다. 예를 들어, ifconfig의 출력은 대략 이런 형태다:
bashen0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether a1:b2:c3:d4:e5:f6 ← 2계층(데이터 링크 계층) 주소 inet 192.168.0.5 netmask 0xffffff00 broadcast 192.168.0.255 ← 3계층(IP 정보) inet6 fe80::1234:5678:abcd:ef01%en0 prefixlen 64 scopeid 0x4 ← 3계층(IPv6)
ether라는 키워드는 원래 유닉스 계열에서 네트워크 인터페이스 중 이더넷(Ethernet), 즉 유선 LAN을 나타내는 필드를 ether라고 표현하던 데서 왔다. Wi-Fi는 내부적으로 Ethernet 프레임과 매우 비슷한 구조를 쓰기 때문에, 오늘날에도 여전히 해당 필드를 ether라는 레이블로 표시한다.