목차
1. 혼잡제어의 원리
2. TCP 혼잡제어
3. Cisco 설치
4. 리눅스 - 네트워크 설정
5. 다양한 네트워크 명령어
혼잡제어의 원리
혼잡: 높은 전송률로 데이터를 전송하려는 많은 근원지(송신자)로 인한 문제이다.
혼잡현상: 패킷의 손실, 지연의 증가.
다음과 같은 경우 데이터 전송량을 줄인다.
- 타임아웃이 빈번히 일어나는 경우
- 재전송량이 많아지는 경우
● 혼잡 시나리오 1
- 무한 버퍼를 가진 하나의 라우터이다.
- 재전송은 없다.

보내는 패킷량이 링크의 용량에 도달한 이후로는 패킷 전송량이 늘어도 받는 패킷량은 일정하다.
패킷의 처리량이 링크의 용량에 접근하게 되면 매우 큰 큐잉지연이 발생한다.
● 혼잡 시나리오 2
- 유한 버퍼를 가진 하나의 라우터이다.
- 재전송이 이루어진다.

패킷 손실이 발생하지 않는 경우 (a)
: 보내는 패킷만큼 처리가 진행된다.
손실된 패킷만 재전송하는 경우 (b)
: 패킷 재전송 시점부터 처리량이 줄어들기 시작한다.
(5메가를 전송해도 1메가가 재전송량이라면 실제로 받는 량은 4메가이다.)
패킷의 지연으로 인한 불필요한 재전송을 하는 경우 (c)
: 보내는 패킷에 비해 처리 효율이 급격히 떨어진다.
● 혼잡 시나리오 3
- 여러 개의 라우터와 다중 경로로 구성된 경우

패킷 전송량이 늘어감에 따라 패킷 처리량이 다시 줄어들게 되는데, 이때 위와 같은 중복 패킷이 발생한다.
혼잡으로 인해 패킷이 경로상에서 버려지면, 버려지는 지점까지 패킷을 전송하는데 사용된 라우터의 전송 용량은 쓸모없는 것이 되므로 여러 개의 라우터와 다중 경로로 구성될수록 더욱 손해가 크다.
윈도우 사이즈를 줄이면 오히려 이득을 볼 수도 있다는 점을 보여준다.
TCP 혼잡제어
패킷 송신률
: rate = 윈도우사이즈 / RTT
즉 혼잡제어는 송신자가 송신률을 조절하기 위해 윈도우사이즈를 조절하는 것이다.
손실이 발생한 경우
- 타임아웃 또는 3번의 ACK 중복
- 손실에 의한 재전송의 발생
위와 같이 손실이 발생하면 TCP 송신자는 윈도우 사이즈를 줄인다.
● 혼잡 제어 알고리즘
- AIMD
패킷 손실이 없다면 각 RTT마다 윈도우 사이즈를 1MSS씩 늘려나간다.
패킷 손실이 발생하면 윈도우 사이즈를 현재의 절반으로 줄인다. 이때 1MSS 밑으로 떨어지지는 않는다.
[그래프]
이러한 선형 증가를 혼잡 회피라고 한다.
- Slow start
패킷 손실이 없다면 ACK를 확인할 때마다 윈도우 사이즈를 1MSS씩 늘려나간다.
패킷 손실이 발생하면 윈도우 사이즈를 1MSS로 초기화한다.
[그래프]
TCP는 위의 두 알고리즘을 섞어서 다음과 같이 사용한다.
- 세 번의 중복 ACK를 수신한 경우
: 윈도우 사이즈를 반으로 줄인다.
: 윈도우 사이즈는 선형적으로 증가한다.
- 타임아웃이 발생한 경우
: 윈도우 사이즈를 1MSS로 줄인다.
: 윈도우 사이즈는 지수적으로 증가한다.
: threshold에 도달하면 다시 선형적으로 증가한다.(혼잡 회피에 들어간다.)
※ threshold: 윈도우 사이즈의 절반 값으로, 딱 떨어지지 않으면 버림하거나 올림하거나 설정자의 마음대로다.
즉, 윈도우사이즈가 20이었다가 1로 초기화되면 1 > 2 > 4 > 8 > 10까지 가서 선형 증가한다.
ex) 표로 나타낸 혼잡제어
| 3A | TO | 3A | TO | ||||||||||||||||
| RTT | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 
| W_size | 17 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 4 | 6 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 
Cisco 설치
https://www.netacad.com/resources/lab-downloads?courseLang=en-US
Resource Hub: Get Packet Tracer, Virtual Machines, and More
Your one-stop for learning resources used within our courses such as hands-on practice activities and our network simulation tool, Cisco Packet Tracer.
www.netacad.com
위의 사이트에서 윈도우 버전으로 패킷트레이서를 다운로드받을 수 있다.
다음과 같이 패킷트레이서를 이용해 네트워크를 가상으로 구현해볼 수 있다.

리눅스 - 네트워크 설정 (2025-04-24 수정)
● NIC (Network Interface Card)
유닉스 시스템들은 각 시스템마다 NIC를 지칭하는 디바이스 파일명이 고유하다.
리눅스의 경우 ens160, ens32, ens34(eth0, eth1)…등의 이름으로 명명한다.
네트워크 관련 명령어: net‐tools 패키지에 포함되어있다.
# dnf install –y net‐tools : net-tools 설치
- 디바이스 파일
/lib/modules/3.10.0‐1160.el7.x86_64/kernel/drivers/net/ethernet
위 경로에 리눅스에서 지원하는 모든 네트워크 디바이스 파일이 존재한다. 빨간 부분은 실행중인 커널 버전마다 다르다.
● IP - ifconfig
| ip | ifconfig | |
| 패키지 | iproute | net-tools | 
| 최신 배포판 지원 | 기본 설치 | 설치가 필요할 수 있음 | 
| 기능 | 네트워크 명령 대부분 통합 | 명령어 분산 | 
- NetworkManager : nmcli, nmtui
네트워크 확인
● 인터페이스 및 기본정보 확인
# ip a
: 'ip address show', 'ip add' 등으로 표현 가능하다.
# ip a show dev [NIC] : 특정 인터페이스를 확인한다.
# ip link show : 링크레이어 레벨에서 확인한다.
# ifconfig : 'ifconfig -a' 와 동일하다.
# ifconfig [NIC]
# nmcli dev show (dev = device)
# nmcli dev show [NIC]
# nmcli dev status : device, connection 명칭과 상태를 확인한다.
# nmcli connection show : 각 장치의 UUID와 명칭을 확인한다.
● 디폴트 게이트웨이 확인
# iproute show default : ip route 명령으로도 확인 가능하다.
# route -n (netstat–nr) : 라우팅 정보를 확인한다.
# nmcli dev show [NIC] | grep IP4.GATEWAY : 해당 인터페이스의 ipv4 주소의 게이트웨이를 확인한다.
● 로컬 DNS 확인
# cat /etc/resolv.conf
# nmcli dev show [NIC] | grep IP4.DNS
● TCP/IP 설정 파일
/etc/sysconfig/network-scripts/ifcfg-NIC명
: 네트워크설정: IP, 서브넷마스크, 게이트웨이 등이 있다.
: 반드시 암기한다.
: nmcli를 통해서도 이 안의 정보를 확인할 수 있다.
게이트웨이는 본래 추가 설정 파일 쪽에 있었으나 이 파일로 옮겨졌다.
네트워크 매니저의 통제 하에 열려있어 파일을 직접 수정할 경우 깨질 수 있으므로 직접 수정하지 않는다.
/etc/resolv.conf
: DNS Server가 있다.
위의 ifcfg-NIC명 파일에서 자동 생성되어 덮어씌워진 값이지만 DNS 서버를 확인할 때에는 이 파일을 확인한다.
참고)
host http://www.naver.com :네이버의 IP를 알려준다.
nslookup http://www.naver.com : 네이버의 IP를 알려주는데 누구에게 물어봤는지도 알려준다.
DNS서버에게 IP를 물어보는 것은 무슨 DNS서버에 물어보든 간에 상관없다.
/etc/hostname
: 호스트명을 알려준다.
- 추가 설정 파일
/etc/sysconfig/network
: 호스트명, 게이트웨이 값이 있었으나 지금은 비어있다.
: /etc/sysconfig/network-scripts/ifcfg-NIC명 파일에 찾는 값이 없을 경우 이 파일에서 찾아볼 수 있다.
TCP/IP 설정
● TCP/IP 설정 : nmtui
네트워크 매니저가 실행 중일 경우 nmtui를 이용한 네트워크 설정이 가능하다.



● 실습 환경 : NIC 추가

- vm에서 네트워크 어댑터를 추가한다.

- 새로운 인터페이스 ens224를 활성화한 것을 확인한다.
● NIC UP/DOWN
| NIC UP | NIC DOWN | |
| ip | # ip link set [NIC] up | # ip link set [NIC] down | 
| ifconfig | # ifconfig [NIC] up | # ifconfig [NIC] down | 
| nmcli | # nmcli dev connect [NIC]  # nmcli conn up [NIC]  | 
# nmcli dev disconnect [NIC]  # nmcli conn down [NIC]  | 
- # nmcli dev connect [NIC]의 NIC : device의 이름
- # nmcli conn up [NIC]의 NIC : connection의 이름
# ip link set ens224 down/up
# ifconfig ens224 down/up
# nmcli dev disconnect/connect ens224
# nmcli conn down/up ens224
# nmcli conn reload : 리로드는 설정사항을 갱신하지 않는다.
- dev disconnect/connect : device 연결 설정에 이용한다(일시적). IP 설정과 무관하다.
- conn down/up : 프로필 설정, 네트워크 설정 변경에 이용한다.
NIC : device와 connection
● NetworkManager
네트워크 매니저에서 NIC는 device가 connection이다.
- nmcli에서connection을이용하는경우가있다.
: # nmcli conn up/down
- OS 설치 후 추가된 NIC는 device와 connection이 다를 수 있다.
- Ubuntu, Kali : connection → name
● DEVICE와 CONNECTION 확인
# nmcli dev 혹은 # nmcli dev status
● CONNECTION 변경
직접 수정되지 않으며 반드시 복제 후 삭제한다.
# nmcli connection clone "old_conn" "new_conn"
# nmcli connection delete "old_conn"
IP 설정 변경: ip
● IP 변경
# ip addr change [ip/mask] dev [NIC]
# ip addr change 192.168.11.21/24 dev ens224
- change는 add와 동일하므로 기존 ip 삭제 작업이 필요할 수 있다.
● 게이트웨이 변경
# ip route change default via [gateway ip]
# ip route del default via 192.168.10.1
# ip route add default via 192.168.10.254
● 로컬 DNS 변경
/etc/resolv.conf 파일을 수정한다.
IP 설정 변경: ifconfig(net‐tools)
● IP 변경
추가는 alias를 이용한다.
# ifconfig [NIC] [ip] netmask [netmask]
# ifconfig ens224 192.168.11.21 netmask 255.255.255.0
● 게이트웨이 변경
# route del default gw [old gateway ip]
# route add default gw [new gateway ip] [gateway NIC]
# route del default gw 192.168.10.1
# route add default gw 192.168.10.254 ens160
● 로컬 DNS 변경
/etc/resolv.conf 파일을 수정한다.
IP 설정 변경: nmcli
● IP 변경
# nmcli con mod [NIC] ipv4.addresses [ip/mask]
# nmcli con up [NIC]
- con : connection, mod : modify
● 게이트웨이 변경
# nmcli con mod [NIC] ipv4.gateway [new gateway ip]
● 로컬 DNS 변경
# nmcli con mod [NIC] ipv4.dns "[DNS IP]"
● 설정 적용
# nmcli con up [NIC]
설정 적용 실패 시 다음과 같이 down 이후 up 한다.
# nmcli con down [NIC] && nmcli con up [NIC]
/etc/sysconfig/network-scripts/ifcfg-NIC명 경로에서 반드시 변경 내용을 확인한다.
● 네트워크 재시작
유닉스에서 파일을 수정한 이후에는 반드시 네트워크를 재시작해야 한다.
# nmcli conn down ens160 && nmcli conn up ens160
위의 명령어는 해당 NIC를 재시작하는 명령어로, 시스템을 껐다면 반드시 다시 켜게 되어있다.
네트워크 관련 설정을 건드리면 자칫하면 네트워크가 끊길 수 있다. 이때 원격으로 접속중이었다면 원격으로는 다시 네트워크를 켤 방법이 없으므로 위의 명령어를 통해 재시작한다.
&&는 and연산자로 앞의 명령어가 실행되면 뒤의 명령어도 실행한다. 앞의 명령어가 실행이 안되면 뒤의 명령어도 실행되지 않는다.
||는 or연산자로 앞의 명령어가 실행되면 뒤의 명령어를 실행하지 않는다. 앞의 명령어가 실행이 안되면 뒤의 명령어는 실행한다
- NM(Network Manager)이 활성화되어 있는 경우 설정은 반드시 NM을 이용한다.
# systemctl start NetworkManager.service // NM서비스 시작
가상머신 리눅스로 들어가 [프로그램] – [시스템 도구] –[설정] –[네트워크] 메뉴에서 설정할 수 있다.
ARP 커맨드
● ARP: ip command
| 전체 ARP 테이블 확인 | ip neigh show | ipn | 
| 특정 인터페이스의 ARP 테이블 확인 | ip neigh show dev [NIC] | 
| 특정 IP의 ARP 정보 확인 | ip neigh show [IP] | 
| ARP 엔트리 수동 추가 | ip neigh add [IP] lladdr [MAC] dev [NIC] | 
| 특정 ARP 엔트리 삭제 | ip neigh del [IP] dev [NIC] | 
| ARP 테이블 초기화 | ip neigh flush all | 
| 특정 인터페이스의 ARP 테이블 초기화 | ip neigh flush dev [NIC] | 
- lladdr : Link-Layer Address
- arp 엔트리 수동 추가로 arp 스푸핑을 막을 수 있으나 엔지니어가 아닌 일반인들이 일일이 설정하지 못하므로 정상적인 arp 스푸핑 방어 방법으로 소개하지는 않는다.
ex)
# ip neigh show 192.168.11.1
# ip neigh show dev ens224
# ip neigh add 192.168.11.200 lladdr 00:1c:2d:3e:4f:5g dev ens224
# ip neigh del 192.168.11.100 dev ens224
# ip neigh flush dev ens224
● ARP: arp command
| 전체 ARP 테이블 확인 | arp -a | 
| 특정 인터페이스의 ARP 테이블 확인 | arp -i [NIC] -a | 
| 특정 IP의 ARP 정보 확인 | arp -a | grep [IP] | 
| ARP 엔트리 수동 추가 | arp -s [IP] [MAC] | 
| 특정 ARP 엔트리 삭제 | arp -d [IP] | 
| ARP 테이블 초기화 | arp -d -a | 
| 특정 인터페이스의 ARP 테이블 초기화 | ip 명령 이용 | 
ex)
# arp -a | grep 192.168.11.11
# arp -i ens224 -a
# arp -s 192.168.11.200 00:1c:2d:3e:4f:5g
# arp -d 192.168.11.100
다양한 네트워크 명령어
● ping
특정 호스트까지의 연결과 대상 시스템의 작동 여부를 확인한다.
# ping [ip]
● ss (Socket Stats)
리눅스 커널의 netlink 인터페이스를 통해 네트워크 정보를 수집하며 TCP, UDP, Unix 소켓, RAW 소켓 등 확인이 가능하다.
netstat 명령을 사용할 수 없는 경우 사용한다. 주로 인터넷에 열려있는 포트를 확인하는 경우 사용한다.
| 옵션 | 의미 | 
| -t -u -l -n  | 
TCP 연결  UDP 연결 열려있는 포트 (Listening port) 포트/주소를 이름이 아닌 숫자로 표시  | 
- listen : 네트워크에 접속이 있는지 감시한다.
● fuser
리눅스에서 특정 포트를 사용 중인 네트워크 프로세스(PID)를 확인하는 명령어로, psmisc 패키지의 일부이다.
# dnf install -y psmisc
| 옵션 | 의미 | 
| -n namespace -k -v -u -i -a  | 
namespace 지정: TCP, UDP, FILE  해당 프로세스 kill 자세한 출력 사용자 이름도 출력 종료 전 확인 요청 리소스 모두 표시  | 
ex)
# fuser -n tcp 22
22/tcp:                713  1001
- 713 : sshd와 같이 22번 포트를 사용하는 프로세스의 PID
- 1001 : 22번 포트를 사용 중인 다른 프로세스의 PID (보통 사용자 세션이나 터널링 관련일 수 있다.)
● netstat [옵션]
시스템의 연결 상태, 포트, 인터페이스 등의 상태와 통계 정보를 확인해서 네트워크의 상태를 진단한다.
# netstat [옵션]
-i 옵션: 인터페이스 상태를 확인한다.
-s 옵션: IP, ICMP, TCP, UDP 에 대한 패킷 통계 정보를 확인한다.
-nr 옵션: 라우팅 테이블을 확인한다.
● arp
패킷을송수신한대상의MAC 주소를확인한다.
# arp [옵션]
-a 옵션: arp 목록 전체 출력
-s 옵션: arp 정적 등록
-d 옵션: arp 삭제, 추가 항목이 없으면 arp cache를 초기화한다.
# ip‐s neigh flush all : arp테이블을 초기화한다.
arp 명령어가 제한된 경우, netsh 명령을 이용한다.
초기화: netsh interface ip delete arpcache
삭제 : netsh interface ip delete neighbors "interface" ip
등록 : netsh interface ip add neighbors "interface" ip mac
● traceroute(tracert)
출발지 시스템에서 목적지 시스템까지의 데이터 전송 경로를 추적한다.
● route
라우팅 경로를 확인하거나 수정한다.
'일일 정리' 카테고리의 다른 글
| 스위치, STP, DNF, CRON, PHP 조건문 (if, switch) (5) | 2025.01.26 | 
|---|---|
| IOS, IOS - 라우터/스위치 접속, IOS - 설정 저장, IOS - IP 설정, RPM, DNF (7) | 2025.01.23 | 
| TCP의 신뢰적인 데이터 전송, 리눅스 - 자동 마운트 (2) | 2025.01.21 | 
| Selective repeat 프로토콜, TCP 프로토콜, TCP의 신뢰적인 데이터 전송, 리눅스 - 생성된 디스크 사용 과정 (0) | 2025.01.20 | 
| HTML/PHP 변수/데이터 타입, 연산자 (1) | 2025.01.19 |