[Network] 네트워크 대역폭의 측정과 OS와의 관계

2026. 3. 3. 17:37·개발일지/CS

대역폭 (Bandwidth)

대역폭이란

  일정 시간 동안 인터넷 연결을 통해 전송할 수 있는 데이터의 최대량을 의미합니다. 대역폭이 클수록 더 많은 데이터를 동시에 전송할 수 있게됩니다. 네트워크 대역폭은 일반적으로 초당 메가바이트 또는 기가바이트 단위로 측정됩니다. 대역폭이 크면 초당 송수신 가능한 데이터의 양이 증가하므로, 여러 대의 장치가 동시에 연결되더라도 인터넷 성능이 저하되지 않고 안정적으로 사용이 가능해집니다.

 

  가장 쉬운 비유로 고속도로의 차선을 생각해볼 수 있습니다. 대역폭은 차선의 개수에 대응돼서, 100Mbps 요금제에서 500Mbps 요금제로 바꾼다는 것은 차의 속도를 높이는 것이 아니라 차선 자체를 1차선에서 5차선으로 늘리는 것으로 생각할 수 있습니다.

대역폭의 유형

  • 다운로드 대역폭

  장치가 인터넷으로부터 1초당 수신할 수 있는 데이터의 양을 의미합니다. 스트리밍이나 웹서핑을 포함한 대부분의 온라인 활동에 영향을 미칩니다.

 

  • 업로드 대역폭

  장치가 인터넷으로 1초당 전송할 수 있는 데이터의 양을 의미합니다. 화상 회의, 파일 업로드, 온라인 게임 등에서 중요하게 작용합니다.

 

  대부분의 가정 환경에서는 업로드보다 다운로드를 많이 하기 때문에 다운로드 대역폭이 업로드 대역폭보다 높게 설정돼있습니다.

대역폭의 물리적인 특성

샤넌-하틀리 정리 (Shannon-Hartley Theorem)

  C: 채널 용량 (최대 전송 속도, bps)

  B: 대역폭 (Hz 단위)

  S / N: 신호 대 잡음비 (Signal-to-Noise Ratio)

 

  이 공식을 통해 알 수 있듯이, 채널 용량, 즉 인터넷 속도를 올리기 위해서는 물리적인 대역폭(B)을 넓히거나 신호의 강도를 높이고 노이즈를 줄여서 S/N (잡음비)를 개선해야 한다는 것을 확인할 수 있습니다. 공유기 근처에서 속도가 빠른 이유도 여기서 찾을 수 있습니다. 공유기와 가까울수록 노이즈가 적어지고 신호가 강해져서 최대 채널 용량(인터넷 속도)이 증가하기 때문입니다.

OS와 대역폭

  OS와 네트워크 스택의 관점에서 대역폭은 선의 굵기 정도가 아니라 데이터 패킷이 처리되는 버퍼와 윈도우의 상호작용입니다.

TCP Window Size

  데이터를 전송할 때, 커널은 송신자와 수신자 간의 상태를 파악하여 한 번에 보낼 수 있는 데이터의 양을 조절합니다. 이를 TCP Window Size라고 합니다. 

대역폭을 고려한 처리량과 TCP Window Size의 관계

  RTT(왕복 지연 시간)이 길어지면 자동차의 속도가 떨어지는 상황과 비슷합니다. 즉, 아무리 대역폭이 넓어도 실제 전송 속도는 떨어지게 됩니다.

 

TCP Window Scaling

  위에서 고대역폭일지라도 네트워크의 성능을 최대로 끌어내기 위해서는 TCP Window Size가 중요한 파라미터임을 확인했습니다. 그렇다면 이 Window Size를 컨트롤 하는 것이 네트워크 환경을 최대한으로, 또 효율적으로 사용하는데 중요할 것입니다.

 

  RFC 7323으로 TCP Window Scaling 옵션이 도입됐는데, 이는 TCP 연결을 처음 맺을 때 양측 커널이 서로의 비트 시프트 연산 (Shift Count) 값을 교환하여 기존 64KB였던 한계 Window size값을 최대 1GB까지 늘리는 기술입니다.

 

  현대 OS는 커널 레벨에서 이 Window Scaling을 자동으로 조절(Auto-Tuning)합니다. 하지만 일반적인 상황(웹 서핑)에 기준이 맞춰져 있기 때문에 극단적인 접속 부하가 생기면 송수신 버퍼 크기가 바닥이나서 에러가 발생할 수 있습니다. 이에 터미널에서 TCP 윈도우 사이즈와 소켓 제한을 튜닝할 수도 있습니다.

MTU (Maximum Transmission Unit)

  커널 네트워크 인터페이스 레벨에서 한 번에 보낼 수 있는 최대 패킷의 크기입니다. 이더넷의 기본 MTU는 보통 1500byte 입니다. 대역폭이 큰 네트워크 (N Gbps 망)에서는 이 MTU를 높여서 인터럽트 횟수를 줄여서, 즉 CPU 부하를 낮춰서 네트워크 효율을 극대화할 수 있습니다.

대역폭의 측정

단위

Kbps - 초당 킬로비트 (1,000 bit/s)
Mbps - 초당 메가비트 (1,000 Kbps)
Gbps - 초당 기가비트 (1,000 Mbps)

 

실제 측정

간단하게 지금 사용하고 있는 네트워크의 대역폭을 확인해볼 수 있는 사이트를 이용해서 대역폭을 측정해보겠습니다.

https://fast.com/ko/#

 

인터넷 속도 테스트

회원님의 다운로드 속도는 얼마나 될까요? FAST.com의 간편한 인터넷 속도 테스트로 몇 초 안에 ISP 속도를 알아볼 수 있습니다.

fast.com

 

일반적인 카페 와이파이 네트워크의 대역폭 (5G)

 

위와 같은 카페의 2G 와이파이 네트워크의 대역폭.

  위의 두 개의 fast.com의 결과를 통해서 동일한 카페 네트워크 환경에서 5GHz, 2.4GHz 와이파이 대역이 성능 면에서 어떤 차이를 보이는 지 확인해보겠습니다.

 

측정 항목 5GHz 2.4GHz 비교
다운로드 대역폭 770 Mbps 44 Mbps 5G가 약 17.5배 더 빠름
업로드 대역폭 420 Mbps 14 Mbps 5G가 30배 더 빠름
트래픽이 적을 때 지연 시간 8 ms 7 ms 거의 차이 없음
트래픽이 많을 때 지연 시간 146 ms 1400 ms 2G

 

  5G 대역이 2G 대역에 비해 훨씬 넓은 대역폭을 제공합니다. 5GHz 주파수 대역 자체가 한 번에 전송할 수 있는 데이터의 양(채널 용량)이 훨씬 크기 때문입니다. 고화질 영상을 보거나 대용량 파일을 다운로드해야 한다면 5G 대역이 훨씬 유리합니다.

 

  트래픽이 없는 상태에서 지연 시간은 두 개의 환경에서 거의 동일한데, 이는 기기에서 카페의 공유기까지 물리적인 거리가 거의 같고 방해 요소가 없을 때 전파가 도달하는 속도 자체가 비슷하게 양호하다는 것을 의미합니다.

 

  네트워크에 트래픽이 몰렸을 때는 5G는 146ms 수준으로 양호한 반면에 2G는 1.4s가 걸리는 지연이 발생했습니다. 이는 처리할 수 있는 대역폭은 좁은데 여러 기기가 동시에 데이터를 보내려고 하다보니 공유기의 버퍼(대기열)에 데이터가 꽉 차서 정체 현상이 발생한 것으로 예상할 수 있습니다. 이런 2G 환경의 1.2s 지연 시간에서는 실시간 게임이나 화상 회의는 불가능합니다.

 

  k6 등의 부하테스트 프로그램을 사용할 때 vus가 매우 중요합니다. 이때 대역폭을 통해서 간단하게 생성 가능한 virtual user 수를 계산해볼 수 있습니다.

최대 생성 가능한 가상 유저 수

 

  트래픽을 발생시키면 업로드 대역폭과 다운로드 대역폭을 모두 사용하게 됩니다.

  • 업로드 (420 Mbps): k6가 서버를 향해서 요청 데이터를 보낼 때 사용됩니다.
  • 다운로드 (770 Mbps): 서버가 처리한 응답 데이터를 k6로 보낼 때 사용됩니다.

  일반적인 텍스트 위주의 API를 테스트한다고 가정한다면 1회당 요청의 크기는 1KB, 응답 크기는 10KB로 생각해볼 수 있습니다. 이에 따라서 각각의 크기는 8Kbps, 80Kbps 그 속도를 생각할 수 있고, 업로드 기준 제한, 다운로드 기준 제한을 계산할 수 있습니다. 이를 위의 카페의 5G 네트워크에 적용해보면 아래와 같습니다.

 

  업로드 기준 제한: 420000 Kbps / 8 Kbps = 52,500 VUs

  다운로드 기준 제한: 770000 Kbps / 80 Kbps = 9,625 VUs

 

  최대 VUs는 두 개의 값의 최솟값이므로 약 9,600명의 Virtual user가 동시에 접속해서 데이터를 주고받는 상황을 k6와 같은 부하테스트기를 통해서 시뮬레이션을 한다면 네트워크 상으로는 문제없이 소화할 수 있다는 결론을 지을 수 있습니다.

 

 

  위의 시퀸스 다이어그램에서 표현된 흐름을 설명하면 아래와 같습니다.

  1. 사용자가 요청을 보냅니다.
    1. 요청을 보낼 때 시스템 콜이 호출되고, 이에 따라 데이터가 커널 영역으로 이동합니다. 커널은 네트워크 소켓 하나를 열 때마다 파일 디스크립터 하나를 생성합니다.
  2. 소켓 레이어에서 User 메모리를 Kernel의 메모리로 데이터를 복사합니다. 이 커널 메모리가 Send Buffer입니다. 이 요청들을 TCP/IP 스택에서 MTU, MSS 기준을 이용해서 분할하고 TCP Window를 확인하여 한번에 보낼 수 있는 데이터 양을 정합니다. 이 분할이 완료된 요청들을 IP 라우팅 후에 전송 대기 큐에 넣습니다. 
  3. DMA(Direct Memory Access)를 통해서 Ring Buffer로 넣어서 패킷 전송을 지시합니다.
  4. 전송이 네트워크 계층에서 이루어집니다. 이때 공유기 내부에 탑재된 RAM 공간인, 데이터를 무선 신호로 변환하여 보내기 전이나 서버로 넘기기 전에 패킷을 임시 큐인 AP 버퍼에 저장해놓습니다.
    1. 패킷 드랍을 막는 것이 중요하다고 생각한다면 버퍼의 크기를 크게 만들어서 처리를 계속 기다리게 할 수 있습니다. 또는 AQM(Active Queue Management)을 사용하면 fq_codel, Cake와 같은 큐 관리 알고리즘을 이용해서 트래픽이 과하게 큐에 머물면 의도적으로 드랍해서 TCP 송신 측에게 네트워크에 과한 부하가 일어났다고 알려줄 수 있습니다.
  5. 이를 서버가 적절한 비스니스 처리를 하고 유저는 가공된 데이터를 받게 됩니다. 같은 방법으로 응답을 받으면 커널에 패킷이 도착하고 체크섬 확인 및 TCP/IP 역캡슐화 등의 작업이 처리됩니다. 수신 소켓 버퍼에 데이터를 적재하면 소켓 레이어에서 해당 패킷을 받고, 유저가 응답을 확인할 수 있게 됩니다.

 

참고 문헌

https://kr.store.tapo.com/blogs/insight/network-bandwidth-definition

 

네트워크 대역폭의 개념과 대역폭 측정 방법

이 글에서는 네트워크 대역폭의 의미, 작동 방식, 일상적인 인터넷 사용에 미치는 영향에 대해 소개합니다. 더불어, 더욱 원활한 인터넷 환경 구성을 위해 여러분이 사용 중인 대역폭을 확인하

kr.store.tapo.com

 

반응형

'개발일지 > CS' 카테고리의 다른 글

[Design] 절차적인 설계와 객체지향 설계  (0) 2026.04.13
[Network] WebSocket과 STOMP  (0) 2026.03.30
[Util] Jackson의 특징과 POJO의 직/역직렬화 과정  (0) 2026.02.13
[Thread] Message Broker와 스레드 (feat. Kafka)  (0) 2026.01.19
[Thread] 자바의 스레드 관리 전략  (0) 2026.01.12
'개발일지/CS' 카테고리의 다른 글
  • [Design] 절차적인 설계와 객체지향 설계
  • [Network] WebSocket과 STOMP
  • [Util] Jackson의 특징과 POJO의 직/역직렬화 과정
  • [Thread] Message Broker와 스레드 (feat. Kafka)
soberyl
soberyl
개발과 청춘 일지
    반응형
  • soberyl
    soberyl 님의 블로그
    soberyl
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 프로젝트 N
        • Snap Trade N
        • 팀 프로젝트
        • 오픈 소스
      • 개발일지
        • 코딩 테스트
        • 알고리즘
        • CS
      • Full stack
      • Frontend
        • UXUI
        • React
        • Next.js
        • React Native
        • Monitor
      • Backend
        • NestJS
        • Spring
        • Monitor
        • DB
      • DevOps
        • CICD
      • Test
      • AI
      • Infra
        • AWS
        • On-premise
      • 청춘
        • 희곡
        • 연극
      • 잡설
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    io
    테스트
    백엔드
    thread
    연극
    설계
    거래소
    프론트엔드
    코테
    최적화
    DB
    EC2
    코딩테스트
    CPU
    OS
    희곡
    memory
    MySQL
    java
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
soberyl
[Network] 네트워크 대역폭의 측정과 OS와의 관계
상단으로

티스토리툴바