Skip to content

Linux:Network

Linux 네트워크 관리에 대한 내용 정리.

Manually Network Setting

RHEL-based

RHEL에서 /etc/sysconfig/network-scripts/ifcfg-eth01 아래와 같이 편집한다. (IP=192.168.152.231, GateWay=192.168.152.2, DNS=192.168.152.2, MAC=00:21:5e:30:10:9e 로 가정한다)

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:21:5e:30:10:9e
NM_CONTROLLED=no
NETMASK=255.255.255.0
GATEWAY=192.168.152.2
DNS1=192.168.152.2
IPADDR=192.168.152.231
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
  • 만약 bonding 설정이 되었다면 /etc/sysconfig/network-scripts/ifcfg-bond0파일을 수정해야 한다. (역시, bond뒤의 숫자는 시스템마다 다를수 있다)

이후 service network restart를 사용하여 네트워크를 재시작 한다.

Debian-based

Debian:NetworkConfiguration 항목 참조.

How to check the ethernet port ENABLE/DISABLE

$ cat /sys/class/net/eth0/carrier
## 0이면 Disable, 1이면 Enable

리눅스 네트워크 성능 파라미터

  • 리눅스 네트워크 성능 파라미터 | GeekNews
  • 본 기사는 Linux 네트워크 성능 파라미터에 대한 종합적인 가이드를 제공하며, sysctl/네트워크 파라미터와 그들이 Linux 네트워크 흐름에서 역할에 초점을 맞춥니다.
  • 사람들이 종종 높은 처리량과 낮은 지연 시간을 제공하는 sysctl 값에 대해 탐색하지만, 이는 비현실적이라는 점을 강조합니다. 새로운 커널 버전들은 기본적으로 잘 조정되어 있으며, 기본값을 변경하면 성능이 저하될 수 있습니다.
  • 본 기사는 Linux 네트워크 흐름에 대한 자세한 설명을 제공하며, 인그레스(들어오는 데이터)와 이그레스(나가는 데이터) 프로세스를 모두 다룹니다.
  • 'perf'라는 Linux 성능 분석 도구를 사용하여 네트워크 성능을 확인하는 방법에 대한 단계별 가이드를 제공합니다.
  • 본 기사는 Ring Buffer(rx, tx), Interrupt Coalescence(IC), Ingress QDisc, Egress QDisc, TCP Read and Write Buffers/Queues 등 다양한 네트워크 및 sysctl 파라미터를 설명하고, 이들이 네트워크 성능에서의 중요성을 설명합니다.
  • 이러한 파라미터를 확인, 변경, 모니터링하는 명령어를 제공하여 Linux 사용자들에게 실질적인 가이드를 제공합니다.
  • 본 기사는 또한 TCP FSM(유한 상태 기계) 및 혼잡 알고리즘을 언급하며, 이러한 측면을 모니터링하는 명령어를 제공합니다.
  • iperf3, vegeta, netdata 등의 네트워크 도구를 테스트하고 모니터링하는 도구 목록으로 마무리하며, 추가적인 학습을 위한 참고 자료의 종합적인 목록을 제공합니다.
  • 본 기사는 Linux 네트워크 성능을 이해하고 최적화하려는 모든 사람에게 가치 있는 자료입니다.

리눅스에서 네트워크가 느려질 경우

Linux에서 서버가 대량의 데이터를 전송하는 과정에서 네트워크가 느려지는 원인은 여러 가지가 있을 수 있습니다. 다음은 주요 원인과 그에 대한 설명입니다:

TCP Congestion Control (혼잡 제어)

  • 원인: 네트워크 혼잡 상황에서 TCP 혼잡 제어 알고리즘이 전송 속도를 줄이기 때문에 느려질 수 있습니다.
  • 확인 방법: 현재 사용 중인 혼잡 제어 알고리즘 확인
sysctl net.ipv4.tcp_congestion_control
  • 해결 방안: 환경에 맞는 혼잡 제어 알고리즘 (e.g., cubic, bbr)을 선택
sysctl -w net.ipv4.tcp_congestion_control=bbr

NIC (Network Interface Card) Buffer Overflow

  • 원인: 네트워크 인터페이스 카드(NIC)의 송신 버퍼가 가득 차면서 데이터 전송이 지연될 수 있습니다.
  • 확인 방법: ethtool이나 ifconfig를 사용해 NIC 상태를 확인
ethtool -S eth0 | grep -i drop
  • 해결 방안: NIC 드라이버 최적화 또는 고성능 NIC로 업그레이드

Socket Send Buffer 크기 제한

  • 원인: 애플리케이션의 소켓 송신 버퍼 크기가 작아 대량의 데이터를 처리하지 못하고 전송 지연이 발생
  • 확인 방법: 현재 송신 버퍼 크기 확인
sysctl net.core.wmem_max
sysctl net.core.rmem_max
  • 해결 방안: 소켓 버퍼 크기를 늘림
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.rmem_max=16777216

Interrupt 및 CPU Bottleneck

  • 원인: 대량의 패킷 처리가 NIC의 하드웨어 인터럽트를 통해 CPU 부하를 증가시킴
  • 확인 방법: top, htop, 또는 sar를 사용해 CPU 사용률 확인
  • 해결 방안:
    • RSS (Receive Side Scaling) 활성화로 멀티코어 활용
    • IRQ Affinity 조정
echo 1 > /proc/irq/XX/smp_affinity

네트워크 MTU (Maximum Transmission Unit)

  • 원인: MTU 값이 너무 작거나 클 경우, 패킷 분할(fragmentation) 또는 재조립 과정에서 성능 저하 발생
  • 확인 방법: 현재 MTU 확인
ifconfig eth0 | grep -i mtu
  • 해결 방안: MTU 크기 조정 (일반적으로 1500 또는 네트워크 환경에 따라 조정)
ifconfig eth0 mtu 1500

커널 네트워크 큐 관리

  • 원인: 커널의 netdev_max_backlog 값이 낮아 대량의 데이터가 전송 대기열에서 드롭됨
  • 확인 방법: 현재 대기열 크기 확인
sysctl net.core.netdev_max_backlog
  • 해결 방안: 대기열 크기 증가
sysctl -w net.core.netdev_max_backlog=5000

Disk I/O 병목 현상

  • 원인: 데이터 소스가 디스크에서 읽히는 경우, 디스크 I/O가 느려 네트워크 전송 속도가 영향을 받음
  • 확인 방법: iostat 또는 iotop으로 I/O 성능 확인
  • 해결 방안: SSD로 업그레이드하거나 I/O 캐싱을 활성화

네트워크 경로 및 QoS (Quality of Service)

  • 원인: 서버와 클라이언트 간의 네트워크 경로에서 병목 현상 발생
  • 확인 방법: pingtraceroute로 경로 상태 확인. 또는 SNMP같은 네트워크 모니터링 프로토콜 지원하는 장비는 Nagios 같은 소프트웨어로 모니터링.
  • 해결 방안: 네트워크 장비 QoS 설정 또는 데이터 트래픽 분산

커널 옵션 최적화 필요

  • 원인: 대량 전송 시 기본 TCP 세팅이 비효율적일 수 있음
  • 해결 방안: 다음 커널 파라미터 조정
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_moderate_rcvbuf=1
sysctl -w net.core.optmem_max=25165824

Bridge

Tools

  • 패킷 스니퍼(Burp Suite, Zap Proxy, Wireshark), Recon, OSINT, 포트스캐너

See also

Favorite site

References


  1. eht뒤의 숫자는 시스템마다 다를수 있다. 

  2. Linux-network-performance-parameters_README.md.pdf