LAN: 같은 지역의 장치를 연결하는 근거리 네트워크
근거리 통신망(LAN)은 집, 사무실, 데이터센터처럼 제한된 공간의 장치를 연결하는 네트워크다. 이더넷(Ethernet) 스위치는 매체 접근 제어 주소(MAC address)를 기준으로 프레임을 전달하고, 인터넷 프로토콜(IP) 서브넷 밖의 통신은 라우터(router)가 처리한다. LAN 구조를 이해하면 같은 서버에는 접속되지만 다른 네트워크에서는 실패하는
By 송민성
1. 개념
근거리 통신망(Local Area Network, LAN)은 비교적 제한된 물리적 영역 안에서 컴퓨터, 서버, 스마트폰, 프린터 같은 장치를 연결하는 네트워크다.
유선 LAN은 주로 이더넷(Ethernet), 무선 LAN은 와이파이(Wi-Fi)를 사용한다. 두 방식 모두 장치를 하나의 IP 서브넷(subnet)에 구성할 수 있지만, 실제 매체 접근 방식과 프레임 형식은 다르다.
LAN 통신에는 다음 주소가 함께 사용된다.
- 매체 접근 제어 주소(MAC address): LAN 안에서 이더넷 프레임(frame)을 전달할 때 사용하는 링크 계층 주소
- 인터넷 프로토콜 주소(IP address): 네트워크와 호스트를 식별하는 네트워크 계층 주소
- 포트 번호(port number): 운영체제 안에서 통신할 애플리케이션을 구분하는 전송 계층 식별자
예를 들어 192.168.10.25:8080에서 192.168.10.25는 호스트의 IPv4 주소이고, 8080은 해당 호스트에서 실행 중인 프로세스의 포트 번호다.
2. 왜 사용하는가
LAN은 가까운 장치들이 외부 인터넷을 거치지 않고 직접 통신하도록 만든다.
주요 목적은 다음과 같다.
- 파일 서버, 프린터, 데이터베이스 같은 자원 공유
- 인터넷 회선과 공인 IP 주소 공유
- 낮은 지연 시간과 높은 대역폭이 필요한 내부 통신
- 방화벽(firewall), 가상 LAN(VLAN) 등을 이용한 접근 제어
- 브로드캐스트(broadcast)를 이용한 장치 탐색과 자동 설정
웹 개발 환경에서도 LAN은 자주 등장한다. 개발 서버를 localhost에만 바인딩하면 같은 컴퓨터에서만 접속할 수 있다. 0.0.0.0에 바인딩하면 방화벽과 네트워크 설정이 허용하는 범위에서 다른 LAN 장치도 접속할 수 있다.
3. 동작 원리
같은 서브넷으로 전송
호스트는 목적지 IP 주소와 자신의 서브넷 마스크(subnet mask)를 비교한다.
호스트 주소가 192.168.10.25, 서브넷 마스크가 255.255.255.0이라면 CIDR(Classless Inter-Domain Routing) 표기는 192.168.10.25/24다.
호스트 IP: 192.168.10.25
네트워크 주소: 192.168.10.0
브로드캐스트: 192.168.10.255
사용 가능 범위: 192.168.10.1 ~ 192.168.10.254목적지가 같은 192.168.10.0/24에 속하면 호스트는 목적지 장치로 직접 프레임을 보낸다.
ARP로 MAC 주소 확인
IPv4 호스트는 주소 결정 프로토콜(Address Resolution Protocol, ARP)을 사용해 목적지 IPv4 주소에 대응하는 MAC 주소를 찾는다.
- 송신자가 목적지 IP 주소를 자신의 ARP 캐시(cache)에서 찾는다.
- 항목이 없으면 LAN 전체에 ARP 요청을 브로드캐스트한다.
- 해당 IP 주소를 가진 장치가 자신의 MAC 주소로 응답한다.
- 송신자가 IP 주소와 MAC 주소의 대응 관계를 캐시에 저장한다.
- 송신자가 목적지 MAC 주소를 포함한 이더넷 프레임을 전송한다.
IPv6에서는 ARP 대신 이웃 탐색 프로토콜(Neighbor Discovery Protocol, NDP)을 사용한다.
스위치의 프레임 전달
스위치(switch)는 수신한 프레임의 출발지 MAC 주소를 보고 MAC 주소 테이블을 학습한다.
목적지 MAC 주소가 테이블에 있으면 해당 포트로만 프레임을 전달한다. 목적지를 모르는 유니캐스트(unknown unicast), 브로드캐스트, 일부 멀티캐스트(multicast) 프레임은 같은 브로드캐스트 도메인(broadcast domain)의 여러 포트로 플러딩(flooding)된다.
다른 서브넷으로 전송
목적지가 다른 서브넷에 있으면 호스트는 프레임을 기본 게이트웨이(default gateway)의 MAC 주소로 보낸다. 프레임 안의 목적지 IP 주소는 최종 목적지 주소를 유지한다.
라우터는 IP 패킷(packet)의 목적지 주소와 라우팅 테이블(routing table)을 확인한 뒤 다음 네트워크로 전달한다. 라우터를 지날 때 링크 계층 프레임은 구간마다 새로 만들어진다.
DHCP를 이용한 자동 설정
동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol, DHCP)은 장치에 다음 정보를 자동으로 제공한다.
- IP 주소
- 서브넷 마스크 또는 프리픽스 길이
- 기본 게이트웨이
- 도메인 네임 시스템(Domain Name System, DNS) 서버
- 주소 임대 시간(lease time)
4. 코드 예제
다음 코드는 UDP(User Datagram Protocol) 브로드캐스트로 같은 LAN의 서비스를 찾는다. 수신 모드로 실행한 프로세스가 탐색 메시지에 유니캐스트로 응답한다.
import dgram from "node:dgram";
import os from "node:os";
const PORT = 41_234;
const mode = process.argv[2];
function localIPv4Addresses(): string[] {
return Object.values(os.networkInterfaces())
.flat()
.filter(
(address): address is NonNullable<typeof address> =>
address !== undefined &&
address.family === "IPv4" &&
!address.internal,
)
.map((address) => address.address);
}
if (mode === "listen") {
const socket = dgram.createSocket("udp4");
socket.on("message", (message, remote) => {
if (message.toString() !== "LAN_DISCOVERY_REQUEST") {
return;
}
const response = JSON.stringify({
service: "example-api",
port: 3000,
addresses: localIPv4Addresses(),
});
socket.send(response, remote.port, remote.address);
});
socket.bind(PORT, "0.0.0.0", () => {
console.log(`탐색 응답 대기: UDP ${PORT}`);
});
} else if (mode === "discover") {
const broadcastAddress = process.argv[3];
if (!broadcastAddress) {
throw new Error(
"브로드캐스트 주소가 필요합니다. 예: 192.168.10.255",
);
}
const socket = dgram.createSocket("udp4");
socket.on("message", (message, remote) => {
console.log(`응답 ${remote.address}: ${message.toString()}`);
});
socket.bind(() => {
socket.setBroadcast(true);
socket.send(
"LAN_DISCOVERY_REQUEST",
PORT,
broadcastAddress,
(error) => {
if (error) {
throw error;
}
console.log(`탐색 전송: ${broadcastAddress}:${PORT}`);
},
);
});
setTimeout(() => socket.close(), 3_000);
} else {
console.error(
"사용법: npx tsx lan-discovery.ts listen | discover <브로드캐스트 주소>",
);
process.exit(1);
}첫 번째 장치에서 수신기를 실행한다.
npx tsx lan-discovery.ts listen같은 서브넷의 다른 장치에서 탐색 요청을 전송한다.
npx tsx lan-discovery.ts discover 192.168.10.255브로드캐스트 주소는 실제 네트워크 설정에 맞춰야 한다. 운영체제 방화벽이 UDP 41234번 포트를 차단하면 응답을 받을 수 없다.
5. 시간 복잡도 또는 성능 특성
LAN 성능은 알고리즘의 시간 복잡도보다 대역폭(bandwidth), 지연 시간(latency), 패킷 손실(packet loss), 혼잡, 프레임 크기의 영향을 받는다.
1 Gbit/s이더넷의 표기 속도는 초당1,000,000,000비트의 물리 계층 전송률이다.- 실제 애플리케이션 처리량은 이더넷, IP, TCP 또는 UDP 헤더와 프로토콜 제어 비용 때문에 표기 속도보다 낮다.
- 전이중(full-duplex) 이더넷 링크에서는 송신과 수신을 동시에 수행할 수 있으며 충돌 감지 방식인 CSMA/CD를 사용하지 않는다.
- 스위치는 프레임마다 MAC 주소 테이블을 조회한다. 하드웨어 스위치는 일반적으로 내용 주소화 메모리(Content Addressable Memory, CAM)를 사용하므로 소프트웨어 자료구조의 빅오(Big-O)만으로 전달 성능을 설명하기 어렵다.
- 브로드캐스트는 같은 브로드캐스트 도메인의 모든 관련 장치가 처리해야 한다. 장치와 브로드캐스트 트래픽이 늘면 불필요한 CPU 사용량과 대역폭 소비가 증가한다.
- TCP 처리량은 링크 속도뿐 아니라 왕복 시간(Round-Trip Time, RTT), 혼잡 제어, 수신 윈도 크기, 패킷 손실에도 영향을 받는다.
6. 실무 사용 사례
개발 서버 공유
프런트엔드 개발 서버를 LAN에 공개하면 스마트폰이나 다른 컴퓨터에서 화면을 테스트할 수 있다.
npm run dev -- --host 0.0.0.0접속할 때는 서버 컴퓨터의 LAN 주소를 사용한다.
http://192.168.10.25:5173데이터센터 내부 통신
웹 서버, 애플리케이션 서버, 캐시, 데이터베이스는 같은 물리 LAN이나 가상 LAN(Virtual LAN, VLAN)에 배치될 수 있다. 내부 통신을 전용 네트워크로 분리하면 외부 노출 범위와 불필요한 트래픽을 줄일 수 있다.
장치 자동 탐색
프린터, 미디어 장치, 개발 도구는 브로드캐스트나 멀티캐스트를 이용해 같은 LAN의 서비스를 찾는다. 멀티캐스트 DNS(Multicast DNS, mDNS)는 로컬 네트워크에서 DNS 서버 없이 이름과 서비스를 탐색하는 데 사용된다.
네트워크 분리
회사는 VLAN과 라우팅 정책을 사용해 직원용, 서버용, 손님용, 사물 인터넷(Internet of Things, IoT) 네트워크를 분리한다. 같은 스위치를 사용하더라도 VLAN이 다르면 기본적으로 서로 다른 브로드캐스트 도메인이 된다.
7. 주의할 점
- 사설 IP 주소(private IP address)는 접근 제어 수단이 아니다. 같은 LAN의 다른 장치가 접근할 수 있으므로 인증과 방화벽이 필요하다.
0.0.0.0바인딩은 모든 사용 가능한 네트워크 인터페이스에서 연결을 받겠다는 의미다. 개발 서버나 관리 도구가 의도치 않게 LAN에 노출될 수 있다.- 브로드캐스트 패킷은 일반적으로 라우터를 통과하지 않는다. 서로 다른 서브넷의 서비스 탐색에는 중계기, 멀티캐스트 라우팅, 중앙 레지스트리 같은 별도 구성이 필요하다.
- ARP에는 자체 인증 기능이 없다. 공격자는 ARP 스푸핑(ARP spoofing)으로 잘못된 IP-MAC 대응 관계를 유도할 수 있다.
- 네트워크 주소와 브로드캐스트 주소를 계산할 때
/24를 가정하면 안 된다./20,/23,/27처럼 다양한 프리픽스 길이가 사용된다. - VLAN은 논리적 네트워크 분리 기능이다. 안전한 격리를 위해 라우터, 방화벽, 스위치 포트 설정도 함께 구성해야 한다.
8. 핵심 정리
- LAN은 제한된 영역의 장치를 연결하는 근거리 통신망(Local Area Network)이다.
- 같은 IPv4 서브넷의 장치는 ARP로 MAC 주소를 확인한 뒤 스위치를 통해 직접 통신한다.
- 다른 서브넷으로 가는 패킷은 기본 게이트웨이와 라우터를 거친다.
- 스위치는 MAC 주소로 프레임을 전달하고, 라우터는 IP 주소로 패킷의 경로를 결정한다.
- LAN 장애는 IP 주소, 서브넷 마스크, 기본 게이트웨이, ARP, 포트 바인딩, 방화벽 순서로 확인하면 범위를 빠르게 좁힐 수 있다.