네트워크는 각 단말이 다른 단말로 데이터를 전송하기 위한 각종 시스템의 집합이라고 할 수 있다. 네트워크는 크게 세 세스템으로 구성되는데, 네크워크 엣지(단말), 접속 네트워크(access network), 네트워크 코어(network core)로 이뤄져 있다.
끝단(edge)이라는 의미처럼 스마트폰이나 랩탑 등의 클라이언트들과 서버 컴퓨터를 의미한다.
클라이언트를 네트워크 코어에 연결하기 위한 중간 단계의 네트워크 시스템이다.
라우터와 DNS 등의 집합체를 말한다.
참고로 인터넷은 말그대로 inter - network, 네트워크의 집합체이다.
데이터는 아무렇게나 보내는 것이 아니라 특정 방식의 인코딩/디코딩을 거쳐서 전송하게 된다. 이런 것들에 대한 규칙이 프로토콜이다.
프로토콜은 데이터의 형태에 따라 많은 것들이 존재한다. HTTP(hyper text transport protocol), TCP(transmission control protocol), UDP(user datagram protocol), IP(internet protocol), ARP(address resolution protocol) 등이 대표적인 프로토콜이다.
Domain name은 IP address를 사람들이 알아보기 쉽게 하기 위해 할당된 단어이다. ‘.com’ 이나 ‘.net’ 등으로 끝나는 주소가 그것이다. 실제 ‘google.com’을 주소창에 입력하면 DNS(domain name server)가 해당하는 IP 주소를 찾아 연결해 준다.
네트워크는 여러 시스템의 집합이기 때문에, 각 시스템이 한 모듈로서 서로 연결되기 위해서는 일정한 규약이 필요하게 된다. 이것에 대한 이론적 모델이 OSI 7계층 모델이며, 이론적 모델을 바탕으로 실제 현업에서 쓰이는 모델이 TCP/IP 모델이다.
전반적인 사용자 인터페이스와 프로토콜 등을 담당하는 계층이다.
사용자가 실제 마주하는 인터페이스를 제공하는 계층이다. 사용자는 인터페이스를 통해 데이터를 생산한다. HTTP, FTP 등 프로토콜에 따라 제공되는 서비스가 달라진다.
사용자가 생산한 데이터를 컴퓨터가 이해할 수 있는 정보로 해석하는 계층이다. 프로토콜에 따른 인코딩과 디코딩의 방식이 결정되는데, 가령 음악파일의 경우 .mp3 확장자로 나타내지고, 이미지는 .jpeg 나 .png, 텍스트 파일은 .txt 나 .doc로 나타내진다.
다른 어플리케이션이나 네트워크 사이의 연결 유지를 담당하는 계층이다. 동기화를 담당한다.
전송계층은 데이터를 어떻게 전송할지를 결정(소켓)하는 계층으로, TCP 방식과 UDP 방식이 있다. 소켓 프로그래밍과 관련된 계층이다.
IP 주소에 따라 논리적으로 네트워크를 연결해주는 계층이다. 라우터와 라우팅 테이블 등을 이용해 최적의 전송 경로를 찾아낸다.
전기적 물리 신호(bit)에 따른 실제 데이터 전송을 담당하는 계층이다.
물리적 연결과 논리적 연결 사이의 갭을 매꿔주는 계층이다. MAC(Media Access Control)을 통해 장비간의 통신 순서와 신호 종류 등을 정하고, LLC(Logical Link Control)로 장비들 간의 논리적 연결을 지원한다.
이더넷 케이블이나 NIC 등을 이용해, 패킹된 데이터를 비트 신호로 보내는 계층이다.
인터넷 상에서 IP주소는 유일하고 유한하다. 인터넷 초기에는 클래스를 나눠서 IP주소를 사용하도록 했는데, 주소 부족 문제에 직면하자
네트워크 클래스에는 A, B, C 등이 있으나 실질적으로 현재는 사라진 상황이다.
A클래스 : 0xxx xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
B클래스 : 10xx xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
C클래스 : 110x xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
D클래스 : 1110 xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
E클래스 : 1111 xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
CIDR(Classless Inter-Domain Routing, 사이더)는 클래스 없는 라우팅 방법으로 기존의 클래스 기반 라우팅의 주소부족 문제를 다소 해결한다.
CIDR 기반의 네트워크 주소는 끝에 /(숫자) 로 서브넷마스크를 파악할 수 있다. Prefix 표기법이라는 것으로 서브넷 마스크를 간단히 표기하기 위한 것이다.
가령, 42.42.42.42/16 이라고 했을 때, 네트워크 주소는 42.42.0.0, 호스트 주소는 0.0.42.42임을 알 수 있다.
네트워크 주소 = 호스트주소 부분이 모두 0인 주소
브로드캐스트 주소 = 호스트주소 부분이 모두 1인 주소 => IP주소로 사용되지 않는다.
서로 다른 네트워크 대역에는 다른 네트워크 주소를 할당해야 하는 규칙이 적용된다. 따라서 네트워크를 쪼개 서로 다른 네트워크 주소를 할당해 줘야 한다. 1bit 자리수씩 서브네팅을 진행하면 1/2 단위로 ip주소의 사용 범위가 쪼개진다.
IP 주소를 모든 단말기에 할당하기에는 부족하기 때문에 공유기를 통해 하나의 공인 IP를 나눠쓰기 위해 탄생한 개념이다. 한 공인 IP에서 단말기들은 사설 IP 주소를 할당받아 네트워크에 접속한다.
사설IP는 인터넷에 직접적으로 연결 될 수 없다.
10.0.0.0~10.255.255.255 (A 클래스 사설 IP 대역)
172.16.0.0~172.31.255.255 (B 클래스 사설 IP 대역)
192.168.0.0~192.168.255.255 (C 클래스 사설 IP 대역)
외부에서 단말기로 접근할 때 공유기의 공인 ip를 통하게 되는데, 이때 원하는 단말로 가기 위해선 포트번호를 함께 붙여서 접근하게 된다. 하지만 이때 붙인 포트번호만으로는 공유기에 연결된 단말기들 중 어느 단말기로 연결을 진행해야 할지 알 수 없다. 따라서 해당 포트번호를 특정 단말로 연결하겠다는 설정이 필요하고, 이를 포트포워딩이라고 한다.
라우터는 여러 네트워크를 연결하는 역할을 하기 때문에 하나 이상의 ip 주소를 가질 수 있다. 이 때 사설 네트워크에서 외부 네트워크로 접속하기 위해 통하는 라우터의 ip주소를 게이트웨이라고 한다.