Skip to content

Linux:Network

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

Categories

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 네트워크 성능을 이해하고 최적화하려는 모든 사람에게 가치 있는 자료입니다.

무선 연결 (Wifi) 가능한 두 PC 간 통신 방법

라우터가 없을 때 Wifi 만으로 두 PC 간 통신 방법에 대하여 정리한다. Ubuntu 22.04 를 기준으로 설명한다.

Hotspot 방식 (가장 안정적)

WARNING

Wi-Fi 핫스팟은 다른 사람들이 연결할 수 있는 Wi-Fi 네트워크를 생성하여 인터넷 연결을 공유할 수 있도록 해줍니다. 이를 위해서는 Wi-Fi 이외의 다른 경로를 통해 인터넷에 연결되어 있어야 합니다. 핫스팟을 켜면 해당 Interface 연결이 끊어지고 Wi-Fi를 통한 인터넷 접속이 불가능해집니다.

nmcli 또는 nmtui 를 사용한다.

A 노트북에서 Hotspot 생성

# NetworkManager 설치 확인
nmcli --version

# Hotspot 생성 (GUI 방식)
nmtui

# 또는 CLI 방식
nmcli device wifi hotspot ifname wlan0 ssid "MyHotspot" password "mypassword123"

B 노트북에서 연결

nmcli device wifi connect "MyHotspot" password "mypassword123"

# 연결 확인
nmcli device show
ip addr show

통신 시작

# A의 IP 확인
hostname -I

# B에서 A로 통신
ping A_IP_ADDRESS
ssh username@A_IP_ADDRESS

WiFi Direct (P2P 모드)

iw, wpasupplicant 사용. 드라이버 지원 확인:

# WiFi Direct 지원 확인
iw list | grep -A 5 "P2P"

# wpa_supplicant 설치
sudo apt install wpasupplicant

A 노트북 - Group Owner (GO)

# P2P 인터페이스 생성
sudo ip link add p2p-wlan0 type bridge
sudo wpa_cli -i wlan0 p2p_group_add freq=2412

# 또는 더 간단하게
sudo systemctl start wpa_supplicant

# wpa_cli 대화형 모드
sudo wpa_cli -i wlan0
> p2p_listen
> p2p_group_add

Ad-hoc 모드 (간단한 P2P)

A 노트북

# Ad-hoc 네트워크 생성
sudo nmcli con add type wifi ifname wlan0 mode adhoc con-name adhoc ssid "adhoc-net"

sudo nmcli con modify adhoc wifi.channel 6
sudo nmcli con modify adhoc ipv4.method manual ipv4.addresses 192.168.100.1/24
sudo nmcli con up adhoc

# 확인
ifconfig wlan0

B 노트북

# 같은 Ad-hoc 네트워크에 연결
sudo nmcli con add type wifi ifname wlan0 mode adhoc con-name adhoc-join ssid "adhoc-net"

sudo nmcli con modify adhoc-join ipv4.method manual ipv4.addresses 192.168.100.2/24
sudo nmcli con up adhoc-join

# 확인
ping 192.168.100.1

Bluetooth (대안)

# Bluetooth 페어링
bluetoothctl
> power on
> discoverable on
> agent on
> default-agent

# 다른 노트북에서 검색 및 페어링
# 그 후 serial 통신 가능

실제 사용 예시 (Hotspot 추천)

A 노트북 (서버)

# Hotspot 시작
nmcli device wifi hotspot ifname wlan0 ssid "WorkNet" password "Pass123456"

# IP 확인
hostname -I
# 예: 10.42.0.1

# Python 서버 실행
python3 -m http.server 8000

B 노트북 (클라이언트)

# Hotspot에 연결
nmcli device wifi connect "WorkNet" password "Pass123456"

# A의 IP로 통신
curl http://10.42.0.1:8000
ssh user@10.42.0.1

각 방식 비교

방식

설정 난이도

안정성

속도

호환성

Hotspot

⭐ 낮음

⭐⭐⭐ 높음

⭐⭐⭐

⭐⭐⭐⭐⭐

WiFi Direct

⭐⭐⭐ 높음

⭐⭐⭐

⭐⭐⭐

⭐⭐⭐

Ad-hoc

⭐⭐ 중간

⭐⭐ 중간

⭐⭐

⭐⭐

Bluetooth

⭐⭐ 중간

⭐⭐

⭐ 낮음

⭐⭐⭐

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

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