[컴퓨터 네트워크] #5 Introduction - 5

Posted by Neph's Blog on February 14, 2023

Delay and routes (실제 인터넷)

지금까지는 이론적인 인터넷의 지연과 라우팅을 살펴봤다면 이번에는 실제로 적용되고 있는 내용들을 살펴보겠습니다.

Traceroute

image-20230214205801547

트레이스 라우트는 하나의 패킷이 목적지에 도달하기까지 거쳐 지나간 중간 경유지와 경유지에서 경유지를 통과하는데 걸린 시간, 그리고 거쳐간 경유지의 순서를 알려주는 프로그램입니다.

트레이스 라우트는 대부분의 OS가 기본적으로 제공하는 프로그램이며, 유닉스 계열이라면 traceroute 명령어를 통해, 윈도우라면 tracert 명령어를 통해 실행할 수 있습니다.

이 프로그램이 어떻게 동작할지에 대해 유추하다보면 조금 의아한 생각이 들게되기 마련입니다. 내가 패킷을 중간 경유지에 보내는 것은 간단하지만, 중간 경유지들로부터 내용을 전달받을 방법이 없기 때문이죠.


이 프로그램의 원리에 대해 이해하려면 우선 IPv4의 헤더 중 하나인 time-to-live에 대해 알아야 합니다.

time-to-live는 정수값을 담은 헤더인데, 하나의 라우터를 거칠때마다 값이 1씩 감소되며 0에 도달하면 0에 도달한 시점부터는 더이상 다음 라우터로 보내지지 않습니다. 이름 그대로 이 패킷이 얼마나 오래 살아있을지를 hop(지나친 라우터의 개수)를 통해 알려주는 역할을 합니다.

중간 라우터가 송신자에게 정보를 전달하는 유일한 시나리오는 “너의 요청을 완료하지 못했다”라는 의미를 담은 에러메세지 뿐입니다. 이 에러메세지는 ICMP(Internet Control Message Protocol)라는 프로토콜을 준수하며 내용에는 자신의 주소가 포함되게 됩니다.

송신자는 이 에러메세지를 받기까지 걸리는 시간을 측정할 수 있으니, 해당 라우터까지의 전송시간은 에러 메세지가 돌아오기까지 걸린 총 시간의 절반이 됩니다.

이러한 방법(time-to-live를 1씩 증가시키며 목적지 라우터로 패킷 송신 요청을 보내는 방법)을 목적지 라우터에 도달할 때까지 계속해 반복하다보면 우리가 원하는 값을 모두 구할 수 있게 됩니다.

Packet Loss 복구

지난 글들을 통해 패킷 로스가 발생하는 원인은 라우터의 line card에 존재하는 buffer가 가득차면

새로 들어온 패킷을 폐기하기 때문이란 것을 알게되었습니다.


그렇다면 이 패킷 로스를 해결할 방법은 없을까요?

예상하셨겠지만 유일한 해결책은 “패킷 재전송” 뿐입니다.


그렇다면 누가 재전송을 해야할까요?

가장 이상적인 해결책은 직전 라우터가 로스가 일어난 패킷을 재전송 하는 것이지만,

라우터는 이미 전달한 정보에 대해 가지고 있지 않기 때문에 이 방법은 사용할 수 없습니다.

결국 첫 송신자가 다시 보내는 수밖에 없는 것이죠.


이런 재전송을 담당하는 프로토콜이 바로 TCP(Transmission Control Protocol)입니다.

TCP는 reliable byte stream transfer 서비스를 제공하며 보내는 데이터의 단위는 segment라고 합니다.

패킷과는 다른 용어이며 추후에 L4계층에 대해 다룰때 다시 등장할 개념입니다.

Throughput

처리율이라고도 불리는 쓰루풋은 단위 시간당 처리하는 비트의 비율을 나타냅니다.

쓰루풋은 일시적인 시점을 잡아 계산하는 instantaneous 쓰루풋과 평균 처리율을 나타내는 average 쓰루풋으로 구분할 수 있지만 대부분의 경우 평균 처리율을 사용합니다.

Bottle neck (병목현상)

image-20230214205818436

병에 담긴 물을 얼마나 빨리 내보낼 수 있는지는 물이 나가는 통로인 병 앞부분에 달려있습니다.

패킷의 전송도 마찬가지로 대역폭이 큰 link와 대역폭이 작은 link를 모두 지나가게 된다면, 쓰루풋에 영향을 주는 정도는 대역폭이 작은 link가 더 큽니다.

Network security

인터넷을 처음 만들때에는 보안에 대해 전혀 신경을 쓰지 않았습니다.

왜냐면 인터넷을 일반인이 사용하게 될 것이라고 전혀 생각하지 못했기 때문이죠.

인터넷을 사용하는 사람들은 서로 모두 아는 사이이고 친한 사이이니, 위조나 사기에 인터넷이 이용될 수 있을 것이라고는 상상도 하지 못했습니다.

이렇다보니 처음 프로토콜을 디자인 할때 보안적 요소가 전혀 들어가지 않았고, 시간이 흘러 지금의 인터넷이 구축되었습니다.

처음부터 구조를 새로 설계한다면 모를까 이미 널리 사용되고 있는 인터넷에 보안적 요소를 넣는건(기존의 동작은 모두 정상 작동하도록 유지한 채) 매우 어려운 일이기에 다양한 방법을 통해 보안에 신경을 쓰게 되었습니다.

Packet Sniffing

해커가 본인에게 전달될 패킷이 아닌데 몰래 훔쳐보는 것을 스니핑이라 합니다.

유선 매체를 통해 통신한다면 스니핑이 어렵겠지만 무선 환경에서는 스니핑이 더 쉽기 때문에 패킷을 보낼때 암호화를 하는 것은 필수적이 되었습니다.


이더넷 프레임이 어떤 목적지까지 가야하는지와 이더넷 목적지가 어떤 이더넷에 연결되어 있는지를 확인하기 위해 존재하는 프로토콜인 ARP(Address Resolution Protocol)는 promiscuous 모드에서만 동작할 수 있습니다.

promiscuous 모드에서 이더넷 프레임은 자신의 이더넷 영역에 도착하는 모든 이더넷 프레임을 모두 관찰하게 되는데, 이런 경우 굉장히 쉽게 스니핑하는 컴퓨터에 전달될 수 있습니다.

IP Spoofing

image-20230214212007138

Ip주소를 위조하는 것은 생각보다 쉬운 일입니다. 그림처럼 C라는 컴퓨터에서 발송한 정보임에도 src값에는 B가 들어있도록 하여 발신자를 숨기는 행위를 Ip 스푸핑이라고 합니다.

이러한 공격은 보통 DDOS(Distributed Denail Of Service) 공격시에 발신자를 숨기기 위해 사용됩니다.

DDOS 공격이란 공격자가 특정 타겟을 지정하여 bot들(좀비pc)끼리 이루어진 botnet을 통해 일제히 타겟(서버)으로 공격을 하는 것을 의미합니다.

방어의 여러 방법들

Authentication (인증)

인증은 가장 흔히 사용되는 방어수단입니다. 사용자의 identity를 입증해야만 접근을 허용하는 방법입니다.

SIM(Subscriber Identification Module)도 인증에 사용되는 하나의 수단인데

최근 이슈가 되고 있는 악용사례로는 Sim swapping이 있습니다.


심 스와핑은 말 그대로 새로운 심을 통해 ISP로 하여금 기존의 고객의 정보에 연결하도록 하는 행위를 뜻합니다.

이런 행위가 가능한 이유는 사용자가 휴대폰을 분실한 경우, 기존의 심카드도 없어졌으니 새로운 심을 발급받게 될 것이고,

이때 새로운 심에 기존 데이터를 연결시켜주어야 하기 때문에 이를 악용하는 것이 가능합니다.

거의 모든 사이트가 패스워드 인증에 sms 서비스를 이용하므로 더더욱 피해가 큰 해킹방법입니다.


Confidentiality (기밀성)

암호화를 통해 내용을 알지 못하게 만들어 보호하는 방법입니다.


Integrity Check (무결성 검사)

디지털 서명을 통해 데이터가 조작되었는지를 밝혀내는 기법입니다.


Access Restriction (접근 제한)

VPN(Virtual Private Network)을 통해 접근된 제한만을 허용하는 방법입니다.

인터넷의 인프라를 사용하지만 제한된 접근만을 허용해서 회사나 기관 내의 네트워크를 구축할 수 있습니다.


Firewall

방화벽은 들어오는 패킷을 필터링(통제)하는 기술입니다.

본 글에 사용된 자료는 https://gaia.cs.umass.edu/kurose_ross/ppt.php에서 무료로 제공하고 있습니다.