서로 데이터를 교환하고 리소스를 공유할 수 있는 상호 연결된 Computing device
의 집합
프로토콜을 사용하여 통신
다양한 형태로 구성(Topology)
Computing device간 메시지 전달을 위해 중간 연결 역할을 수행하는 다양한 디바이스
를 말한다.
하나 이상의 node가 다양한 형태로 연결될 수 있다.
Node 종류
컴퓨터와 개인 또는 공용 네트워크 간의 상호 연결 지점
일반적으로는 NIC(Network Interface Controller)와 같이 물리적인 디바이스를 이야기 하지만, Loopback interface와 같이 가상 디바이스로도 구현 가능
장거리 전송시 물리적인 영향이나 외부 영향에 따른 신호 품질 저하를 줄인다.
-- 신호 증폭을 통해 장거리에 전송에 따른 신호 감소 문제 해결
-- 신호 처리를 통한 외부로부터 유입된 노이즈 제거
전송 거리나 환경 요인을 극복하기 위해 물리적 전송 매체를 변경할 수 있다.
-- 장거리 대용량 데이터 전송에는 금속을 이용한 케이블보다 광 기술을 이용한 케이블이 적합
-- 육지와 섬간 통신을 위해서 물리적으로 연결된 케이블 연결보다 물리적 연결이 필요없는 무선 통신이 적합
데이터를 네트워크를 통해 전송하는 것은 네트워크의 물리적 특성과 전송되는 데이터의 논리적 특성을 주의 깊게 조율해야 하는 복잡한 작업이다. 데이터를 네트워크를 통해 전송하는 소프트웨어는 패킷 간 충돌을 피하고, 디지털 데이터를 아날로그 신호로 변환하며, 오류를 감지하고 수정하며, 패킷을 호스트에서 다른 호스트로 경로 지정하고 등 다양한 작업을 이해해야 한다. 이러한 프로세스는 여러 운영 체제 및 다양한 네트워크 케이블링을 지원해야 하는 요구 사항을 추가하면 더 복잡해진다.
여기서 언급한 주요 측면을 자세히 살펴보면,
요약하면, 네트워크를 통해 데이터를 전송하는 것은 실제로 복잡한 작업이며, 네트워크 소프트웨어는 이러한 복잡성을 관리하는 데 중요한 역할을 한다. 이는 물리적 계층(예: 케이블 및 신호)부터 논리적 계층(예: 데이터 형식 및 라우팅)까지 모든 측면을 처리하면서 호환성, 보안 및 확장성 문제를 다루어 다양한 네트워크 환경에서 데이터를 신뢰성 있고 효율적으로 전송할 수 있도록 해야 한다.
아래의 그림은 네트워크에서 존재할 수 있는 프로토콜 스택을 보여준다.
오늘날 대부분의 인터넷에서는 중간 계층 프로토콜이 상당히 일관성 있지만, 맨 위와 맨 아래는 매우 다양하다.
어떤 호스트는 Ethernet을 사용하고, 어떤 호스트는 Wi-Fi를 사용하며, 어떤 호스트는 PPP를 사용하고, 어떤 호스트는 다른 것을 사용한다.
마찬가지로 스택 맨 위에 있는 것은 호스트가 실행 중인 프로그램에 완전히 의존한다.
중요한 점은 스택의 맨 위에서는 맨 아래에 있는 것이 무엇인지, 그 반대도 별로 중요하지 않다는 것이다.
계층 모델은 응용 프로토콜(이 책의 주요 주제)을 네트워크 하드웨어의 물리적 특성과 네트워크 연결의 토폴로지와 분리한다.
네트워크 기능을 계층으로 분리하는 것은 네트워킹의 기본 개념으로, 종종 OSI(Open Systems Interconnection) 모델 또는 TCP/IP 모델로 불립니다. 이러한 모델은 각각의 특정 기능을 갖춘 표준화된 프로토콜과 계층 집합을 정의한다:
Physical Layer: 이 계층은 실제 데이터 전송을 다룹니다(전선, 광섬유 등). 하드웨어 특성, 신호 및 전송 속도를 정의한다.
Data Link Layer계층: 이 계층은 직접 연결된 두 노드 간의 신뢰할 수 있는 링크를 만듭니다. 프레임 형식, 오류 감지 및 흐름 제어와 같은 문제를 처리한다. Ethernet은 데이터 링크 계층 기술의 예입니다.
Network Layer: 네트워크 계층은 다중 연결된 네트워크를 통해 패킷을 출발지에서 목적지로 라우팅한다. IP(Internet Protocol)가 이 계층에서 작동한다.
Transport Layer: 이 계층은 발신자와 수신자 간의 종단 간 통신을 보장한다. 데이터 분할, 흐름 제어 및 오류 정정을 관리한다. TCP(Transmission Control Protocol) 및 UDP(User Datagram Protocol)는 전송 계층 프로토콜입니다.
Session Layer: 이 계층은 통신 세션을 설정, 관리 및 종료한다. 세션 동기화 및 대화 제어를 처리한다.
Presentation Layer: 데이터 번역, 압축 및 암호화를 담당한다. 데이터가 발신자와 수신자 양쪽에서 읽을 수 있는 형식으로 제공됨을 보장한다.
Application Layer: 가장 상위 계층으로 응용 프로그램별 프로토콜 및 데이터 형식을 처리한다. 웹 브라우저, 이메일 클라이언트 및 파일 전송 소프트웨어와 같은 사용자 수준 응용 프로그램이 작동하는 곳입니다.
네트워크 통신을 이러한 계층으로 분해하면 네트워킹 솔루션을 관리하고 개발하기가 더 쉬워집니다. 또한, 각 계층이 정의된 인터페이스를 준수한다면 다양한 하드웨어와 소프트웨어 구현이 원활하게 작동할 수 있으므로 상호 운용성이 가능해집니다. 이 계층화된 접근 방식은 네트워크 시스템의 개발과 유지 관리를 크게 단순화한다.
TCP/IP 프로토콜 스택의 구성 요소를 설명한다.
Host-to-Network(네트워크 인터페이스라고도 함)는 가장 낮은 TCP/IP 계층로, 패킷을 수신하고 특정 네트워크를 통해 전송하는 역할을 담당한다. Network interface는 장치 드라이버 또는 자체 데이터 링크 프로토콜을 사용하는 복잡한 서브시스템으로 구성될 수 있다.
Internet protocol layer는 한 대의 기계에서 다른 대의 기계로의 통신을 처리한다. 이 layer는 transport layer에서 데이터를 전송하도록 요청을 수락하며, 데이터를 전송할 기계의 식별 정보와 함께 받는다. 그런 다음 데이터를 IP 데이터그램으로 래핑하고 데이터그램 헤더를 채우며, 데이터그램을 전달 방법을 결정하기 위해 라우팅 알고리즘을 사용하고 데이터그램을 전송하기 위해 적절한 장치 드라이버에 전달한다.
IP 레이어는 OSI 참조 모델에서의 네트워크 레이어에 해당한다. IP는 연결 없는 "신뢰할 수 없는" 패킷 전달 서비스를 제공하여 패킷을 한 시스템에서 다른 시스템으로 라우팅한다.
Transport layer의 주요 목적은 한 응용 프로그램에서 다른 응용 프로그램으로의 통신을 제공하는 것이다. 소프트웨어는 전송되는 데이터 스트림을 ISO 용어로 패킷이라고 하는 더 작은 조각으로 나누고 각 패킷과 목적지 정보를 다음 레이어로 전달한다.
이 layer는 connection-oriented transport service(COTS)인 Transport Control Protocol(TCP)과 connectionless transport service(CLTS)인 User Datagram Protocol(UDP)로 구성된다.
Application layer는 TCP/IP 인터넷 전체에서 사용 가능한 서비스에 접근하는 사용자 호출 응용 프로그램으로 구성된다. 응용 프로그램은 데이터를 전송 레이어로 전달하기 위해 필요한 형식으로 전달한다.
컴퓨터 네트워크에서 사용되는 계층화된 분산 데이터베이스 시스템이다. DNS의 주요 목적은 사람이 이해할 수 있는 도메인 이름
(예: www.example.com)을 컴퓨터가 이해할 수 있는 IP 주소
(예: 192.168.1.1)로 변환하거나 그 반대로 IP 주소를 도메인 이름으로 변환하는 것이다.
도메인 이름 해석 (Name Resolution): DNS는 사용자가 입력한 도메인 이름을 해당 도메인에 대한 IP 주소로 해석합니다. 이것은 웹 브라우징, 이메일 통신, 파일 공유 및 다른 네트워크 활동에서 중요한 역할을 합니다.
계층 구조: DNS는 계층 구조를 가지고 있으며, 최상위 수준의 도메인(TLD, Top-Level Domain)에서부터 하위 수준 도메인(subdomain)까지 내려가는 방식으로 도메인 이름을 구성합니다. 예를 들어, "www.example.com"에서 ".com"은 최상위 수준 도메인이고 "example.com"은 하위 수준 도메인입니다.
DNS 서버: DNS 정보는 전 세계에 분산된 DNS 서버에 저장되어 있으며, 이들은 계층적인 구조를 가집니다. 루트 서버, 최상위 도메인 서버, 중간 도메인 서버 및 기업 또는 ISP(인터넷 서비스 제공업체)의 로컬 DNS 서버 등이 있습니다.
DNS 쿼리: 컴퓨터 또는 장치가 도메인 이름을 IP 주소로 변환하려면 DNS 쿼리를 보내야 합니다. 이 쿼리는 사용자 요청에 따라 로컬 DNS 서버 또는 상위 DNS 서버로 전달되고, 최종적으로 도메인에 대한 IP 주소를 반환합니다.
DNS 캐싱: DNS 서버는 이전에 검색한 도메인 이름에 대한 결과를 캐싱하여 빠른 응답을 제공합니다. 이를 통해 동일한 도메인 이름에 대한 반복적인 쿼리를 줄일 수 있습니다.
DNS는 인터넷의 핵심 구성 요소 중 하나이며, 웹 브라우징, 이메일, 파일 공유 및 네트워크 통신과 같은 모든 온라인 활동에 필수적입니다. DNS는 사람이 이해할 수 있는 도메인 이름을 기억하기 쉬우며 컴퓨터가 이해할 수 있는 IP 주소로 변환하여 인터넷을 사용하는 데 편의성을 제공합니다.
nslookup 명령을 이용해 dns의 역할을 알아보자.
$ nslookup gmail.com
$ nslookup -q=a gmail.com
$ nslookup -q=mx gmail.com
$ nslookup -q=ns gmail.com
$ nslookup -q=mx gmail.com ns1.google.com
$ sudo /usr/sbin/tcpdump -nnn -X -i eth0 udp port 53
$ cat /etc/resolv.conf