학습 범위: 네트워크 DAY 1 ~ DAY 11
복습 방식: 20문제 풀이 및 해설
학습 내용: ARP, IP/MAC 주소, TCP 오류·흐름·혼잡 제어, HTTP, Wireshark, ICMP, IPv4 단편화, 이중화, 로드 밸런싱
기존에 공부했던 네트워크 내용을 다시 복습해보자.
이번 복습도 하루에 20문제씩 풀면서 기억이 나지 않거나 헷갈리는 부분을 다시 정리하는 방식으로 진행한다.
다음과 같은 두 PC가 있다.
PC A
192.168.10.10/24
PC B
192.168.20.20/24
PC A가 PC B에게 데이터를 보내려고 한다.
이때 PC A는 PC B의 MAC 주소를 직접 ARP로 알아내야 할까?
두 PC는 서로 다른 네트워크에 있다.
PC A
192.168.10.0/24
PC B
192.168.20.0/24
따라서 PC A가 PC B에게 직접 프레임을 전달할 수 없다.
PC A는 다른 네트워크로 패킷을 전달하기 위해 먼저 Default Gateway로 프레임을 보내야 한다.
따라서 PC A가 ARP를 통해 알아내야 하는 MAC 주소는
PC B의 MAC 주소 X
Default Gateway의 MAC 주소 O
이다.
동작 과정은 다음과 같다.
PC A
|
| 목적지가 다른 네트워크인지 확인
v
Default Gateway IP 확인
|
| ARP
v
Default Gateway MAC 확인
|
v
Gateway로 Frame 전송
핵심: 다른 네트워크로 통신할 때는 최종 목적지 장비의 MAC이 아니라 우선 Default Gateway의 MAC 주소가 필요하다.
다음과 같은 환경이 있다.
PC A IP
192.168.1.10
PC A MAC
AA-AA-AA-AA-AA-AA
Default Gateway IP
192.168.1.1
Default Gateway MAC
BB-BB-BB-BB-BB-BB
목적지 서버 IP
8.8.8.8
PC A가 목적지 서버로 패킷을 처음 전송할 때 다음 값은 무엇일까?
정답은 다음과 같다.
출발지 IP
192.168.1.10
목적지 IP
8.8.8.8
출발지 MAC
AA-AA-AA-AA-AA-AA
목적지 MAC
BB-BB-BB-BB-BB-BB
여기서 중요한 것은 IP 주소와 MAC 주소의 역할 차이다.
IP 주소
→ 최종 목적지를 나타냄
MAC 주소
→ 현재 네트워크 구간에서
다음으로 전달할 장치를 나타냄
PC A는 최종적으로 8.8.8.8에 데이터를 보내고 싶기 때문에 목적지 IP는 그대로 8.8.8.8이다.
하지만 현재 PC A가 직접 프레임을 전달할 대상은 Default Gateway이므로 목적지 MAC은 Gateway의 MAC 주소가 된다.
핵심: IP는 최종 목적지, MAC은 현재 구간의 다음 전달 대상.
PC A가 목적지 서버로 패킷을 전송하면서 여러 라우터를 지나간다.
라우터를 지날 때 일반적으로 변경되는 것은?
① 출발지 IP
② 목적지 IP
③ 출발지 MAC / 목적지 MAC
④ 출발지 IP / 목적지 IP 모두
정답은 ③ 출발지 MAC / 목적지 MAC
라우터는 프레임을 수신한 뒤 기존 2계층 헤더를 제거하고 다음 네트워크 구간에 맞는 새로운 프레임을 만든다.
예를 들어
PC A
|
v
Router A
|
v
Router B
PC A → Router A 구간에서는
출발지 MAC
→ PC A
목적지 MAC
→ Router A
Router A → Router B 구간에서는
출발지 MAC
→ Router A의 송신 인터페이스 MAC
목적지 MAC
→ Router B의 MAC
이 된다.
반면 일반적인 라우팅에서는 최종 목적지를 나타내는 IP 주소는 유지된다.
MAC
→ Hop마다 변경될 수 있음
IP
→ 일반적으로 종단 간 유지
단, NAT가 수행되는 경우 IP 주소가 변경될 수 있다.
PC A가 같은 네트워크에 있는 PC B의 IP 주소는 알고 있지만 MAC 주소는 모른다.
ARP Request는 어떻게 전송될까?
① PC B에게만 Unicast
② 같은 네트워크에 Broadcast
③ Gateway에게만 전송
④ 인터넷 전체에 Broadcast
정답은 ② Broadcast
처음에는
ARP 테이블에 있는 여러 MAC 주소에 한 번에 요청하는 것인가?
라고 생각했다.
하지만 ARP Request는 ARP 테이블에 있는 장치들에게 요청하는 것이 아니다.
PC A가 다음과 같은 메시지를 같은 네트워크에 브로드캐스트한다고 생각하면 된다.
"192.168.1.20을 사용하는 장치 누구야?
MAC 주소 알려줘!"
같은 네트워크의 장치들이 요청을 받아보지만 자신의 IP가 아니면 무시한다.
PC C
"내 IP 아닌데?"
→ 무시
PC D
"내 IP 아닌데?"
→ 무시
PC B
"192.168.1.20은 내 IP다!"
→ ARP Reply
일반적으로
ARP Request
→ Broadcast
ARP Reply
→ Unicast
방식으로 동작한다.
PC A의 ARP 테이블에 다음 정보가 이미 저장되어 있다.
192.168.1.20
→ BB-BB-BB-BB-BB-BB
PC A가 다시 192.168.1.20으로 데이터를 보내려고 한다.
어떻게 동작할까?
① 무조건 다시 ARP Request를 전송한다.
② ARP Table에 저장된 MAC 주소를 사용한다.
③ Default Gateway의 MAC 주소를 사용한다.
④ DNS 서버에 MAC 주소를 물어본다.
정답은 ②번
ARP 테이블에 유효한 IP-MAC 대응 정보가 이미 있다면 다시 ARP Request를 브로드캐스트할 필요가 없다.
192.168.1.20
|
v
ARP Table 조회
|
v
BB-BB-BB-BB-BB-BB
저장되어 있는 MAC 주소를 이용해 바로 프레임을 전송할 수 있다.
핵심: ARP Table은 이전에 확인한 IP와 MAC 주소의 대응 정보를 일정 시간 저장한다.
송신자가 다음 데이터를 연속으로 보냈다.
1 → 2 → 3 → 4 → 5
그런데 3번 데이터가 유실되었다.
Go-Back-N 방식에서는 무엇을 다시 전송할까?
① 3번
② 3, 4, 5번
③ 1~5번 전체
④ 재전송하지 않음
처음에는 ① 3번만 다시 전송한다고 생각했다.
하지만 정답은 ② 3, 4, 5번
Go-Back-N은 이름 그대로 오류가 발생한 지점으로 돌아가 이후 데이터를 다시 전송한다.
1 → 정상
2 → 정상
3 → 손실
4 → 전송
5 → 전송
재전송:
3 → 4 → 5
반면 유실된 데이터만 선택해서 재전송하는 방식은 Selective Repeat이다.
Go-Back-N
→ 문제가 발생한 지점부터 이후까지 재전송
Selective Repeat
→ 문제가 발생한 데이터만 선택적으로 재전송
수신자가 처리할 수 있는 데이터보다 송신자가 너무 많은 데이터를 전송하지 않도록 조절하기 위해 사용하는 대표적인 방식은?
① Sliding Window
② DNS
③ NAT
④ ARP
정답은 ① Sliding Window
TCP에서는 수신자가 데이터를 처리할 수 있는 능력을 고려해 송신량을 조절한다.
이를 흐름 제어(Flow Control)라고 한다.
쉽게 생각하면
수신자
"지금 이 정도까지만 받을 수 있어!"
송신자
"확인. 그만큼만 보낼게."
와 같은 방식이다.
Flow Control
→ 수신자의 처리 능력 고려
TCP 혼잡 제어 방식 중 하나인 Slow Start는 어떻게 동작할까?
정답은 Slow Start라는 것까지는 알았지만 처음에는
혼잡이 발생하면 데이터를 천천히 전달하도록 하는 방식?
이라고 생각했다.
Slow Start의 핵심은 처음 전송량을 작게 시작하는 것이다.
혼잡 윈도우를 작은 값에서 시작하고 ACK가 정상적으로 도착하면 전송량을 증가시킨다.
작은 혼잡 Window
↓
ACK 정상 수신
↓
Window 증가
↓
ACK 정상 수신
↓
Window 증가
Slow Start라는 이름 때문에 계속 천천히 증가한다고 생각할 수 있지만, 실제로는 초기에는 전송량을 빠르게 증가시킨다.
일반적으로 혼잡 윈도우는 RTT가 지날수록 지수적으로 증가한다.
이후
Slow Start Threshold
에 도달하면 증가 방식이 달라진다.
Flow Control
→ 수신자가 감당 가능한가?
Congestion Control
→ 네트워크가 감당 가능한가?
핵심: Slow Start는 혼잡이 발생한 뒤 천천히 보내는 기능이라기보다, 작은 전송량에서 시작해 네트워크 상황을 확인하면서 빠르게 증가시키는 혼잡 제어 방식이다.
HTTP에서 서버가 이전 요청의 상태를 기본적으로 기억하지 않는 특성을 무엇이라고 할까?
① Stateful
② Stateless
③ Persistent
④ Connectionless
정답은 ② Stateless
HTTP는 기본적으로 각각의 요청을 독립적으로 처리한다.
Request 1
→ 독립적 처리
Request 2
→ 독립적 처리
Request 3
→ 독립적 처리
따라서 HTTP 자체는 이전 요청의 상태를 자동으로 기억하지 않는다.
하지만 실제 웹 서비스에서는 로그인 상태 등을 유지해야 하기 때문에
과 같은 기술을 함께 사용한다.
Stateless: 서버가 이전 요청의 상태를 기본적으로 유지하지 않는 특성
HTTP에서 리소스의 일부만 수정할 때 사용하는 메서드는?
① GET
② POST
③ PUT
④ PATCH
정답은 ④ PATCH
이 문제는 이전 복습에서 PUT과 PATCH를 헷갈려 틀렸던 문제였다.
이번에는 다음과 같이 기억해서 맞혔다.
PUT
→ 전체 수정 / 대체
PATCH
→ 일부 수정
예를 들어
{
"name": "pingu",
"age": 25,
"job": "engineer"
}
중 age 값만 수정하고 싶다면 PATCH의 개념으로 이해할 수 있다.
핵심: PUT은 전체, PATCH는 일부.
HTTP 응답이 다음과 같다.
404 Not Found
4xx 계열 상태 코드는 어떤 의미일까?
① 요청 성공
② Redirect
③ Client Error
④ Server Error
처음에는 C와 D 중에서 고민하다 Server Error라고 생각했다.
하지만 정답은 ③ Client Error
HTTP 상태 코드는 첫 번째 숫자로 큰 의미를 구분할 수 있다.
2xx
→ 성공
3xx
→ Redirection
4xx
→ Client Error
5xx
→ Server Error
따라서
404 Not Found
는 요청한 리소스를 찾을 수 없다는 의미이며 4xx 계열에 속한다.
대표적으로
200 OK
→ 요청 성공
404 Not Found
→ 요청한 리소스를 찾을 수 없음
500 Internal Server Error
→ 서버 내부 오류
와 같이 구분할 수 있다.
Wireshark에서 HTTP 패킷을 확인했을 때 다음과 같은 구조가 보인다.
Ethernet II
→ IPv4
→ TCP
→ HTTP
이는 무엇을 의미할까?
정답은 캡슐화 구조
HTTP 데이터는 네트워크를 통해 전송되면서 각 계층의 헤더가 추가된다.
송신 측에서는
HTTP
↓
TCP
↓
IP
↓
Ethernet
순서로 캡슐화된다.
조금 더 자세히 보면
HTTP Data
↓
TCP Header 추가
↓
IP Header 추가
↓
Ethernet Header 추가
수신 측에서는 반대로
Ethernet
→ IP
→ TCP
→ HTTP
순서로 정보를 확인하고 헤더를 제거한다.
이를 역캡슐화(Decapsulation)라고 한다.
TCP 연결을 설정하는 순서는?
① SYN → ACK → FIN
② SYN → SYN/ACK → ACK
③ ACK → SYN → ACK
④ FIN → ACK → FIN
정답은 ②번
Client Server
SYN
--------------------------->
SYN + ACK
<---------------------------
ACK
--------------------------->
TCP 연결 완료
클라이언트가 서버에게 연결을 요청한다.
"TCP 연결하고 싶어!"
서버는 클라이언트의 SYN을 확인하고 ACK를 보내면서 자신의 SYN도 함께 전달한다.
"네 요청을 받았고,
나도 연결할 준비가 됐어."
클라이언트가 서버의 응답을 확인한다.
"서버 응답 확인했어."
TCP 연결: SYN → SYN/ACK → ACK
TCP 연결을 정상적으로 종료할 때의 순서는?
① FIN → ACK → FIN → ACK
② SYN → ACK → SYN → ACK
③ FIN → FIN → ACK → ACK
④ ACK → FIN → ACK → FIN
정답은 ①번
FIN
↓
ACK
↓
FIN
↓
ACK
TCP는 양방향 통신이기 때문에 한쪽이 통신을 종료한다고 해서 반대쪽도 즉시 종료되는 것은 아니다.
한쪽에서
FIN
→ "나는 더 이상 보낼 데이터가 없어."
라고 전달하면 상대방은
ACK
→ "확인했어."
라고 응답한다.
상대방에게 아직 전송할 데이터가 있다면 모두 보낸 뒤 자신의 FIN을 전송한다.
마지막 ACK까지 전달되면 연결이 종료된다.
TCP 연결 설정: 3-Way Handshake
TCP 연결 종료: 일반적으로 4-Way Handshake
ping 명령에서 사용하는 대표적인 프로토콜은?
① TCP
② UDP
③ ICMP
④ ARP
정답은 ③ ICMP
Ping은 일반적으로 ICMP의 Echo 메시지를 사용하여 상대 장비의 응답 여부를 확인한다.
Type = 8
Code = 0
Type = 0
Code = 0
동작 과정은 다음과 같다.
PC A PC B
ICMP Echo Request
----------------------------->
ICMP Echo Reply
<-----------------------------
핵심: Ping은 ICMP Echo Request와 Echo Reply를 사용한다.
IPv4 패킷이 여러 조각으로 단편화되었을 때 같은 원본 패킷에서 나온 조각인지 구분하기 위해 사용하는 필드는?
① TTL
② Identification
③ Source Port
④ Sequence Number
처음에는 ④ Sequence Number라고 생각했다.
하지만 정답은 ② Identification
같은 원본 IP 패킷에서 나뉜 단편들은 동일한 Identification 값을 가진다.
예를 들어
원본 Packet
Identification = 100
이 세 개로 나뉘었다면
Fragment 1
Identification = 100
Fragment 2
Identification = 100
Fragment 3
Identification = 100
처럼 동일한 값을 공유한다.
수신 측은 이 값을 보고
"이 조각들은 같은 원본 패킷이구나."
라고 판단할 수 있다.
TCP Sequence Number
→ TCP 데이터의 순서와 관련
IP Identification
→ 같은 원본 IP 패킷의 단편인지 구분
단편화된 IPv4 패킷에서 이 단편 뒤에 아직 다른 단편이 더 존재하는지 알려주는 것은?
① Identification
② TTL
③ MF(More Fragments)
④ Fragment Offset
정답은 ③ MF
MF는
More Fragments
의 약자이다.
MF 설정
→ 뒤에 단편이 더 있음
MF 미설정
→ 마지막 단편
IPv4 단편화에서 같이 기억해야 할 필드는 다음과 같다.
Identification
→ 같은 원본 패킷인가?
Fragment Offset
→ 원본 데이터에서 어느 위치인가?
MF
→ 뒤에 단편이 더 존재하는가?
하나의 서버나 네트워크 장비에 문제가 발생했을 때 그 하나의 장애 때문에 전체 시스템이 중단될 수 있는 지점을 무엇이라고 할까?
① Load Balancer
② SPoF
③ Active-Active
④ Health Check
처음에는 ① Load Balancer라고 선택했다.
하지만 정답은 ② SPoF
SPoF는
Single Point of Failure
의 약자이다.
하나의 구성 요소에 장애가 발생했을 때 시스템 전체 서비스에 영향을 미칠 수 있는 단일 장애 지점을 의미한다.
예를 들어
Client
|
v
Switch
|
v
Server
구조에서 스위치가 하나뿐이고 해당 스위치가 장애 나면 전체 서비스가 중단된다면 그 스위치는 SPoF가 될 수 있다.
SPoF는 물리 장비만 의미하지 않는다.
등 다양한 요소가 SPoF가 될 수 있다.
이중화 등을 이용해 하나의 장애가 전체 서비스 장애로 이어지지 않도록 구성할 수 있다.
다음과 같은 서버 구성 방식은 무엇일까?
서버 2대가 있지만 평소에는 1대만 실제 서비스를 처리하고, 나머지 1대는 대기한다.
운영 중인 서버에 장애가 발생하면 대기 서버가 서비스를 이어받는다.
① Active-Active
② Active-Standby
③ Round Robin
④ Least Connection
정답은 ② Active-Standby
Server A
Active
→ 실제 서비스 제공
Server B
Standby
→ 대기
Active 서버에 문제가 발생하면 Standby 서버가 서비스를 이어받을 수 있다.
Server A 장애
↓
Server B가 서비스 인계
반면 Active-Active는 두 서버가 평소에도 모두 서비스를 제공한다.
| 구분 | Active-Standby | Active-Active |
|---|---|---|
| 평상시 | 한 서버가 서비스 | 두 서버 모두 서비스 |
| 다른 서버 | 대기 | 함께 서비스 |
| 장애 시 | Standby가 서비스 인계 | 정상 서버가 계속 서비스 |
| 특징 | 백업 서버 확보 | 서버 자원 적극 활용 |
핵심: Active-Standby는 한 대가 동작하고 한 대가 대기한다.
다음과 같은 서버들이 있다.
Server A
현재 연결 100개
Server B
현재 연결 20개
Server C
현재 연결 60개
현재 연결 수가 가장 적은 서버로 새로운 요청을 보내는 로드 밸런싱 알고리즘은?
정답은 Least Connection
현재 연결 수가
A → 100개
B → 20개
C → 60개
이므로 가장 연결 수가 적은 Server B로 새로운 요청을 전달한다.
현재 연결 수 확인
↓
가장 연결 수가 적은 서버 선택
↓
새로운 요청 전달
Round Robin은 현재 연결 수보다는 순서를 기준으로 요청을 전달한다.
서버가 A, B, C라면
1번 요청 → A
2번 요청 → B
3번 요청 → C
4번 요청 → A
5번 요청 → B
6번 요청 → C
처럼 반복된다.
Round Robin
→ 순서 기준
Least Connection
→ 현재 연결 수 기준
| 문제 | 개념 | 핵심 복습 |
|---|---|---|
| Q4 | ARP | ARP Table의 장치들에게 요청하는 것이 아니라 ARP Request를 Broadcast |
| Q6 | Go-Back-N | 손실된 데이터만이 아니라 손실 지점 이후 데이터를 다시 전송 |
| Q8 | Slow Start | 혼잡 발생 후 천천히 보내는 개념이 아니라 작은 Window에서 시작해 빠르게 증가 |
| Q11 | HTTP 상태 코드 | 4xx는 Client Error, 5xx는 Server Error |
| Q16 | IPv4 단편화 | Identification은 같은 원본 패킷의 단편을 구분 |
| Q18 | SPoF | 하나의 장애가 전체 서비스 장애로 이어질 수 있는 단일 장애 지점 |
같은 네트워크
→ 목적지 Host의 MAC 확인
다른 네트워크
→ Default Gateway의 MAC 확인
그리고
IP
→ 최종 목적지
MAC
→ 현재 구간의 다음 전달 대상
ARP Request
→ Broadcast
ARP Reply
→ 일반적으로 Unicast
ARP Table에 유효한 정보가 있다면 해당 MAC 주소를 재사용할 수 있다.
1 → 2 → 3(X) → 4 → 5
3 → 4 → 5
3
Flow Control
→ 수신자가 감당할 수 있는가?
Congestion Control
→ 네트워크가 감당할 수 있는가?
Sliding Window는 흐름 제어와 관련되어 있다.
Slow Start는 혼잡 제어와 관련되어 있다.
2xx
→ Success
3xx
→ Redirection
4xx
→ Client Error
5xx
→ Server Error
200 OK
404 Not Found
500 Internal Server Error
SYN
↓
SYN + ACK
↓
ACK
FIN
↓
ACK
↓
FIN
↓
ACK
Ping
→ ICMP
Echo Request
Type 8 / Code 0
Echo Reply
Type 0 / Code 0
Identification
→ 같은 원본 패킷의 단편인가?
Fragment Offset
→ 원본 데이터에서 어느 위치인가?
MF
→ 뒤에 단편이 더 있는가?
특히
TCP Sequence Number
≠
IPv4 Identification
이라는 점을 기억해야 한다.
Single Point of Failure
하나의 장애가 전체 서비스 장애로 이어질 수 있는 지점이다.
Active
→ 서비스 중
Standby
→ 대기
Active
+
Active
→ 두 시스템 모두 서비스
A → B → C → A → B → C
순서대로 요청을 분산한다.
현재 연결 수가
가장 적은 서버 선택
다음 복습에서는 오늘 헷갈렸던 내용을 다시 문제로 만나면서 완전히 익혀보자.
4xx와 5xx 구분하기Identification, Fragment Offset, MF 다시 구분하기DAY 3 복습 완료! ✅
#네트워크 #혼자공부하는네트워크 #네트워크공부 #ARP #TCP #HTTP #Wireshark #ICMP #IPv4 #로드밸런싱 #정보보안 #복습