본격적으로 네트워크의 계층 구조 및 기기와 HTTP 등등 다양한 네트워크 지식들을 알기 이전에, 알아두어야 할 네트워크 기본 지식들이 있는데요, 오늘은 해당 개념들을 본격적으로 공부하기 전에 천천히 기본 개념들을 알아보았던 내용들을 정리하고 포스팅 하는 시간을 가지려고 합니다.

노드와 링크란?
우선적으로 노드와 링크를 알아두어야 하는데요, 노드는 네트워크 상의 장치, 즉 컴퓨터, 서버, 라우터, 스위치 등을 의미합니다. 링크는 이러한 노드 간의 연결을 말하며, 데이터가 이동하는 경로를 제공합니다. 링크는 물리적인 케이블이 될 수도 있고, 무선 신호일 수도 있습니다.

처리량과 지연시간
개발자로서 네트워크를 구축할 때, 높은 처리량을 유지하고 지연 시간을 최소화하며 장애를 방지하는 것이 매우 중요합니다. 이를 위해서는 처리량과 지연 시간의 개념을 이해해야 합니다.
처리량은 네트워크 링크 내에서 얼마나 많은 데이터가 성공적으로 전달되었는지를 나타내는 개념입니다. 과거에는 bps(비트 퍼 세컨드)가 주로 사용되었으나, 기술 발전으로 인해 현재는 KBps, MBps, GBps와 같은 단위로 처리량이 측정됩니다. 처리량은 에러, 네트워크 혼잡, 하드웨어 스펙 등에 의해 영향을 받습니다.
지연 시간은 메시지가 두 장치 사이를 오가는 데 걸리는 시간을 의미합니다. 즉, 데이터가 송신지에서 수신지로 전달되는 데 걸리는 시간을 나타냅니다. 지연 시간이 낮을수록 네트워크 통신 속도가 빠르다는 의미입니다.
대역폭은 네트워크가 단위 시간 내에 전달할 수 있는 최대 데이터 양을 의미합니다. 대역폭이 클수록 더 많은 데이터를 네트워크에서 처리할 수 있지만, 대역폭 자체가 전송 속도를 의미하는 것은 아닙니다. 대역폭은 용량과 관련이 있으며, bps, Mbps, Gbps 등의 단위로 나타납니다.
끝으로, 트래픽은 네트워크에 흐르는 데이터 양을 의미하고, 처리량은 실제로 처리된 데이터 양을 나타냅니다.
처리량과 대역폭의 상호 관계
처리량과 대역폭은 흔히 혼동될 수 있지만, 둘은 서로 다른 개념입니다. 대역폭은 네트워크가 최대한 전달할 수 있는 데이터 용량을 의미하는 반면, 처리량은 실제로 그 대역폭 내에서 성공적으로 처리된 데이터 양을 나타냅니다.
예를 들어, 대역폭이 높더라도, 네트워크에서 장애나 병목 현상이 발생한다면 처리량은 낮아질 수 있습니다. 따라서, 네트워크 성능을 최적화하기 위해서는 대역폭을 최대한 활용하면서도 병목 현상을 피하는 것이 중요합니다.
위의 그림에서 보이는 것처럼 대역폭은 일정하게 유지되지만, 처리량은 네트워크 상황에 따라 변동할 수 있습니다. 이때 병목 현상이 발생하면 처리량은 대역폭 이하로 떨어지며, 네트워크의 효율이 감소하게 됩니다. 이를 해결하기 위해서는 하드웨어 업그레이드, 최적화된 네트워크 구성, 또는 데이터 흐름을 관리하는 효율적인 알고리즘이 필요합니다
네트워크 토폴로지
네트워크 토폴로지는 네트워크 노드 간의 물리적, 논리적 구조를 의미하며, 간단하게는 컴퓨터 네트워크의 구조와 구성 방식을 의미하는 것이라고 보시면 됩니다. 네트워크에 연결된 장치들이 어떻게 배치되고 상호작용하는지를 나타내며, 또 어떻게 상호작용 하는 지에 따라서 다양한 형태로 구분될 수 있습니다
이제 네트워크 토폴로지의 각 종류에 대해서 알아보겠습니다.
네트워크 토폴리지의 종류와 특징
- 버스 토폴로지

버스 토폴로지: 모든 장치가 하나의 중앙 케이블에 연결이 되며, 설치가 간단하고 근거리 통신망(LAN) 에서 사용이 됩니다. 중앙 통신 회선이기에 노드를 추가하거나 삭제하기는 쉽지만 만일, 케이블에 문제가 생길 경우 전체 네트워크가 마비가 될 수 있고 스푸핑 부분에 관하여 문제점이 있습니다
스푸핑이란?
스푸핑은 공격자가 송신자나 수신자를 속여 가짜 정보를 전송하는 공격 방식입니다. 조금 더 자세히 말하자면, 스위칭 기능을 마비시키거나 혹은 속여서, 특정 노드에 해당 패킷이 오도록 처리하는 것인데요, 특히 버스 토폴로지는 네트워크 상의 모든 노드가 동일한 케이블을 공유하기 때문에 공격자가 네트워크 상의 트래픽을 쉽게 감청할 수 있어 보안에 취약합니다.
- 트리 토폴로지

계층형 토폴로지라고 하며, 트리 형태로 배치한 네트워크 구성도를 지칭합니다, 노드의 추가와 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때, 하위 노드에 영향을 끼칠 수가 있습니다.
- 스타 토폴로지

스타 토폴로지는 중앙에 있는 노드에 모두 연결된 네트워크 구성을 말합니다, 장점으로는 노드를 추가하거나 에러를 탐지하기 쉬우며 패킷의 충돌 발생 가능성은, 현재 그림을 보시면 아시겠지만 모두 하나에 집중되어 있기에 낮습니다.
그리고 만일 중앙 노드가 아닌 외부 노드가 장애가 발생하여도 위의 버스 토폴리지나, 트리 토폴리지와는 다르게 다른 노드에 끼치는 영향도가 적습니다. 하지만 만일 중앙 노드에 장애가 생긴다면 전체 네트워크를 사용할 수 없게되기에 치명적이죠
- 링형 토폴로지

각각의 노드가 양 옆의 두 노드와 연결하여 전체적적으로 고리처럼 하나의 연속된 길을 통해 통신을 하는 망 구성 방식을 링형 토폴로지라고 칭합니다. 데이터는 노드에서 노드로 이동하고 각 노드는 고리 모양의 길을 따라서 패킷을 처리하게 되죠.
해당 토폴로지는 만일 노드 수가 증가가 되어도 네트워크 손실이 거의 없으며 둥근 형태이기에 충돌 발생 가능성 또한 많이 낮습니다, 하지만 링형 구조에서 회선에 장애가 발생하면 전체 네트워크에 끼치는 영향도가 크며 네트워크 구성 변경 또한 어렵습니다.
- 메시 토폴로지

메쉬 토폴로지는 망형 토폴로지라고도 하며, 그물망처럼 연결되어 있는 구조입니다. 각 장치가 서로 연결이 되어 있기에 해당 구조는 가장 신뢰성이 높지만, 설치와 유지 관리가 꽤나 복잡하다는 것이 큰 단점이죠
사실 이러한 네트워크 구조 즉 토폴로지가 중요하다고 할 수 있는 이유는 병목 현상을 찾을 때의 기준으로써 작용되기 때문입니다.
여기서 병목 현상이란, 특정 구간에서 트래픽이 몰리거나 과부하가 걸려 전체 성능이 저하되는 상태를 말하는데, 예를 들면 네트워크에서 특정 라우터나 스위치가 많은 데이터를 처리하지 못하면 병목 현상이 발생할 수 있습니다.
하지만 토폴로지의 형태를 확인하고, 해당 토폴리지의 형태를 변환하거나, 혹은 회선을 추가하는 등의 방법으로 병목 현상을 해결할 수 있습니다, 즉 어떠한 토폴리지의 형태를 갖고 있으며 어떠한 경로를 이루어져 있는지를 알아야 병목 현상을 잘 해쳐나갈 수 있으며 토폴리지는 이러한 방법의 기준점이라는 것이죠.
네트워크 성능 분석 명령어
개발을 진행하다보면, 코드 상으로는 문제가 없어도 사용자가 서비스를 이용하는 데 있어서, 데이터를 제대로 가져오지 못하는 상황이 발생할 수 있으며 이는 위에서 알아본 병목 현상일 수도 있죠
이러한 경우에는, 네트워크로부터 발생한 문제점이냐를 먼저 파악한 뒤에 성능 분석으로 잇따라야 합니다. 이러한 상황속에서 네트워크 성능을 분석하고 문제를 진단할 때 사용하는 명령어들은 네트워크 상태를 모니터링하거나 연결 상태를 확인하는 데 매우 유용합니다. 여기서는 ping, netstat, nslookup, tracert 명령어들을 알아보겠습니다.
1 - Ping : 네트워크 연결 상태 확인 및 지연 시간 측정
Ping 명령어는 특정 네트워크 장치와의 연결 상태를 확인하고, 해당 장치와의 통신 지연 시간을 측정할 때 사용합니다 Ping 명령어는 ICMP 패킷을 사용하여 대상에게 "핑!" 하고 신호를 보내면 대상이 응답을 하게되는 데, 이 일련의 과정 즉 왕복 시간을 측정하는 것입니다.
핑 명령어는 특정 서버가 응답하는 지 확인하거나, 네트워크 지연 시간을 측정하여 장애 여부를 진단할 때 쓰이게 되지만 만일 ICMP 패킷을 지원하지 않는 기기 혹은 ICMP를 네트워크 정책상 차단하는 경우에는 해당 테스트는 불가하게 됩니다
1) 핑 명령어 입력
ping google.com -n 12
구글 서버와의 연결 상태를 확인해보는 것으로 예시로 들겠습니다, 여기서 -n 12는 일정량의 패킷을 12번 날린다는 겁니다
2) 명령어에 대한 응답
Pinging google.com [142.250.196.142] with 32 bytes of data:
Reply from 142.250.196.142: bytes=32 time=158ms TTL=53
Reply from 142.250.196.142: bytes=32 time=126ms TTL=53
Reply from 142.250.196.142: bytes=32 time=139ms TTL=53
Reply from 142.250.196.142: bytes=32 time=111ms TTL=53
Reply from 142.250.196.142: bytes=32 time=104ms TTL=53
Reply from 142.250.196.142: bytes=32 time=135ms TTL=53
Reply from 142.250.196.142: bytes=32 time=141ms TTL=53
Reply from 142.250.196.142: bytes=32 time=120ms TTL=53
Reply from 142.250.196.142: bytes=32 time=134ms TTL=53
Reply from 142.250.196.142: bytes=32 time=133ms TTL=53
Reply from 142.250.196.142: bytes=32 time=108ms TTL=53
Reply from 142.250.196.142: bytes=32 time=124ms TTL=53
Ping statistics for 142.250.196.142:
Packets: Sent = 12, Received = 12, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 104ms, Maximum = 158ms, Average = 127ms
해당 응답 출력문을 보고, time 값이 지나치게 크거나, 응답이 있는 지, 없는 지 등을 알아볼 수 있습니다
2 - netstat: 네트워크 연결 상태 및 통계 확인
netstat 명령어는 접속되어 있는 서비스들의 네트워크 상태를 표시하는 데 사용이 되며, 주로 서비스의 포트가 열려있는지 확인할 때 사용이 됩니다
1) netstat 명령어 입력
netstat
2) 명령어에 대한 응답
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 192.168.0.10:5000 192.168.0.11:58913 ESTABLISHED
3 - nslookup: DNS 서버 질의
nslookUp은 도메인 이름을 IP 주소로 변환하거나 혹은 IP 주소를 도메인 이름으로 변환할 수 있게 하는 DNS 질의 도구라고 보시면 되는데, 이를 통해 특정 도메인이 정확히 어떤 IP 주소를 가리키는지 확인하거나 해당 서버가 사용하는 DNS 서버를 확인할 수 있게 됩니다
1) nslookup 명령어 입력
nslookup google.com
2) 명령어에 대한 응답
Non-authoritative answer:
Name: google.com
Addresses: 2404:6800:4004:80a::200e
142.250.196.142
사이트가 정상적으로 운영되고 있는지, DNS 설정이 제대로 되어 있는지를 확인할 때 유용합니다. 예를 들어, 특정 도메인에 연결할 수 없을 때, 해당 도메인의 DNS 서버를 확인하고 문제가 발생하는 부분을 추적하기에 용이하겠죠?
4 - tracert: 목적지까지의 경로 추적
tracert 명령어는 특정 목적지까지 가는 경로를 추적하고, 중간에 거치는 모든 라우터를 확인할 수 있는 도구입니다. 이 명령어는 네트워크 경로 상의 지연 시간이나 병목 현상을 찾아내는 데 유용합니다.
즉, 목적지 서버로의 연결 경로를 확인하여 중간에 네트워크가 지연되는 구간이나 라우터를 분석할 때 사용하고 특히 네트워크 성능이 저하된 경우, 어느 구간에서 지연이 발생하는지 추적할 수 있기에 유용하죠
참고로 리눅스 환경에서는 tracert 가 아니라, traceroute 입니다
1) tracert 명령어 입력
tracert google.com
2) 명령어에 대한 응답
Tracing route to google.com [142.250.206.110]
over a maximum of 30 hops:
1 1 ms 1 ms 1 ms 192.168.0.1
2 15 ms 14 ms 13 ms 10.1.1.1
3 22 ms 21 ms 22 ms 172.217.14.78
4 30 ms 29 ms 29 ms 142.250.206.110
마무리
네트워크 명령어들은 복잡한 네트워크 문제를 진단하고 성능을 분석하는 데 있어 매우 강력한 도구입니다. ping, netstat, nslookup, tracert와 같은 명령어들을 잘 활용하면 네트워크의 상태를 신속하게 파악하고 문제를 해결할 수 있습니다
알아두면 좋은 기본 개념들이기에 꼭 숙지하죠 👍
'CS' 카테고리의 다른 글
| TCP/IP 4계층 모델 (1) | 2024.10.07 |
|---|---|
| 도커란 무엇일까? (4) | 2024.09.26 |
| Redis는 싱글 스레드인데 동시성 관리가 필요할까? (1) | 2024.09.17 |
| 객체 지향 설계를 위한 디자인 패턴 정리 (프록시 패턴, 이터레이터 패턴) (0) | 2024.09.15 |
| 객체 지향 설계를 위한 디자인 패턴 정리 (전략 패턴, 옵저버 패턴) (5) | 2024.09.14 |