3. Network Protocol
MAC Address
-
기본 동작 방식
- NIC는 자신의 MAC 주소를 가지고 있고, 전기 신호가 들어오면 2계층에서 데이터 형태(Frame)로 변환해서 내용을 구분한 후 MAC 주소를 확인
- 도착지 MAC 주소가 자신이 갖고 있는 MAC 주소와 다르면 그 패킷을 폐기
- 패킷의 목적지 주소가 자기 자신이거나 Broadcast, Multicast 와 같은 그룹 주소이면 처리해야 할 주소로 인지를 해서 패킷 정보를 상위 계층으로 넘김
- Broadcast와 Multicast는 모든 단말에게 전송하는 것이므로 MAC 주소가 일치하지 않더라도 OS나 애플리케이션이 처리하도록 해주어야 함
-
무차별 모드(Promiscuous Mode)
- 기본 동작 방식을 이용하면 자신의 MAC Address 와 일치하지 않은 도착지 MAC Address를 가졌을 경우 자체적으로 폐기함
- 네트워크 상태를 모니터링 하거나 디버그 또는 분석 용도로 네트워크 전체 패킷을 수집해 분석해야 할 경우 기본 동작 방식을 사용하면 다른 목적지 MAC Address 를 가진 패킷을 분석할 수 없음
- 패킷을 분석하거나 모니터링 하기 위해서는 모든 패킷을 수집할 수 있도록 무차별 모드로 NIC를 구성
- 대표적인 애플리케이션
-
MAC Address를 여러 개 갖는 경우
- 컴퓨터에 여러 개의 NIC를 장착하는 경우(방화벽이나 프록시 형태로 사용하는 서버)
- 멀티 레이어 스위치, 라우터와 같은 복잡한 네트워크 장비는 NIC가 여러 개이고 MAC Address도 여러 개가 할당됨
IP Address
-
개요
- OSI 7계층에서 주소를 가지는 계층은 2계층과 3계층
- 2계층은 물리적 주소인 MAC Address, 3계층은 논리적 주소인 IP Address를 사용
-
특징
- 사용자가 변경 가능한 논리 Address
- Address에 레벨이 있는데, 그룹을 의미하는 네트워크 Address와 호스트 Address로 구분
IP Address 체계
-
IP는 v4, v6 두 체계가 사용되며 IPv4 는 32비트 주소체계, IPv6는 128비트 주소체계
-
IPv4는 4개의 Octet(8비트)으로 나누고, 각 옥텟은 . 으로 구분하며 옥텟은 10진수로 표기

-
IP Address 도 네트워크 주소와 호스트 주소로 구분
네트워크 Address
- 호스트들을 모은 네트워크를 지칭하는 Address
- 네트워크 Address 가 동일한 네트워크를 로컬 네트워크라고 함
호스트 Address
- 하나의 네트워크(로컬) 내에 존재하는 호스트를 구분하기 위한 Address
-
MAC Address는 24비트씩 나누어서 제조업체와 구분자를 명시하지만 IP Address 에서는 크기가 가변
Classful Address

- 맨 처음 IP 주소 체계가 만들어졌을 때는 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 Class의 개념을 도입
- A Class가 1600만개의 IP Address를 소유하고 B Class가 65536개, 그리고 C Class는 256개의 IP Address를 가질 수 있었음
A Class: 3개의 옥텟이 호스트 주소를 나타내므로 사용 가능한 IP가 2^24 → 약 1600만
B Class: 2개의 옥텟이 호스트 주소를 나타내므로 사용 가능한 IP가 2^16 → 약 65,000
C Class: 1개의 옥텟이 호스트 주소를 나타내므로 사용 가능한 IP가 2^8 → 256개
- A Class는 첫번째 옥텟에 네트워크 주소와 호스트 주소를 나누는 구분자가 있고, B Class는 두번째 옥텟에 구분자가 있고, C Class 는 세번째 옥텟에 구분자가 있음 → 이 구분자가 서브넷 마스크
- 다른 고정된 네트워크 Address 체계에 비해 Address를 절약할 수 있다는 장점이 있음
클래스 구분
A Class
- 첫번째 비트가 0인 모든 IP 대역
- 0.0.0.0 ~ 127.255.255.255
- 127로 시작하는 IP는 Loopback으로 사용하기 때문에 실제 사용 가능한 IP는 0.0.0.0 ~ 126.255.255.255
B Class
- 첫번째 비트는 1이고, 두번째 비트는 0인 IP 대역
- 128.0.0.0 ~ 191.255.255.255
C Class
- 처음 두 비트는 1이고, 세번째 비트가 0인 IP 대역
- 191.0.0.0 ~ 223.255.255.255
사용 가능한 호스트 개수 파악
-
172.16.0.0 대역을 할당 받은 경우 사용 가능한 IP
- 하나의 IP 대역에서 첫번째 IP는 네트워크를 의미하는 네트워크 Address가 된다.
- 마지막 IP는 전체 통신을 위한 Broadcast 주소가 된다
- 172는 B Class - 네트워크 주소가 16비트
-
172.16.0.0: 네트워크 주소
-
172.16.255.255: 브로드캐스트 주소
-
사용 가능한 IP(유효 IP): 172.16.0.1 ~ 172.16.255.254
IP 주소 부족
- → 인터넷이 사용화되면서 인터넷에 연결하는 호스트 숫자가 폭발적으로 증가
- 기존 Classful 기반의 IP 주소 체계는 확장성과 효율성을 모두 잡는 좋은 주소 체게였지만, 기하급수적으로 늘어나는 IP Address 요구를 감당하기에는 역부족
- 이론적으로 사용할 수 있는 IP 개수는 43억개지만, 실제로 사용할 수 있는 IP의 개수는 이보다 훨씬 적음
- 하나의 클래스 대역을 할당하며 모든 네트워크에서 그 대역을 전부 사용하지 않기 때문
- 하나의 IP 대역이 할당되면 그 대역안에서 IP가 사용되지 않더라도 재할당할 수 없음
주소 부족 문제 해결
- 단기 대책
Classless Inter-Domain Routing(CIDR)
- 중기 대책
- 장기 대책
Classless
-
IPv4의 문제 중 하나가 상위 클래스를 할당받은 조직에서 이 주소들을 제대로 사용하지 못하면서 낭비하는 것
-
Classful 에서는 한 개의 클래스 네트워크가 한 조직에 할당되면 아무리 비어있는 Address 라도 IP를 분할해 다른 기관이 사용할 수 없음
-
→ “클래스 개념 자체를 버린 것이 Classless”
-
현재 사용하는 주소 체계는 Classless
-
기존 서브넷
- A: 255.0.0.0
- B: 255.255.0.0
- C: 255.255.255.0
-
서브넷 마스크 표현 방법
- 네트워크 주소 부분은1, 호스트 주소 부분은 0으로 표기
- 앞에서부터 1이 나오게 되는데, 한 번 0이 나오면 1은 더 이상 나오면 안 됨
- 표현을 할 때는 알아보기 쉽게 10진수를 이용
네트워크 주소를 만들 때는 IP와 서브넷 마스크를 AND 연산을 수행하면 됨.
- 103.9.32.146 이라는 IP Address 에 255.255.255.0 서브넷 마스크를 사용하는 IP는 네트워크 주소를 찾아보면 103.9.32.0 이고, 0인 부분이 호스트 주소가 되므로 0.0.0.146이 된다.
- 서브넷 마스크를 표현할 때 비트 단위로 표현하기도 함.
- 255.255.255.0 에서는 1의 개수가 24개 이므로
/24 로 표기
- 일부 장비에서는 8진수나 16진수로 표기하기도 하는데 최근에는 이론 표기법이 거의 없음
- 서브넷 마스크와 반대로 표기하는 wildmask 의 개념이 있음
서브네팅(Subnetting)
- 원래 부여된 클래스의 기준을 무시하고 새로운 네트워크-호스트 구분 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것이 subnetting 이고, 반대로 모아서 사용하는 것이 supernetting
- classful 에서는 옥텟 단위로 서브넷을 설정하지만, 옥텟 단위보다 더 작게 네트워크를 쪼개어 2진수의 1단위로 네트워크를 분할
- 예시
- 103.9.32.146 의 IP라면 Classful 에서는 서브넷 마스크가 255.0.0.0 이고 네트워크 주소가 103.0.0.0 이다
- 서브넷 마스크를 255.255.255.192 로 설정하면 네트워크 주소는 103.9.32.128이 됨
- 원래 서브넷 마스크는 8비트였지만, 26비트로 설정한 경우
- 실무에서 고려해야 할 부분
네트워크 사용자 입장
- 네트워크에서 사용할 수 있는 IP 범위 파악
- 기본 게이트웨이와 서브넷 마스크 설정이 제대로 되어 있는지 확인
네트워크 설계자 입장
- 네트워크 설계 시 네트워크 내에 필요한 단말을 고려한 네트워크 범위 설계
네트워크 사용자의 Subnetting
-
네트워크 사용자는 이미 설계되어 있는 네트워크에서 사용할 수 있는 IP Address 범위를 파악해야 하는데, 주어진 네트워크 범위 밖의 IP를 할당하거나 서브넷 마스크를 잘못 입력하면 로컬 네트워크의 특정 범위에 속해있는 단말과 통신에 문제가 생기거나 외부 네트워크 전체에 통신하지 못하는 상황이 발생
-
기존 클래스 단위처럼 옥텟 단위의 네트워크를 사용할 경우 모든 수가 10진수 단위로 표현되므로, 관리자나 사용자가 이해하기 쉽지만 대부분의 서브네팅은 비트 단위로 분할되므로 이런 환경에 속해 있을 경우 어떤 IP 범위가 내가 속한 네트워크이고 어떤 IP 범위가 원격지 네트워크인지 판단하기 어려울 수 있음
-
네트워크 범위를 파악
- 내 IP를 2진수로 표현
- 서브넷 마스크를 2진수로 표현
- 2진수 AND 연산으로 서브네팅된 네트워크 Address를 알아냄
- 호스트 Address 부분을 2진수 1로 모두 변경해서 Broadcast Address를 알아냄
- 유효 IP 범위를 파악하는데 서브네팅된 네트워크 Address + 1은 유효 IP 중 가장 작은 IP
- Broadcast Address -1 은 유효 IP 중 가장 큰 IP
- 2진수로 되어 있는 것을 10진수로 변환
(맥북 기준)
현재 컴퓨터 IP - ipconfig getifaddr en0
서브넷 마스크 - ifconfig en0
네트워크 주소 - netstat -rn
브로드캐스트 주소 - ifconfig en0
유효한 IP 범위 - ipcalc 사용
네트워크 설계자의 서브네팅
회사에 4곳의 지사(서브넷된 네트워크)가 있고, 각 지사에는 15대의 IP가 필요한 장비가 존재하는 경우 서브넷 마스크 설정
- 네트워크를 설계할 때 가능하면 Private IP 대역을 사용해 충분한 IP 대역을 사용하는 것이 좋음
- Public IP는 인터넷에서 유일하게 사용되므로 사용할 수 있는 IP 수가 제한되어 있고, 할당받은 IP를 사용하지 않는 경우 IP 할당 기관이 회수함
- Private IP는 회사 내부에서만 사용하므로 제한 없이 큰 네트워크를 사용할 수 있음
- Private IP를 사용해 여유 없이 네트워크를 할당하면 크기가 다른 네트워크가 많아짐
- 네트워크 관리자 입장에서도 관리가 힘들어지고 일반 사용자도 IP를 쉽게 구분하거나 알아볼 수 없게되므로
- 최대한 같은 크기의 네트워크를 할당하고 10진수로 표현해도 쉽게 이해할 수 있는 C 클래스 단위인 24비트로 쪼개 할당하는 것이 바람직
- 네트워크를 단계적으로 잘 설계하면 관리하기 쉽고 네트워크 장비 성능도 향상되는데 잘 설계된 네트워크는 라우터가 관리하는 경로가 적고 관리하기 쉬움
- 잘못 설계된 네트워크에서는 실제로 존재하는 네트워크 수만큼 Core 라우터가 모든 경로를 알고 있어야 함

Public IP & Private IP
인터넷에 접속해서 요청을 하고 응답을 받으려면 IP Address 가 있어야 하는데, 이 IP Address는 전 세계에서 유일해야하는 식별자로 이러한 Address를 Public IP Address 라고 함.
인터넷에 연결하지 않고 개인적으로 네트워크를 구성한다면 Public IP Address를 할당받지 않고도 네트워크를 구축할 수 있는데 이때 사용하는 주소가 Private IP Address
- Private IP를 가지면 기본적으로 인터넷에 접속할 수 없지만, NAT(주소 변환)를 이용해서 Public IP Address 로 변환해서 인터넷에 접속이 가능
- 클래스 별 Private IP

- NAT 설정을 할 때, Private IP가 아닌 Public IP를 할당해도 인터넷을 하는데는 아무런 문제가 없지만, 할당된 Public IP의 실제 컴퓨터에 접속을 못함.
- IP 공유기는 대부분 C 클래스 대역은 192.168.x.x 대역을 사용하고, 스마트폰은 테더링을 할 때 172.x.x.x 대역을 사용

Bogon IP
- 모든 IP가 인터넷에서 사용되는 것은 아님
- IP Address를 할당하는 최상위 기구인 IEEE가 여러가지 목적으로 예약해 놓아서 Public IP로 할당하지 않는 IP Address를 Bogon IP 라고 함
- Bogon IP는 인터넷에서 동작하는 라우터에 해당 IP 정보가 존재하지 않음
- Bogon IP 대역을 이용한 통신 시도가 있었다면, 해킹을 목적으로 IP Spoofing(IP Address 변조) 했거나 실수로 할당된 IP를 사용한 경우이므로 적절히 필터링 하는 것이 좋음

IP Address 발신지 확인 방법
- Whois나 IP 검색 서비스를 제공하는 사이트가 많은데 한국에서는 한국인터넷진흥원(KISA)에서 제공
TCP, UPD
- 2계층과 3계층은 목적지를 정확하게 찾아가기 위한 주소 제공이 목적
- 4계층은 목적지 단말 안에서 여러 애플리케이션 프로세스 중 통신해야 할 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해서 원래 데이터를 잘 만들어내기 위한 역할
4계층 프로토콜과 서비스 포트
-
통신하는 과정에서 각 계층에서 헤더가 추가되고 여러가지 정보가 들어감
-
가장 중요한 정보 2가지
- 각 계층에서 정의하는 정보
- 상위 프로토콜 지시자 정보
-
2계층에서는 MAC 주소 정보를 추가하고 반대로 수신측의 2계층에서 이 정보를 확인
-
3계층에서는 IP 주소를 사용
-
4계층에서는 시퀀스 번호, ACK 번호가 추가됨
-
상위 프로토콜 지시자는 포트 번호
-
TCP/IP 프로토콜 스택에서 4계층은 TCP와 UDP가 담당
-
4계층의 목적은 목적지를 찾아가는 것이 아니고, 애플리케이션에서 사용하는 프로세스를 정확히 찾아내고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것
TCP
-
신뢰할 수 없는 공용망에서도 정보 유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하고 분할된 패킷이 잘 전송되었는지 확인하는 기능을 가진 4계층 프로토콜
-
패킷의 번호(Sequence Number)를 부여하고 잘 전송되었는지에 대한 응답(Acknowledge Number) 하고 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송 크기까지 고려해서 통신함
-
이러한 역할 덕분에 특별한 개발 없이도 쉽고 안전하게 네트워크를 사용할 수 있음
-
패킷 순서와 응답 번호
-
윈도우 사이즈와 슬라이딩 윈도우
- 패킷을 하나씩 전송하고 응답을 기다리면 거리가 먼 경우 왕복 지연시간이 늘어남
- 여러개의 데이터를 한꺼번에 보내고 응답을 받는 방식이 슬라이딩 윈도우
- 윈도우 사이즈: 한꺼번에 보내는 패킷의 개수
- 윈도우 사이즈는 동적으로 변하는데 데이터 유실이 발생하면 윈도우 사이즈를 줄이고, 그렇지 않으면 서서히 하나씩 늘려감
-
3방향 핸드셰이크
- TCP에서는 유실 없는 안전한 통신을 위해 통신 시작 전에 사전 연결 작업을 진행
- 목적지가 데이터를 받을 준비가 안 된 상황에서 데이터를 일방적으로 전송하면 목적지에서는 데이터를 정상적으로 처리할 수 없어서 데이터가 버려짐
- TCP 프로토콜은 이런 상황을 만들지 않기 위해서 통신 전 데이터를 안전하게 보내고 받을 수 있는지 미리 확인하는 작업을 거침
- TCP에서는 세 번의 패킷을 주고 받으면서 통신을 서로 준비하기 때문에 3방향 핸드셰이크 라고 함
- 서버에서는 서비스를 제공하기 위해 클라이언트의 접속을 받아들일 수 있는 LISTEN 상태로 대기
- 클라이언트에서 통신을 시도할 때
Syn 패킷을 보내는데 클라이언트에서는 이 상태를 SYN-SENT 라고 함
- 클라이언트의 Syn 패킷을 받은 서버는
SYN-RECEIVE 상태로 변경되고 Syn, Ack 로 응답
- 이 응답을 받은
클라이언트는 ESTABLISHED 상태로 변경되고 그에 대한 응답을 서버로 전송
서버에서도 이 응답을 받고 ESTABLISHED 상태로 변경됨
- 이제 서버와 클라이언트는 통신할 준비 완료
UDP
- Datagram 이라고도 함
- 4계층이 가져야 할 특징이 거의 없음
- 데이터 전송을 보장하지 않는 프로토콜로 제한된 용도로만 사용
- 음성 데이터나 실시간 스트리밍과 같은 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우
- 신뢰성보다 시간에 맞추어 계속 전송하는 것이 중요한 곳에 쓰임
UDP는 TCP와 달리 3방향 핸드셰이크와 같이 사전에 연결을 확립하는 절차가 없음.
그 대신 UDP에서 첫 데이터는 리소스 확보를 위해 인터럽트를 거는 용도로 사용되고 유실됨
- → UDP 프로토콜을 사용하는 애플리케이션이 대부분 이런 상황을 인지하고 동작하거나, 연결 확립은 TCP를 사용하고 애플리케이션끼리 준비되면 실제 데이터만 UDP를 이용하는 경우가 대부분.
같은 동영상 스트리밍이더라도 넷플릭스나 유튜브와 같이 시간에 민감하지 않은 단일 시청자를 위한 연결은 TCP를 사용하는데 이 경우 원활한 시청을 위해 수 초~수 분의 동영상 데이터를 미리 받아놓고 네트워크에 잠시 문제가 발생하더라도 동영상이 끊기지 않도록 캐시에 저장함.
→ 유튜브는 최근 QUIC(Quick UDP Internet Connections) 라는 프로토콜을 적극적으로 사용
| TCP | UDP |
|---|
| Connection Oriented | Connectionless |
| 오류 제어 수행 | 오류 제어 수행 X |
| 흐름 제어(속도 조절) 수행 | 흐름 제어 수행 X |
| Unicast | Unicast, Multicast, Broadcast |
| FullDuplex(전이중 동시에 주고 받기 가능) | HalfDuplex(반이중 - 동시에 주고 받기는 안 됨) |
| 데이터 전송 | 실시간 트래픽 전송 |
ARP
- Address Resolution Protocol
- 데이터 통신을 위해서는 2계층 물리적 주소인 MAC Address 와 3계층 논리적 주소인 IP Address 2개가 사용됨
- IP Address는 물리적 MAC Address 와 아무런 연관성이 없음
- IP Address 와 MAC Address를 연계시켜주기 위한 매커니즘이 ARP
- 호스트에서 아무 통신이 없다가 처음 통신을 시도하면 패킷을 바로 캡슐화할 수 없는데, 통신을 시도할 때 출발지와 목적지 IP 주소는 미리 알고 있지만 상대방의 MAC Address를 알 수 없어서 2계층 캡슐화를 할 수 없음
상대방의 MAC 주소를 알아내려면 ARP Broadcast 를 이용해서 네트워크 전체에 상대방의 MAC 주소를 질의
- ARP 브로드캐스트를 받은 목적지는 ARP 프로토콜을 이용해서 자신의 MAC 주소를 응답
GARP
- ARP의 필드를 그대로 사용하고 내용을 변경해 다른 목적으로 사용하는 프로토콜
- GARP(Gratuitous ARP)는 대상자 필드에 목적지 주소가 아니라 자신의 IP 주소를 채워서 ARP 요청을 보내는 것으로 ARP가 상대방의 MAC 주소를 알아내기 위해 사용되는 반면, GARP는 자신의 IP와 MAC 주소를 알릴 목적으로 사용
- 사용하는 이유
- IP 주소 충돌 감지
- 상대방의 ARP 테이블을 갱신
- HA(고가용성) 용도의 클러스터링
서브넷과 게이트웨이
게이트웨이 : 원격지 네트워크와의 통신에 사용하는 장비
- 3계층 장비(라우터 & L3 스위치)가 이 역할을 수행
- 기본 게이트웨이는 외부 네트워크에 접속할 수 있도록 해주는 역할을 수행
- 서브넷 마스크는 동일한 LAN 인지 아니면 서로 다른 네트워크 간의 통신인지 구분하기 위한 주소
- 로컬 통신이면 ARP 요청으로 통신할 수 있지만, 원격지 통신은 ARP가 라우터를 넘어가지 못하는 브로드캐스트이므로 외부와 통신이 가능한 장비의 도움이 필요
- 게이트웨이는 라우터의 IP를 설정하는데 라우터의 인터페이스 IP는 일반적으로 네트워크 대역에서 시작하는 IP나 끝나는 IP를 설정함
- 라우터의 인터페이스에 연결된 네트워크는 항상 동일한 네트워크 대역의 IP를 가져야 함
4.NetworkDevice
2계층 장비 - L2 Switch
Switch : 패킷을 동시에 여러 장비가 서로 간섭없이 통신하도록 도와주는 장비
- 스위치를 사용하면 여러 단말이 한꺼번에 통신할 수 있어서 통신하기 위해 기다리거나 충돌 때문에 대기하는 문제가 해결되고, 네트워크 전체의 통신 효율성이 향상됨.
- MAC Address table 을 가지고 동작
- 각 호스트들의 MAC 주소를 저장해둔 테이블.
- 첫 통신을 할 때, 각각의 호스트들은 다른 호스트의 IP, MAC 모두 모른다.
3계층 장비 - Router & L3 Switch
4계층 장비 - LoadBalancer(L4 Switch) & Firewall