분량이 많아져.. 네트워크 계층의 ICMP 프로토콜부터 2번째 게시글 작성 중에 있습니다. 다음 글을 확인해주세요!!
Ⅰ. 개요
네트워크는 통신 과정 전반을 아우르는 개념이다. 물리적인 측면부터 그렇지 않은 부분까지 방대하며, 그 중 네트워크의 유형은 규모에 따라 달라진다. LAN(Local Area Network)은 일반적으로 300m 이하의 통신 회선으로 연결된 PC 메인 프레임(Main Frame)과 워크스테이션의 집합이다. MAN(Metropolitan Area Network)는 LAN을 고속의 백본(Backbone)으로 묶은 형태로, LAN 수준의 높은 데이터 전송률을 제공한다. WAN(Wide Area Network)는 지리적으로 흩어진 통신망으로 LAN보다 더 넓은 지역에서 구성가능하다. 데이터 전송 방식에 따른 네트워크 유형은 회선과 패킷 교환망이 있는데 패킷 교환망을 알아보고자 한다. 프로토콜의 경우 OSI(Open System Interconnection) 7계층에 따라 다양한 프로토콜이 구성될 수 있지만, 기본적인 프로토콜 개념과 기능, 종류를 알아보고 데이터 링크 계층, 네트워크 계층, 전송 계층 프로토콜을 자세히 알아본다. 나머지 세션, 표현, 응용 계층에 대한 프로토콜은 나중에 다루기로 한다.
Ⅱ. 네트워크와 유형
네트워크(NetWork)란? 그물을 뜻하는 Net과 작업의 Work를 합성한 단어로 그물처럼 서로 긴밀하고 길게 연결되어 있다는 의미를 가진다. 보통 IT업계에서 쓰이는 용어지만, 컴퓨터(PC)나 스마트폰에 의해 모르는 사람이 없을 정도로 널리 퍼져있다. 간단하게 네트워크는 2대 이상의 컴퓨터 혹은 스마트폰을 서로 연결해주는 통신망이라고 생각하면 된다. 네트워크 유형은 규모에 따라 나누거나 데이터 전송 방식에 따라 구분된다. 규모에 따라 나누게 되면 LAN(Local Area Network), MAN(Metropolitan Area Network), WAN(Wide Area Network)로 분류할 수 있다.
LAN(Local Area Network)
LAN은 일반적으로 가정에서 인터넷 사용하는 걸 떠올리면 쉽다. 일반적으로 300M 이하의 통신 회선으로 연결된다고 하는데, 집에서 공유기를 쓰면 집 안에서는 잘 되지만, 밖에선 안되는 것처럼 전류나 전파 신호가 정확히 전달될 수 있는 범위이다. 고속 통신망으로 1980년대 초 제록스의 한 연구소에서 이더넷(Ethernet)이라는 컴퓨터 연결 방법이 실용화된 결과물이다.
MAN(Metropolitan Area Network)
LAN을 고속의 백본(Backbone)으로 묶은 형태로 LAN 수준의 높은 데이터 전송률을 제공한다. 여기서 백본이란? 간단히 얘기해서 여러 소형 네트워크를 묶어 대규모 파이프라인을 통해 높은 대역폭으로 다른 네트워크 집합들과 연결되는 것이다. 보통 범위는 도시나 큰 캠퍼스를 연결한다고 보면 된다.
WAN(Wide Area Network)
지리적으로 흩어진 통신망으로 지방과 지방, 국가와 국가, 대륙과 대륙처럼 장거리 지역 사이를 연결시켜줄 수 있는 네트워크이다. 우리가 구글, 넷플릭스 등에 접속할 수 있는 이유도 이 네트워크 유형때문이다.
네트워크 전송 방식은 회선 교환망(Circuit Switched Network)와 패킷 교환망(Packet Switched Network)가 있는데, 우리는 실제로 패킷 교환망을 사용하고 있기 때문에, 그 개념만 알아도 충분하다. 패킷 교환망은 전송하고자 하는 정보를 패킷이라는 작은 단위로 나눠서 요청을 하는 사람이 패킷에 발신지와 수신지 주소를 넣고 패킷 교환망에 보내게 된다. 이때 패킷 교환기가 패킷에 적힌 주소를 보고 최종 목적지까지 전달하며, 네트워크 상태에 따라 여러 경로를 통해 전송될 수 있다. 통신 경로가 확정되지 않은 것이 특징이다.
※ 여기서 발신지, 수신지 주소는 IP주소를 의미하고 이후에 다룰 내용이겠지만, IP주소는 MAC주소와 함께 전송된다.
Ⅲ. OSI(Open System Interconnection) 7계층
존재하지 않는 이미지입니다.위 그림은 OSI(Open System Interconnection) 7계층 구조를 표현했다. OSI 7계층은 네트워크 통신이 일어나는 과정을 7단계로 나눈 것을 의미한다. 첫 번째 단계는 물리 계층(Physical Layer)으로 물리적인 장비(하드웨어)를 통해 전송이 일어난다. 두 번째 단계는 데이터 링크 계층(Data Link Layer)으로 물리계층에서 송수신되는 데이터를 오류와 흐름을 관리하여 정보의 전달을 수행한다. 세 번째 단계는 네트워크 계층(Network Layer)으로 데이터를 안전하고 빠르게 목적지까지 전달(라우팅)하는 기능이 이뤄진다. 네 번째 단계의 전송 계층(Transport Layer)은 두 지점간의 사용자들이 데이터를 신뢰성있게 주고 받을 수 있는 역할을 담당한다. 다섯 번째 단계는 세션 계층(Session Layer)으로 네 번째 단계인 전송 계층과 유사하지만, 더 상위적인 논리적 연결을 할 수 있게 해준다. 여섯 번째 단계는 표현 계층(Presentation Layer)으로 데이터가 표준 방식으로 표현되게 코딩, 암호화 등이 이루어진다. 마지막으로 일곱 번째 단계는 응용 계층(Application Layer)으로 최종 목적지로서 응용 프로세스와 직접 관계하여 응용 서비스를 수행한다. 이 개념을 전부 상세히 이해하면 좋겠지만, 이 '클라우드 기반의 모빌리티 융합보안과정'에선 '데이터 링크 계층', '네트워크 계층', '전송 계층'에서 발생하는 보안 관련 문제에 주안점을 두고 있어, 이 계층들 위주로 살펴보고 관련 프로토콜을 알아보고자 한다.
데이터 링크 계층
데이터 링크 계층은 물리 계층에서 전달 받은 장치 신호를 오류를 감지하고 수정해준다. 물리 계층의 하드웨어에 대표적으로 LAN카드가 보낸 전기 신호를 감지하는데, 이때 사용되는 프로토콜이 이더넷(Ethernet)으로 MAC(Media Access Control)주소를 기반으로 통신을 진행하며, 3계층인 네트워크 게층으로 전송하는 역할을 담당한다.
네트워크 계층
실제 데이터를 주고 받을 송신지와 발신지를 연결하고 네비게이션 역할을 수행하는 걸 라우팅(Routing)한다고 하는데, 이 네트워크 계층에서 이루어진다. 여기서 가장 중요한 프로토콜은 IP(Internet Protocol)와 ICMP(Internet Control Message Protocol)로 라우터는 사용자의 메시지를 라우팅하기 위해 이 포로토콜을 활용하며, 그와 관련된 ARP(Address Resolution Protocol), RARP(Reverse Address Resoultion Protocol)이 있다.
전송 계층
이 계층에선 실제 정보를 주고 받을 두 대상 간 직접 연결을 담당해준다. 이 계층에서 중요한 프로토콜은 TCP(Transmission Control Protocol)과 UDP(User Datagram Protocol)이 있으며, 각 프로토콜은 장단점이 있다. 결국 데이터 링크 계층은 물리적 장비와 연결을 담당하고 네트워크 계층은 물리적 장비의 신호를 기반으로 한 호스트 간 길안내를 담당한다면, 전송 계층에선 실제 프로세스 간 통신을 담당한다.
※ 프로세스 간 통신이란? 예를 들어, 두 컴퓨터 사이의 애플리케이션(브라우저)의 데이터를 주고 받는 역할을 담당해준다는 것이다. 개발자 입장에서 얘기해보자면, 서버와 브라우저 간의 통신을 담당해준다고 볼 수 있다.
Ⅳ. 프로토콜(데이터 링크, 네트워크 계층 중심으로)
각 계층의 프로토콜 종류와 설명에 들어가기 전에 프로토콜부터 설명해보자면, 프로토콜(Protocol)은 외교적으로 국가 간 의례를 진행할 때 어떻게 진행할 것인지에 대한 상호 간의 약속이다. 컴퓨터 사이에서 보자면, 서로 메시지를 주고 받아 통신하기 위해 메시지는 어떻게 구성되고 전달하는 과정은 어떻게 되는지를 정의해놓은 것이라고 생각하면 좋다. 그래서 프로토콜은 구문(Syntax), 의미(Semantics), 순서(Timing)의 세 요소를 가지는데, 구문은 데이터 형식이나 신호, 부호화 방법을 정의했고 의미는 오류, 동기, 흐름 제어 같은 각종 제어 절차에 관해 정의했고 순서는 송/수신자 간 혹은 양단(End-to-End)의 시스템과 네트워크 망 사이의 통신 속도나 순서를 정의했다.
이렇게 정의된 프로토콜은 다양한 기능을 수행하는데 강의해주신 자료를 참고하자면,

리눅스 및 네트워크 강의 교안 참조

리눅스 및 네트워크 강의 교안 참조
이렇게 정리할 수 있다. 간단히 읽어보는 걸 권장하며, 관련된 기능들은 밑에서 프로토콜을 다루다 보면 연결되는 부분이 있을테니 넘어간다.
데이터 링크 계층 프로토콜(Protocol)
데이터 링크 계층의 대표적인 프로토콜은 이더넷(Ethernet)이다. 이더넷 프로토콜은 네트워크 하드웨어(랜카드) 사이에서 MAC주소를 기반으로 통신하게 해준다. 이더넷 패킷의 최소 길이는 64KBytes, 최대 길이는 1,518KBytes로 패킷 구조는 아래의 사진처럼 구성될 수 있다.


이 내용들은 하나하나 다루자면 정말 방대해지기 때문에, 우선적으로 알아야될 점은 Destination MAC Address(목적지 MAC 주소)와 Source MAC Address(송신지 MAC 주소)이다. 목적지 MAC 주소는 패킷을 받을 네트워크 인터페이스에 대한 MAC 주소로 MAC 주소는 LAN카드의 고유 식별자라고 생각하면 된다. 위 첫 번째 사진에서 보면 괄호 안에 ':'으로 구분되어 있는 게 MAC 주소이며, 예전엔 하드웨어 제조사들이 제조 과정에서 고정시켜 변경할 수 없었지만, 지금은 드라이버를 통해 변경할 수 있다.
※ MAC 주소는 IP 주소와 매핑 되는데, IP 주소는 이후에 다루겠지만 서비스를 제공하는 서버의 고유 식별자로 특정되어 있다. 그렇기 때문에 IP 주소를 변경하는 해킹 공격을 방지하기 위해 IP 주소로만 식별하는 것이 아닌 MAC 주소와 IP 주소를 같이 저장하여 IP 주소만 바꿔서 접속을 시도하더라도 MAC 주소에 의해 차단될 수 있었다. 하지만 MAC 주소가 변경 가능해짐에 따라 피싱 사이트가 지속적으로 서버에 요청을 보내 자신의 MAC 주소와 서버의 IP 주소를 교체(가로채는)해버리는 공격이 이뤄지곤 한다.
※ 패킷을 간단히 설명하자면, 요즘은 그럴 일이 드물지만 시골에 계신 할머니나 할아버지에게 편지를 보내는 상황에서 편지가 패킷이 되고 그 편지가 우체국을 통해서 어떻게 전달될 수 있는지 정의해주는 것이 프로토콜을 활용하는 것이다.
만약 목적지 MAC 주소가 모두 1(FF:FF:FF:FF:FF:FF:FF)이면 이후에 다룰 브로드캐스팅 패킷이 된다. 송신지 MAC 주소는 패킷을 보내는 네트워크 인터페이스에 대한 MAC 주소를 가리키며, 즉 내 컴퓨터의 랜카드의 MAC 주소라고 생각하면 된다.
2. 네트워크 계층 프로토콜(Protocol)
네트워크 계층의 프로토콜은 대표적으로 IP(Internet Protocol)와 ICMP(Internet Control Message Protocol)가 있다. IP와 ICMP 프로토콜에 들어가기에 앞서 이전 데이터 링크 계층 프로토콜의 MAC 주소와 관련된 ARP(Address Resolution Protocol)을 설명하려고 한다. ARP는 통신 대상 시스템에 도달하기 위해 네트워크 인터페이스의 MAC 주소를 알아낼 때 사용된다. 상대방의 MAC 주소는 랜카드의 고유 식별자인데 어떻게 알 수 있는 것인가? 란 질문의 답이 되며, 이더넷 프로토콜에서 패킷이 목적지 MAC 주소를 가질 수 있는 이유이기도 하다. ARP는 IP 주소와 MAC 주소를 매핑하는 프로토콜로서 내 컴퓨터의 IP 주소와 MAC 주소 뿐만이 아니라 메시지를 전달하고자 하는 상대방(서버)의 IP 주소와 MAC 주소를 매핑해준다. 우선 ARP Request를 보내 IP 주소를 바탕으로 목적지의 MAC 주소를 찾는다. ARP Reply 과정을 통해 목적지 MAC 주소를 수신받게 되면 MAC 주소 테이블에 저장하고 이후 같은 목적지를 요청하게 될 경우 주소 테이블을 참조하여 데이터를 전송할 수 있게 해준다. ARP Request를 할 땐 이후에 다룰 브로드캐스트를 통해 상대방 호스트가 응답하도록 한다.
arp -a※ 이 명령어는 Linux-Ubuntu에서 IP 주소와 MAC 주소를 같이 보여준다.
IP 주소는 이더넷 프로토콜로 작성된 패킷에 추가적으로 내용을 작성해주는데, 여기서 먼저 알아야 할 점은 Source Address, Destination Address, TOS(Type Of Service), TTL(Time To Live), Protocol 정도가 있다. Source, Destination Address는 각각 송신측 IP 주소와 수신측 IP주소이며 TOS는 라우터에서 패킷을 처리할 우선 순위를 정의한다. 우선 순위 내용으로 최소 지연(delay), 최대 처리율(MTU), 최대 신뢰성(reliability), 최소 비용(cost)를 설정할 수 있고, 기본 값은 0이다. 최소 지연은 말 그대로 전송 지연을 최소로 낮추고 최대 처리율(Maximum Transmission Unit)은 보낼 수 있는 데이터 사이즈를 의미하며, 최대 신뢰성은 오류를 최소화하고 통신의 신뢰성을 확대하기 위한 내용이며, 최소 비용은 다양한 라우팅 경로를 최소한의 비용으로 갈 수 있음을 의미한다. 이 내용은 QOS(Quality Of Service) 서비스와 연결되는데, 즉, 돈을 더 많이 내면 더 높은 우선 순위를 보장해주는 것과 귀결되며 우선 순위를 실현해 줄 수 있는 게 TOS 필드이다.
TTL은 라우팅 과정에서 라우터를 몇 개 이상 통과하면 패킷을 버릴지 입력되는 곳으로 라우터 하나를 지날 때마다 1씩 줄어들며, 0이 되면 해당 패킷은 버려진다. 이후에 다룰 ICMP 프로토콜과 관련이 있다. IP에서 프로토콜에 대한 내용은 ICMP, IGMP, TCP, UDP의 상위 계층 프로토콜을 의미하며 이후에 다룰 내용으로 전송 계층과도 관련있다.

※ Linux-Ubuntu에서 ifconfig(윈도우의 경우 ipconfig)를 입력하면 이더넷 주소(MAC 주소)와 IP 주소를 알 수 있다. 위 사진에서 inet이 IP 주소이고 ether 부분이 MAC 주소이다. 여기서 추가적으로 설명하고 싶은 부분은 RX, TX 부분이다. RX packets은 성공적으로 받은 패킷 양이고 TX packets의 경우 성공적으로 보낸 패킷 양이다. errors, dropped, overruns는 오류 정도, 버려진 패킷 양, 오버된 패킷 양을 의미한다. dropped의 경우 디도스(DDos)의 공격을 받으면 높아질 수 있다.
ifconfig 명령어에 대해 추가적으로 설명하면 up/down으로 네트워크 시작과 종료를 할 수 있고,
ifconfig hw ether 바꿀값MAC 주소를 바꿀 수 있다. ifconfig로 IP 주소도 바꿀 수 있는데 재부팅하면 다시 초기화된다. ip 명령어로 ifconfig(ip addr)와 같이 정보를 볼 수 있고 MAC, IP 주소도 변경할 수 있다.
본격적으로 IP 프로토콜의 주소 체계에 대해 알아보자면,

리눅스 및 네트워크 강의 교안 참조
크게 이 다섯 개의 클래스로 구분된다. 우선 IP 주소는 우리가 많이 봐서 익숙할 수 있는데, 이론적으로 설명하면 32비트 2진수로 8자리마다 점을 찍어 구분한다. 우리가 익숙한 형태로 공유기 설정할 때 보는 '192.168.0.1'로 구성된 것이 IP 주소이다. 위 사진에서 볼 수 있듯 각 클래스는 맨 앞부분부터 2진수 숫자로 어느 부분까지 네트워크 대역으로 지정하냐에 따라 나눠진다. Class D, E는 실사용할 수 없는 클래스로 보통 사설(개인) 네트워크 대역을 A, B, C클래스로 구현한다. 각 클래스마다 소속될 수 있는 장치의 네트워크 수가 달라지는데, A 클래스가 가장 크고 C 클래스가 가장 작다. 위에서 많이 볼 수 있는 '192.168.0.1' 또한, C 클래스로 이 클래스는 맨 앞 필드가 192부터 223까지 가능하다.

리눅스 및 네트워크 강의 교안 참조
이 개념에 따라 공유기에 연결한 장치는 클래스 별로 네트워크 필드가 같으며 호스트 부분만 달라진다. C 클래스의 경우 앞의 세 필드는 네트워크 대역이기 때문에 가정이든, 교육 기관이든 해당 장소에서 공유기로 연결된 모든 장치는 네트워크 대역이 같아 서로 작업한 결과를 자신이 할당받은 네트워크 주소로 업로드하면 다른 장치에서 공유할 수 있다. 하지만 마지막 필드인 호스트 주소에서 사용할 수 없는 값이 있는데 일반적으로 처음 번호(0)과 마지막 번호인 255이다. 0은 네트워크 대역을 식별해주기 때문이며, 255는 브로드 캐스트를 위한 네트워크 주소이기 때문이다. 브로드 캐스트는 이후에 다룰 내용이지만, 간단히 설명하자면 같은 네트워크 대역의 모두에게 패킷을 전송하는 일 대 다의 관계이다.
※ 추가적으로 서브넷 마스크(Subnet Mask)가 있다. 아래의 사진을 보면 netmask가 보이는데 이게 서브넷 마스크이다. 서브넷 마스크는 각 클래스 별로 할당된 네트워크 대역을 더 상세히 나눠 IP 주소를 더 많이 식별할 수 있게 도와주며, C 클래스의 경우 마지막 필드인 호스트 ID 2비트를 네트워크 ID로 나누면 '255.255.255.0'이 된다. 예를 들어, 서브넷 1은 192.168.1.1~192.168.1.254가 되고 서브넷 2는 192.168.2.1~192.168.2.254가 된다.

이렇게 서브넷 마스크를 통해 더 다양하게 주소를 나누는 이유는 IPv4(Internet Protocol version 4)와 IPv6(Internet Protocol version 6)를 알면 이해할 수 있는데 지금까지 설명한 기존의 주소 체계는 IPv4였다.
※ 사실 IPv5도 있었다. 지금은 사라졌다고 봐도 무방하지만, 이유는 찾아보면 재밌다.
기존의 IPv4는 약 43억의 IP 주소를 가질 수 있는데 처음엔 당연히 부족할 줄 몰랐다. 그러나 점차 네트워크의 발달로 일상 생활에서 흔히 볼 수 있는 스마트폰, 태블릿, 노트북, PC, 스마트 워치 부터 각종 건강 관련 장비, 기계 장비가 늘어남에 따라 IP 주소가 부족해졌다. 그래서 이를 해결하고자 IPv6가 나타났다. 두 버전은 각각 독립된 주소 체계로 IPv6는 128비트로 표현한다. 아직 두 주소 체계를 모두 사용하고 있다.
※ IP 프로토콜과 관련된 추가적으로 알아두면 좋을 프로토콜이 있다. DNS(Domain Name Service)가 있다. DNS는 응용 계층 프로토콜이지만, IP 주소와 관련이 깊은데, 우리가 알아보기 쉬운 도메인 이름 주소를 IP 주소로 변환해주기 때문이다. 여기서 도메인(Domain)은 식별자를 의미하는데, 도메인 이름 주소는 www.naver.com, www.google.com처럼 우리가 흔히 간단하게 주소창에 입력하여 네이버나 구글에 접속할 수 있게 해주는 주소를 말한다. 우리는 www.naver.com으로 알고 있지만, 실제로 com 뒤에 '.'이 붙는다. 이 '.'은 루트 도메인으로 도메인 이름 주소는 여기서부터 시작한다. 간혹 볼 수 있는 끝에 'kr'은 국가 도메인이다.

위에 사진을 보면 dig 명령어를 입력한 걸 볼 수 있는데, 이 명령어는 네임 서버에 설정된 정보를 가져온다. 여기서 네임 서버는 127.0.0.53인데, 네임 서버(Name Server)란? 도메인 이름 주소를 컴퓨터가 알아들을 수 있는 IP 주소로 알려주는 서버다. 우리가 들어가고 싶은 사이트의 도메인 이름 주소를 입력하면 네임 서버를 통해 그 사이트의 IP 주소를 찾고 그 과정은 실제로 많은 네임 서버를 거치며 이루어진다.

nslookup 도메인이름주소nslookup이란 명령어가 있는데 이 명령어는 도메인 이름 주소를 네임 서버에 요청해서 IP 주소를 알아보는 것이다.
www.naver.com 옆에 canonical이 보일텐데 이는 www.naver.com의 별명이라고 생각하면 된다.

리눅스 및 네트워크 강의 교안 참조
※ DNS 스푸핑(DNS Spoofing) 이란 네트워크 공격이 있는데 네임 서버를 악용한 방법으로 일반 사용자가 네임 서버에 IP 주소를 요청할 때, 공격자는 네임 서버의 응답을 변조하여 사용자에게 잘못된 IP 주소를 알려준다. 그래서 위조된 웹 사이트로 유도하여 사용자의 중요한 정보를 탈취할 때 사용될 수 있는 공격이다.
※ 특정 IP 주소의 목적지 라우팅 경로를 찾아가는 명령어가 있는데, 윈도우에선 'tracert', 리눅스에선 'traceroute'이다. 리눅스에선 'traceroute' 패키지를 설치해야 한다.
※ dig 명령어 외에 네임 서버를 조회하는 또 다른 방법은 /etc/resolv.conf 파일을 확인하는 것이다. 만약 여기 나와있는 네임 서버로 ping을 보냈는데, 정상적으로 작동하지 않는다면 구글 네임 서버인 8.8.8.8로 바꿔준다. 그래도 정상적으로 작동하지 않으면 인터넷 문제일 수 있다.

이 사진에서 보이는 nameserver부분을 바꿔주면 된다.
IP 프로토콜 다음으로 소개할 프로토콜은 ICMP(Internet Control Message Protocol)이다. 하지만, 지금까지 너무 많은 이야기를 해서 다음 게시글에서 이어가고자 한다...
후기
평일에 매일 업로드하다 최근 며칠간 업로드를 하지 않았습니다. 수업했던 내용이 어려웠기 때문도 있고, 이해하는 데 집중하고 싶었기 때문입니다. 사실 놓친 부분도 많아 다 못적었다고 생각하지만, 그래도 최대한 적으려고 노력해봤습니다. 그리고 실습을 제외한 이론 수업에 대한 2일 분량 내용을 한 번에 업로드 하게 되어 나눌까도 고민이 됐지만... 그냥 업로드 해서 양이 많습니다.🥲 너무 많아서 이어서 2탄을 작성하려고 하니 많이 기대해주세요.
Log in