네트워크란 수많은 컴퓨터가 하나의 그물망처럼 연결되어있는 체계를 의미한다. 네트워크 망이라는 이름으로도 불린다.
네트워크의 가장자리 부분을 Network Edge라고 한다.
Network Edge에는 랩탑, 데스크탑, 웹브라우저, 웹서버 등의 어플리케이션 또는 호스트가 위치해있다.
Network Core는 네트워크의 중심부를 의미한다.
Network Core에는 데이터들을 연결해주는 라우터 또는 네트워크의 네트워크 등이 위치해있다.
네트워크 상의 어플리케이션, 호스트, 라우터 등등은 모두 유무선의 링크로 연결되어있다.
Network Edge 상의 클라이언트, 서버를 End System 또는 말단 시스템이라고 한다. 웹, 이메일 등의 어플리케이션이 대표적인 End System이다.
End System은 인터넷에서 제공하는 통신 서비스 (TCP, UDP)를 통해 서로 통신한다.
현대의 웹브라우저, 웹서버, 이메일 등의 네트워크 서비스들은 대부분 클라이언트/서버 모델로 이루어져있다.
클라이언트는 서버에게 데이터를 요청(Request)하며, 서버로부터 서비스를 제공받는다. 따라서 클라이언트를 서비스 요청자 (Service Requester)라고도 한다.
서버는 클라이언트와 24시간 연결되어있고 요청이 들어올 때마다 알맞은 데이터를 전송한다. 따라서 서버는 서비스 제공자 (Service Provider)라는 이름으로도 불린다.
동등 계층간 통신망이라고도 한다. 양방향 전송 시스템을 갖고 있는데, 쉽게 말해 모든 컴퓨터들이 클라이언트와 서버 역할을 동시에 진행한다. 따라서 비교적 수가 적은 중앙 서버에 의존하지 않고 각 컴퓨터들끼리 직접 데이터를 주고 받는다.
이때 각각의 컴퓨터들을 계층 노드 (Peer Node) 라고 부르며, 이 Peer Node 끼리 직접 연결되어있기 때문에 Peer to Peer 라고 한다.
대표적인 예시로 스카이프, BitTorrent 등이 있다.
Network Edge 에는 다양한 프로토콜이 존재한다. Connection-Oriented Service는 연결 지향 프로토콜이라고 하며 엔드 시스템간의 데이터 전달 방식 중 하나이다. 대표적인 서비스로 TCP가 있다.
송신자와 수신자는 서로 연결되어있으며 요청 (Request)과 응답 (Respond)을 통해 데이터를 교환한다.
TCP는 인터넷에서 연결 지향 프로토콜에 기반한 데이터 전송 프로토콜이다.
TCP의 대표적인 특징은 다음과 같다.
신뢰성 (Reliable)이란 주고받는 데이터가 중간에 유실 (Loss)되지 않는다는 것을 의미한다. 만약 데이터가 유실된다면 이를 인지 (Acknowledgement)하고 재전송 (Retransmission)하여 신뢰성을 유지한다.
TCP는 수신자가 소화할 수 있는 속도에 맞춰서 데이터를 전송해주며 이를 흐름 제어 (Flow Control)라고 한다.
TCP는 만약 네트워크가 혼잡한 상태라면 데이터 전송 속도를 낮춰서 보낸다.
이러한 특징들로 인해 TCP는 안정적이고 안전하게 데이터를 전송할 수 있지만 많은 기능들로 인해 비용 (컴퓨터 자원, 네트워크 자원 등)이 많이 든다.
TCP의 대표적인 예시로는 웹의 HTTP, 파일 전송의 FTP, 원격 로그인의 Telnet, 이메일의 SMTP 등이 있다.
비연결 지향 프로토콜은 연결 지향 프로토콜과 마찬가질 서로 다른 엔드 시스템들끼리의 데이터 전달 방식 중 하나이다. 하지만 서로가 항상 연결되어있지 않는다는 차이가 있으며 대표적인 프로토콜로 UDP가 있다.
연결을 항상 유지하지 않기 때문에 비용이 덜 들어가며, 매번 연결할 때마다 자기 자신이 누구인지를 알려줘야한다.
UDP는 TCP와 반대로 연결되어있지 않으며 (Connectionless), 데이터 교환이 비신뢰적 (Unreliable)이다. 또한 Flow Control (흐름 제어), Congestion Control (혼잡 제어) 역시 제공하지 않는다.
따라서 UDP는 굳이 신뢰성을 지키지 않아도 되는 데이터를 전송하는 경우에 많이 사용되며 대표적으로 음성 전화가 있다. 음성 전화에서 내 말이 조금 끊기거나 전송되지 않더라도 바로 "방금 뭐라고 했어?" 또는 "잘 안들려" 등의 피드백이 가능하기 때문에 크리티컬한 문제가 발생하지는 않는다.
하지만 대부분의 서비스들은 데이터의 신뢰성이 매우 중요하므로 TCP를 더 많이 사용한다.
대표적인 UDP로는 미디어 스트리밍, 화상 회의, DNS, 인터넷 통신 등이 있다.
프로토콜은 네트워크 간의 통신에서 지켜야 할 통신 규약이다.
예를 들어, 서로 전화를 할 때 전화 걸고 바로 용건부터 얘기하지 않고 먼저 "여보세요"로 시작하고 간단한 형식적인 얘기부터 나누며, 둘이 같은 언어를 사용해야한다던지의 규칙이 있는 것처럼 네트워크 간의 통신에도 본격적인 데이터 교환 이전에 지켜야할 규칙이 있다.
인터넷에서의 모든 의사소통 (Communication)은 프로토콜에 기반하고 있다.
Network Core는 서로 연결된 라우터들의 집합이다.
Network Core에서 데이터가 전송되는 방식에는 크게 Circut Switching (회선 교환 방식), Packet Switching (패킷 교환 방식)이 있다.
Circut Switching은 각각의 통신이 하나의 회선으로 이루어져 있으며 유선 전화가 대표적인 예시이다.
Packet Switching은 각각의 데이터를 하나의 청크 (Chunk)에 담아서 전송하며 대표적으로 인터넷이 패킷 교환 방식을 사용하고 있다.
쉽게 말해 출발지부터 목적지까지 가는 길을 물리적으로 미리 정해놓고 데이터를 전송하는 방식이다. 즉, 엔드 시스템들끼리의 데이터 전달은 각각 Call로 이루어지며, 유선 전화망이 대표적인 예시이다.
데이터를 전송하려면 사전에 엔드 시스템끼리의 유선 연결 (Call Set-Up) 절차를 거쳐야 한다. 이 셋업 절차는 송신자부터 수신자까지의 경로에 걸맞는 대역폭 (Bandwidth)를 할당받아 연결하는 방식이다.
전용 회선망을 사용하므로 대용량의 데이터 또는 빠른 데이터, 연속적인 데이터 처리에 유리하다.
하지만 회선을 사용하는 엔드 시스템이 정해져있으므로 대역폭이 낭비되어 회선 사용 효율성이 떨어진다. 또한 비용이 많이 들며 통신 과정에서 문제가 생기면 회선을 처음부터 다시 셋업해야한다는 단점이 있다.
패킷 교환 방식은 패킷이라고 하는 작은 단위의 데이터 집합이 각 패킷에 포함되어있는 목적지 주소를 향해 네트워크 라우팅되는 방식이다.
회선 교환 방식과는 다르게 전송자와 수신자간의 경로가 정해져있지 않다. 최단 거리, 네트워크 혼잡도, 연결 상태 등에 따라 경로는 수시로 변경될 수 있다. 예를 들어, 100개의 패킷을 전송한다면 100개가 모두 서로 다른 경로로 전달될 수 있으며 수신자는 100개의 패킷을 모두 수신한 후 순서에 맞게 결합하여 사용한다.
패킷 교환 방식은 회선의 이용률이 높으며, 에러와 장애에 강하다. 에러가 발생하면 다른 회선을 사용하면 되기 때문이다. 또한 인터넷, 전화를 포함한 다양한 분야에서 사용이 가능하다.
반면 경로를 탐색하는 과정으로 인해 시간 지연이 발생하며, 데이터의 양이 많아지면 그만큼 시간이 더 오래 걸린다. 또한 이로 인해 부담 (Overhead)가 발생할 수 있다.
패킷 교환 방식에서 라우터는 패킷을 받으면 먼저 패킷의 검사를 진행한다. 목적지가 어디인지, 제대로 된 패킷인지 등의 검사가 진행되고 그 다음 목적지로 전송된다. 이때 검사 과정에서 Packet Delay (패킷 지연)이 발생할 수 있다. 패킷 지연은 크게 4가지의 종류가 있다.
라우터에서 패킷을 받고 검사할 때 발생하는 지연이다. 패킷 속 데이터에 잘못된 비트가 없는지 검사하고, 어느 경로로 보낼지를 결정하는 과정에서 발생한다.
만약 라우터에서 검사를 완료하고 다음 경로로 보내야되는데, 한번에 내보낼 수 있는 양보다 더 많은 데이터가 대기중인 경우가 생길 수 있다. 이때 라우터는 버퍼 (Buffer) 혹은 큐 (Queue)라고 하는 임시 저장소에 데이터를 저장하고 하나씩 꺼내어 보낸다. 큐잉 지연이란 데이터가 내보내지기 전에 큐에서 대기하는 시간을 의미한다.
큐잉 지연은 라우터의 혼잡도 정도에 따라 달라진다.
데이터는 여러개의 비트의 집합이다. 따라서 전송될 때는 첫 비트부터 마지막 비트까지 순차적으로 전송된다. 전송 지연이란 첫 비트부터 마지막 비트까지 완전히 나갈 때 까지 걸리는 시간이다.
따라서 패킷 크기를 link가 최대로 전송할 수 있는 데이터 양 (Bandwidth)으로 나눠서 계산할 수 있다.
R = Link Bandwidth (bps) (link가 최대로 전송할 수 있는 데이터 양)
L = Packet Length (bits) (패킷 크기)
Transmission Delay = L/R
전송 지연은 Bandwidth가 클수록 더 낮아지고, Bandwidth가 작을수록 더 커진다.
전송 지연과 다르게 한 데이터의 마지막 비트가 그 다음 라우터에 도착할 때 까지 걸리는 시간이다. 즉, 한 데이터의 마지막 비트가 올라와서 전송될 때 까지의 시간이다. 이는 단순히 비트를 전송하는 전자기파 즉 빛의 속도로 얘기할 수 있다.
전파 지연은 링크 길이를 빛의 속도로 나눈 값으로 계산할 수 있다.
d = Length of Physical Link (링크 길이)
s = Propagation Speed in Medium (~2x10^8 m/sec)
Propagation Delay = d/s
이처럼 4가지의 딜레이가 있는데 당연히 딜레이는 작을 수록 좋다.
1. Processing Delay는 라우터의 성능을 높여서 조절할 수 있다.
2. Transmission Delay는 Bandwidth의 너비를 넓혀서 조절할 수 있다.
3. Queueing Delay의 경우 인터넷에 사람들이 많이 몰리는 시간에 따라 달라지는데, 이는 사람들이 인터넷을 사용하는 패턴에 의한 딜레이이기 때문에 조절이 힘들다.
4. Propagation Delay 역시 빛의 속도에 의한 것이기 때문에 조절이 불가능하다.
라우터의 큐 또는 버퍼의 크기는 한정되어있다. 만약 큐/버퍼가 가득 차있는데 데이터가 또 들어온다면 그 데이터는 버려지게 된다. 라우터는 이처럼 데이터를 계속 버리다가 큐/버퍼에 공간이 생기면 그 때 들어온 데이터를 채워넣는다.
이러한 방식으로 인해 사람이 많이 몰리면 패킷 유실이 발생하게 되고, 실제로 패킷 유실의 90% 이상은 이 현상으로 인해 발생한다.
TCP는 패킷 유실이 발생하면, 그 패킷을 처음으로 보낸 위치에서 재전송하면서 데이터의 신뢰성을 보장한다.
라우터는 단순히 데이터의 전달 역할만을 수행하며, 최대한 단순 작업에 극대화되어있다. 따라서 라우터들을 Dumb Core라고도 한다.