오늘도 지금까지 공부했던 네트워크 내용을 기반으로 복습을 진행했다.
이번에는 이전 복습에서 같은 문제가 반복되는 것을 줄이고, TCP, DNS, DHCP, NAT/NAPT, HTTP, IPv6, ICMP, TTL 등 여러 범위에서 문제를 골고루 풀어봤다.
총 20문제를 한 문제씩 풀고, 틀렸거나 헷갈린 내용은 바로 다시 정리했다.
TCP 연결이 완료된 상태에서 Client가 Server에게 다음과 같이 데이터를 보낸다.
Sequence Number = 1000
Payload = 500 Byte
패킷이 정상적으로 전달되었다면 Server가 보내는 ACK Number는 얼마일까?
또한 데이터가 유실된 경우 TCP에서는 어떤 방식으로 재전송이 발생할 수 있을까?
ACK는 다음 세그먼트를 의미하니까 2라고 생각했다.
패킷이 유실되면 Go-Back-N처럼 유실된 지점부터 다시 보내는 방식이라고 생각했다.
정답은
ACK Number = 1500
이다.
TCP의 Sequence Number와 ACK Number는 패킷의 순번이 아니라 Byte 단위로 동작한다.
현재
Sequence Number = 1000
Payload = 500 Byte
이므로 전송한 데이터의 Byte 범위는
1000 ~ 1499
이다.
따라서 수신 측이 다음으로 받고 싶은 Byte 번호는
1500
이므로
ACK Number = 1500
이 된다.
TCP에서 데이터가 유실된 경우에는 일정 시간 동안 ACK가 오지 않으면 재전송하는 방식이 있다.
RTO
= Retransmission Timeout
또한 동일한 ACK가 반복되는 Duplicate ACK를 통해 특정 TCP Segment가 유실되었을 가능성을 판단할 수도 있다.
일반적으로 Duplicate ACK가 일정 횟수 발생하면 Timeout을 기다리지 않고 재전송하는 Fast Retransmit이 발생할 수 있다.
정보처리기사에서 공부했던 RTO와 TCP의 RTO는 약자가 같지만 의미가 다르다.
TCP RTO
→ Retransmission Timeout
→ 재전송 타임아웃
재해복구 RTO
→ Recovery Time Objective
→ 목표 복구 시간
RPO
→ Recovery Point Objective
→ 목표 복구 시점
TCP Sequence / ACK
→ Byte 단위
ACK Number
→ 다음으로 받고 싶은 Byte 번호
PC의 네트워크 설정이 다음과 같다.
IP Address : 192.168.10.25/24
Gateway : 192.168.10.1
DNS Server : 8.8.8.8
사용자가 브라우저에서
https://example.com
에 접속하려고 한다.
DNS, ARP, Default Gateway는 어떤 순서로 사용될까?
DNS Server에게 요청할 때 Default Gateway를 통해 전달한다는 것까지는 알겠는데 이후 과정이 헷갈렸다.
PC에는 DNS Server가
8.8.8.8
로 설정되어 있다.
따라서 PC는 example.com의 IP 주소를 알아내기 위해 8.8.8.8에게 DNS Query를 보내려고 한다.
그런데 PC의 네트워크는
192.168.10.0/24
이고 DNS Server는
8.8.8.8
이다.
서로 다른 네트워크이다.
따라서 PC는 DNS 패킷을 실제로 보내기 전에 목적지가 자신의 Local Network인지 확인한다.
8.8.8.8
→ Local Network가 아님
→ Default Gateway로 전달
이때 Default Gateway의 MAC Address를 모른다면 ARP를 사용한다.
PC
↓
192.168.10.1의 MAC Address가 누구야?
↓
ARP Request
↓
Default Gateway
↓
ARP Reply
Gateway의 MAC Address를 알아낸 뒤 DNS Query를 전송한다.
이때 중요한 점은 다음과 같다.
Destination IP
→ 8.8.8.8
Destination MAC
→ Default Gateway의 MAC Address
즉,
IP Address
→ 최종 목적지
MAC Address
→ 현재 네트워크에서 다음으로 전달할 대상
DNS 응답을 통해 example.com의 IP 주소를 알아낸 뒤 실제 웹 서버와 통신을 시작한다.
다른 네트워크로 통신
→ Default Gateway 사용
Gateway MAC을 모름
→ ARP 사용
IP
→ 최종 목적지
MAC
→ 현재 Link에서의 다음 전달 대상
Web Server A와 B가 Load Balancer 뒤에서 서비스를 제공하고 있다.
그런데 Web Server A가 장애가 발생했는데도 Load Balancer가 계속 A로 요청을 보내고 있다.
이 문제를 방지하기 위해 사용하는 기능은 무엇일까?
Load Balancer라고 생각했다.
트래픽을 여러 서버로 분산해서 성능을 향상시키는 역할이라고 생각했다.
정답은
Health Check
이다.
Load Balancer는 여러 서버로 Traffic을 분산하는 장비 또는 기능이고,
Health Check는 Load Balancer가 Backend Server의 상태를 주기적으로 확인하는 기능이다.
Load Balancer
↓
Server A 상태 확인
Server B 상태 확인
↓
정상 Server에게만 요청 전달
만약 Server A가 응답하지 않는다면
Server A
→ Unhealthy
Server B
→ Healthy
로 판단하고 A에게 요청을 보내지 않을 수 있다.
Load Balancer
→ Traffic 분산
Health Check
→ Server 상태 확인
→ 장애 Server를 Traffic 대상에서 제외
RIP, OSPF, BGP는 각각 어디에서 사용되는 Routing Protocol일까?
그리고 RIP과 OSPF 중 Link State 방식을 사용하는 것은 무엇일까?
RIP
→ Routing Information Protocol
→ IGP
→ Distance Vector
→ Hop Count 사용
OSPF
→ Open Shortest Path First
→ IGP
→ Link State
BGP
→ Border Gateway Protocol
→ 서로 다른 AS 간 사용
전체적으로 맞았다.
RIP과 OSPF는 대표적인 IGP이다.
IGP
= Interior Gateway Protocol
하나의 AS 내부에서 Routing 정보를 주고받을 때 사용한다.
RIP
→ Distance Vector
→ Hop Count를 주요 Metric으로 사용
OSPF
→ Link State
→ 네트워크 전체의 Link 정보를 기반으로 경로 계산
BGP
→ Border Gateway Protocol
대표적으로 서로 다른 AS 간 Routing 정보를 교환할 때 사용한다.
eBGP
→ 서로 다른 AS 간
iBGP
→ 같은 AS 내부에서 BGP Route 전달
따라서 BGP가 무조건 서로 다른 AS 사이에서만 사용되는 것은 아니다.
RIP
→ IGP
→ Distance Vector
OSPF
→ IGP
→ Link State
BGP
→ AS 간 Routing에 대표적으로 사용
새로운 PC가 네트워크에 연결되었지만 아직 IP Address가 없다.
DHCP를 통해 IP Address를 할당받는 과정인 DORA를 설명해보자.
Discover
→ DHCP가 사용할 IP를 찾는 과정
Offer
→ IP를 제안
Request
→ 제안받은 IP를 사용하겠다고 요청
ACK
→ 최종 승인
Offer, Request, ACK의 개념은 맞았지만 Discover의 주체가 반대였다.
정확한 과정은 다음과 같다.
D
Discover
O
Offer
R
Request
A
ACK
DHCP Client가 DHCP Server를 찾는다.
Client
→ "DHCP Server 있나요?"
아직 IP Address가 없기 때문에 Broadcast를 이용한다.
DHCP Server가 사용할 수 있는 IP Address를 제안한다.
Server
→ "이 IP 사용하는 건 어때?"
Client가 제안받은 IP Address를 사용하겠다고 요청한다.
Client
→ "그 IP를 사용하겠습니다."
DHCP Server가 최종적으로 사용을 승인한다.
Server
→ "확인. 사용해."
Discover
→ Client가 DHCP Server를 찾음
Offer
→ Server가 IP 제안
Request
→ Client가 IP 사용 요청
ACK
→ Server가 최종 승인
내부 네트워크에 다음 두 PC가 존재한다.
PC A
192.168.0.10
PC B
192.168.0.20
두 PC가 하나의 Public IP Address를 공유해 동시에 인터넷에 접속한다.
Public IP
203.0.113.10
Router는 돌아오는 Traffic이 PC A의 것인지 PC B의 것인지 어떻게 구분할까?
Port Forwarding이라고 생각했다.
정답은
NAPT
이다.
NAPT
= Network Address Port Translation
NAPT는 IP Address뿐만 아니라 Port Number까지 함께 변환하고 기록한다.
예를 들어
192.168.0.10:50001
→ 203.0.113.10:40001
192.168.0.20:50001
→ 203.0.113.10:40002
처럼 하나의 Public IP Address를 사용하더라도 Port Number를 다르게 사용한다.
따라서 응답이
203.0.113.10:40001
로 들어오면 Router는 NAT/NAPT Table을 확인해서
192.168.0.10:50001
로 전달할 수 있다.
Port Forwarding은 외부에서 내부 Host로 통신을 시작할 때 특정 Port를 내부 Host와 연결해 두는 방식이다.
예를 들어
203.0.113.10:8080
→ 192.168.0.10:80
처럼 설정할 수 있다.
NAPT
→ 여러 Private IP가 하나의 Public IP 공유
→ Port Number로 각각의 Connection 구분
Port Forwarding
→ 특정 외부 Port를 내부 Host:Port와 연결
다음 두 상황의 HTTP Status Code를 구분해보자.
A.
Reverse Proxy가 Backend Server에 연결했지만
정상적인 응답을 받지 못함
B.
Backend Server에게 요청을 전달했지만
정해진 시간 안에 응답이 오지 않음
A
→ 502
B
→ 504
정답이다.
Gateway 또는 Proxy가 Upstream Server로부터 정상적인 응답을 받지 못한 경우이다.
Client
↓
Reverse Proxy
↓
Backend Server
Backend 응답 이상
→ 502 Bad Gateway
Upstream Server로부터 정해진 시간 안에 응답이 오지 않은 경우이다.
Backend Server
→ 응답 지연
→ Timeout
504 Gateway Timeout
502
→ Backend 응답 자체에 문제
504
→ Backend 응답 Timeout
IPv4 단편화와 관련된 다음 Header Field의 역할을 설명해보자.
Identification
Fragment Offset
MF
DF
Identification
→ 같은 원본 Packet인지 확인
Fragment Offset
→ 원본 Packet에서의 위치
MF
→ 뒤에 Fragment가 더 존재하는지 확인
DF
→ Fragmentation 허용 여부
정답이다.
같은 원본 IP Packet에서 만들어진 Fragment인지 식별할 때 사용한다.
같은 Identification
→ 같은 원본 Packet의 Fragment
현재 Fragment가 원래 데이터에서 어느 위치에 있었는지 나타낸다.
MF
= More Fragments
MF = 1
→ 뒤에 Fragment가 더 있음
MF = 0
→ 마지막 Fragment
DF
= Don't Fragment
DF = 1
→ Fragmentation 금지
DF = 0
→ Fragmentation 가능
Identification
→ 같은 원본 Packet 식별
Fragment Offset
→ 원본에서의 위치
MF
→ 뒤에 Fragment가 더 있는가?
DF
→ Fragmentation을 허용하는가?
다음 서비스에 TCP와 UDP 중 어떤 Protocol이 일반적으로 더 적합할까?
A. 파일 다운로드
B. 실시간 음성 통화
C. 웹 페이지 전송
D. 온라인 게임의 실시간 위치 정보
A
→ TCP
B
→ UDP
C
→ TCP
D
→ UDP
파일 다운로드와 웹 페이지는 신뢰성이 중요하고,
실시간 음성이나 게임은 빠른 응답이 더 중요하다고 생각했다.
정답이다.
Connection 설정
재전송
순서 보장
Flow Control
Congestion Control
등을 제공한다.
따라서 일반적으로 데이터의 정확한 전달이 중요한 경우에 적합하다.
Connection 설정 없음
기본 재전송 없음
순서 보장 없음
Overhead가 상대적으로 작음
따라서 일부 데이터가 유실되더라도 실시간성이 중요한 서비스에 활용할 수 있다.
TCP
→ 신뢰성 중심
UDP
→ 실시간성 / 낮은 Overhead 중심
다음 조건을 만족하는 Wireshark Display Filter를 작성해보자.
Source IP
192.168.10.20
Destination TCP Port
443
ip.src == 192.168.10.20 && tcp.dstport == 443
정답이다.
ip.src
→ Source IP Address
tcp.dstport
→ TCP Destination Port
&&
→ AND
따라서
ip.src == 192.168.10.20 && tcp.dstport == 443
는
Source IP = 192.168.10.20
그리고
Destination TCP Port = 443
인 Packet만 표시한다.
Server에 다음과 같은 사용자 정보가 저장되어 있다.
{
"name": "pingu",
"age": 28,
"job": "engineer"
}
여기서 age 값만 29로 변경하려고 한다.
PUT과 PATCH 중 어떤 Method가 더 적절할까?
PATCH
PUT은 전체 Resource를 변경하는 것이라고 기억했다.
정답이다.
PUT
→ Resource 전체 수정 / 대체
PATCH
→ Resource 일부 수정
현재는
age
값 하나만 변경하려고 하기 때문에 PATCH가 더 적절하다.
예를 들면
PATCH /users/1
{
"age": 29
}
와 같은 방식이다.
PUT
→ 전체
PATCH
→ 일부
IPv6 주소에서 ::는 왜 사용할까?
또 하나의 IPv6 주소에서 ::를 두 번 사용할 수 없는 이유는 무엇일까?
잘 모르겠다.
IPv6 Address는 128bit 크기이며 일반적으로 16진수 4자리씩 8개의 Group으로 표현한다.
예를 들어
2001:0db8:0000:0000:0000:ff00:0042:8329
와 같이 표현할 수 있다.
주소가 길기 때문에 연속된 0000 Group을 ::로 줄여서 표현할 수 있다.
예를 들어
26f7:f750:2ffb:53df:0000:0000:0000:1001
은
26f7:f750:2ffb:53df::1001
로 표현할 수 있다.
그런데 ::는 하나의 IPv6 주소에서 한 번만 사용할 수 있다.
예를 들어
2001::1234::5678
처럼 두 번 사용하면
첫 번째 ::가 몇 개의 0000 Group을 의미하는지,
두 번째 ::가 몇 개의 0000 Group을 의미하는지 알 수 없기 때문이다.
::
→ 연속된 0000 Group 생략
하나의 IPv6 Address에서 한 번만 사용
→ 생략된 Group의 수를 정확히 판단하기 위해
HTTP의 Stateless는 무슨 의미일까?
또 HTTP가 Stateless인데도 웹사이트에서 로그인 상태를 유지할 수 있는 이유는 무엇일까?
Stateless는 상태가 지속적이지 않다는 의미이다.
로그인 상태를 유지하려면 Cache를 사용하는 것이라고 생각했다.
Stateless의 의미는 맞았다.
HTTP는 기본적으로 각각의 Request를 독립적으로 처리한다.
Request 1
→ 독립적으로 처리
Request 2
→ 독립적으로 처리
Request 3
→ 독립적으로 처리
즉 HTTP 자체는 이전 Request의 상태를 기본적으로 기억하지 않는다.
하지만 실제 Web Service에서는 로그인 상태와 같이 사용자의 상태를 유지해야 하는 경우가 있다.
이때 대표적으로
Cookie
Session
등을 사용한다.
Cache는 로그인 상태를 유지하기 위한 핵심 기술이라기보다 Resource를 재사용하여 성능을 향상하거나 Server 요청을 줄이는 목적에 가깝다.
Stateless
→ HTTP 자체가 이전 Request의 상태를 기억하지 않음
로그인 상태 유지
→ Cookie / Session 등을 사용
다음 설명에 해당하는 DNS Record를 매칭해보자.
1. Domain Name을 IPv4 Address와 연결
2. Domain Name을 IPv6 Address와 연결
3. Mail Server 정보 지정
4. 다른 Domain Name의 별칭으로 연결
1. A
2. AAAA
3. MX
4. CNAME
모두 정답이다.
A
→ IPv4 Address
AAAA
→ IPv6 Address
MX
→ Mail Exchange
→ Mail Server
CNAME
→ Canonical Name
→ Domain Alias
A
→ IPv4
AAAA
→ IPv6
MX
→ Mail Server
CNAME
→ Alias
TCP에는 Flow Control과 Congestion Control이 있다.
둘의 차이는 무엇일까?
Flow Control
→ 수신자가 감당 가능한가?
Congestion Control
→ 네트워크가 감당 가능한가?
정답이다.
수신 Host의 처리 능력을 고려한다.
송신자가 너무 빠르게 데이터를 보내면 수신 Buffer가 감당하지 못할 수 있다.
따라서
"수신자가 이 정도의 Data를 받을 수 있는가?"
를 기준으로 전송량을 조절한다.
Network 전체의 혼잡 상태를 고려한다.
"현재 Network가 이 정도의 Traffic을 감당할 수 있는가?"
를 판단하여 전송량을 조절한다.
Flow Control
→ Receiver
Congestion Control
→ Network
다음 상황에서 어떤 Proxy가 사용되는지 구분해보자.
A.
회사 직원들이 Internet에 접속할 때
Proxy Server가 직원들을 대신하여 외부 Web Server에 요청
B.
외부 사용자의 요청을 Proxy Server가 먼저 받고
내부 Web Server에게 전달
A
→ Forward Proxy
B
→ Reverse Proxy
정답이다.
Client를 대신한다.
Client
↓
Forward Proxy
↓
Internet Server
Client의 Internet 접근 제어, 접속 기록, Cache 등에 사용할 수 있다.
Server를 대신한다.
Client
↓
Reverse Proxy
↓
Internal Server
외부 Client에게 내부 Server의 구조를 직접 노출하지 않고 요청을 전달할 수 있다.
Load Balancing이나 Cache 등에 활용할 수도 있다.
Forward Proxy
→ Client를 대신
Reverse Proxy
→ Server를 대신
TCP Connection을 설정하는 순서를 작성해보자.
Client Server
? -------------------->
<-------------------- ?
? -------------------->
그리고 두 번째 단계에서 SYN과 ACK를 함께 보내는 이유는 무엇일까?
SYN
SYN + ACK
ACK
SYN + ACK에서 ACK는 Client가 보낸 SYN을 잘 받았다는 의미이고,
Server도 Client에게 Connection을 설정하기 위해 SYN을 보낸다고 생각했다.
정답이다.
TCP의 3-Way Handshake는
Client Server
SYN
---------------------->
SYN + ACK
<----------------------
ACK
---------------------->
TCP Connection 완료
의 순서로 진행된다.
Client가 Server에게 Connection을 요청한다.
"TCP 연결하고 싶어."
ACK는
Client의 SYN을 정상적으로 받았다.
는 의미이다.
SYN은
Server도 Connection 설정에 참여하고
자신의 Sequence Number를 동기화한다.
는 의미이다.
Client가 Server의 SYN을 정상적으로 받았음을 알려준다.
TCP 3-Way Handshake
SYN
→ SYN + ACK
→ ACK
Wireshark에서 HTTP Packet을 확인했을 때 다음과 같은 구조가 보였다.
Ethernet II
→ IPv4
→ TCP
→ HTTP
이 구조는 무엇을 의미할까?
그리고 Encapsulation이란 무엇일까?
캡슐화는 하위 계층부터 상위 계층까지 Header에 Packet을 담아 합쳐서 전송하는 과정이라고 생각했다.
캡슐화의 개념은 알고 있었지만 방향이 반대였다.
송신 측에서는
상위 계층
↓
하위 계층
방향으로 데이터가 내려간다.
예를 들어 HTTP Data를 전송한다면
HTTP Data
↓
TCP Header 추가
↓
IP Header 추가
↓
Ethernet Header 추가
순서로 Encapsulation이 이루어진다.
따라서 Wireshark의
Ethernet II
→ IPv4
→ TCP
→ HTTP
구조는
HTTP Data가 TCP에 포함되고,
TCP Segment가 IP Packet에 포함되고,
IP Packet이 Ethernet Frame에 포함되어 있다는 것을 의미한다.
수신 측에서는 반대로
Ethernet
→ IP
→ TCP
→ HTTP
순서로 Header를 확인하고 제거한다.
이를
Decapsulation
이라고 한다.
송신
→ 상위 계층 → 하위 계층
→ Encapsulation
수신
→ 하위 계층 → 상위 계층
→ Decapsulation
PC가 다른 Network의 Server로 Packet을 보내려고 한다.
그런데 중간 Router가 목적지까지 갈 수 있는 Route를 찾지 못했다.
Router가 송신자에게
"목적지에 도달할 수 없습니다."
라는 정보를 알려주기 위해 사용하는 Protocol은 무엇일까?
또 이 Protocol이 IP 통신의 신뢰성을 보장해줄까?
ICMP
라고 답했고,
ICMP가 신뢰성을 보장한다고 생각했다.
Protocol은 맞다.
ICMP
= Internet Control Message Protocol
ICMP는 IP Packet의 전송 과정에서 발생한 문제를 알려주거나 Network 상태를 진단하는 데 사용한다.
대표적으로
Destination Unreachable
같은 오류 메시지를 전달할 수 있다.
하지만 ICMP가 IP 통신의 신뢰성을 보장하는 것은 아니다.
ICMP 자체도 반드시 상대방에게 도착한다고 보장되는 Protocol은 아니다.
따라서 ICMP의 역할은
오류 보고
네트워크 진단
제어 정보 전달
로 이해하는 것이 좋다.
ICMP
→ IP 통신 과정의 오류 보고 및 진단
신뢰성 보장
→ X
IP Packet의 TTL 값이 다음과 같다.
TTL = 3
Router를 통과할 때마다 TTL이 1씩 감소한다.
1. TTL = 0
2. Packet 폐기
3. 통신 지연 문제 방지?
라고 생각했다.
1번과 2번은 맞았다.
TTL 3
↓
Router
TTL 2
↓
Router
TTL 1
↓
Router
TTL 0
↓
Packet 폐기
TTL은
Time To Live
의 약자이다.
Router를 하나 통과할 때마다 TTL 값이 감소하고,
TTL이 0이 되면 해당 Router는 Packet을 폐기한다.
TTL이 존재하는 가장 중요한 이유는
Routing Loop
가 발생했을 때 Packet이 Network 안에서 무한히 돌아다니는 것을 방지하기 위해서이다.
예를 들어 Routing Table이 잘못 설정되어
Router A
→ Router B
→ Router C
→ Router A
→ Router B
→ ...
처럼 Packet이 계속 순환할 수 있다.
TTL이 없다면 Packet이 계속 Network를 돌아다니면서 불필요한 Traffic을 발생시킬 수 있다.
TTL을 사용하면 일정한 Hop 수를 초과한 Packet은 자동으로 폐기된다.
TTL
= Time To Live
Router를 지날 때마다
→ 1 감소
TTL = 0
→ Packet 폐기
목적
→ Routing Loop로 인한 Packet 무한 순환 방지
오늘은 단순히 정답을 맞히는 것보다 기존에 애매하게 알고 있던 개념들을 다시 정리하는 데 의미가 있었다.
처음에는 ACK Number를 다음 Segment의 번호처럼 생각했다.
하지만 TCP의 Sequence Number와 ACK Number는 Byte 단위이다.
Sequence = 1000
Payload = 500 Byte
전송 Byte
1000 ~ 1499
다음으로 받을 Byte
1500
ACK = 1500
약자는 같지만 의미가 전혀 다르다.
TCP RTO
→ Retransmission Timeout
재해복구 RTO
→ Recovery Time Objective
RPO
→ Recovery Point Objective
다른 Network에 있는 Server에게 통신한다고 해서 해당 Server의 MAC Address를 ARP로 알아내는 것이 아니다.
다른 Network 목적지
↓
Default Gateway로 전달
↓
Gateway MAC Address를 ARP로 확인
따라서
Destination IP
→ 최종 Server
Destination MAC
→ Default Gateway
가 될 수 있다.
Load Balancer
→ Traffic 분산
Health Check
→ Server 상태 확인
Load Balancer가 있다고 해서 장애 Server를 자동으로 정확하게 구분하는 것이 아니라 Backend 상태를 확인하는 Health Check가 중요하다.
Discover는 DHCP Server가 IP를 찾는 과정이 아니다.
Discover
→ DHCP Client가 DHCP Server를 찾음
전체 과정은
Discover
→ Offer
→ Request
→ ACK
이다.
이번 복습에서 가장 확실히 구분해야 할 부분 중 하나였다.
NAPT
→ 내부 여러 Host가 하나의 Public IP 공유
→ Port Number까지 변환하여 Connection 구분
Port Forwarding
→ 외부의 특정 IP:Port를 내부 Host:Port와 연결
IPv6에서는 연속된 0000 Group을
::
로 줄여서 표현할 수 있다.
하지만 한 Address에서 한 번만 사용할 수 있다.
이유
→ 두 번 사용하면 각각 몇 개의 0000 Group이 생략된 것인지 알 수 없음
Stateless
→ HTTP 자체는 이전 요청의 상태를 기억하지 않음
로그인 상태 유지에는 Cache가 아니라 대표적으로
Cookie
Session
등을 사용한다.
처음에는 하위 계층에서 상위 계층으로 올라가면서 Header가 추가된다고 생각했다.
정확히는 송신 측에서
상위 계층
↓
하위 계층
으로 내려가면서 Header가 추가된다.
HTTP
↓
TCP
↓
IP
↓
Ethernet
수신 측에서는 반대로 Header를 제거한다.
ICMP
→ 오류 보고
→ Network 진단
→ 제어 정보 전달
IP 통신의 성공적인 전달 자체를 보장하는 Protocol은 아니다.
TTL은 단순히 통신 지연을 막기 위한 값이 아니다.
가장 중요한 목적은
Routing Loop에 의해
Packet이 Network에서 무한히 순환하는 것을 방지
하는 것이다.
Router 통과
→ TTL 감소
TTL = 0
→ Packet 폐기
TCP ACK
→ 다음으로 받고 싶은 Byte Number
TCP RTO
→ Retransmission Timeout
다른 Network 통신
→ Default Gateway 사용
→ Gateway MAC을 ARP로 확인
Health Check
→ Backend Server 상태 확인
RIP
→ Distance Vector
OSPF
→ Link State
BGP
→ AS 간 Routing에 대표적으로 사용
DHCP
→ Discover → Offer → Request → ACK
NAPT
→ IP + Port 변환
→ 하나의 Public IP를 여러 Private IP가 공유
502
→ Bad Gateway
504
→ Gateway Timeout
IPv4 Fragmentation
→ Identification / Fragment Offset / MF / DF
TCP
→ 신뢰성 중심
UDP
→ 실시간성 및 낮은 Overhead 중심
Wireshark
→ ip.src
→ tcp.dstport
PUT
→ 전체 대체
PATCH
→ 일부 수정
IPv6 ::
→ 연속된 0000 Group 생략
→ 한 Address에서 한 번만 사용
HTTP
→ Stateless
로그인 상태 유지
→ Cookie / Session
DNS Record
A → IPv4
AAAA → IPv6
MX → Mail Server
CNAME → Alias
Flow Control
→ Receiver 상태 고려
Congestion Control
→ Network 혼잡 상태 고려
Forward Proxy
→ Client를 대신
Reverse Proxy
→ Server를 대신
TCP 3-Way Handshake
→ SYN → SYN+ACK → ACK
Encapsulation
→ 상위 계층 → 하위 계층
→ Header 추가
Decapsulation
→ 하위 계층 → 상위 계층
→ Header 제거
ICMP
→ 오류 보고 및 Network 진단
→ 신뢰성 보장 X
TTL
→ Router 통과 시 감소
→ 0이면 Packet 폐기
→ Routing Loop에 의한 무한 순환 방지
총 20문제를 풀었다.
전체적으로 TCP/UDP, Routing Protocol, DNS Record, HTTP Method, Proxy 등의 개념은 잘 기억하고 있었다.
반면 다음 내용은 다시 복습할 필요가 있다.
TCP Sequence / ACK의 Byte 단위 계산
DNS + ARP + Default Gateway의 실제 동작 순서
Health Check
NAPT와 Port Forwarding 차이
IPv6 주소 축약
HTTP Stateless와 Cookie / Session
Encapsulation 방향
ICMP의 역할
TTL의 존재 이유
특히 단순 용어 암기보다
"실제로 Packet이 어떤 순서로 이동하는가?"
를 생각하면서 공부해야 할 것 같다.
네트워크 개념들이 하나씩 연결되기 시작하면서 이전에 따로 외웠던
ARP
IP
MAC
Gateway
DNS
TCP
Routing
등이 실제 통신 과정에서 어떻게 같이 사용되는지 조금씩 이해되고 있다.
DAY8 복습에서도 단순히 같은 문제를 반복하기보다는 지금까지 공부한 전체 범위에서 다양한 형태의 문제를 풀어볼 예정이다.