CS & 알고리즘 스터디: 여덟 번째 스터디
여덟 번째 스터디
마지막 스터디이다. 개인적인 일정과 스터디원들의 일정이 겹쳐 2주간 진행을 못했더니 기존 내용들을 복습할 시간을 가져 이번 스터디 때 모든 내용을 점검하는 시간을 가지면 좋을 것 같다. 마지막인 기념으로 문제풀이는 넘어가고 키워드만 공부하기로 했다.
키워드
IP
Q: IPv6는 IPv4의 주소 고갈 문제를 해결하기 위해 만들어졌지만, 아직도 수많은 기기가 IPv4를 사용하고 있습니다. 고갈 문제를 어떻게 해결할 수 있을까요?
A:
IPv4 주소 고갈 문제를 해결하기 위해서는 NAT, IPv6 전환, 주소 재사용 및 최적화, 그리고 새로운 기술의 도입 등 다양한 방법을 조합하여 사용하는 것이 필요하다. 궁극적인 해결책은 IPv6로의 완전한 전환이지만, 그 과정에서 다양한 보조적인 방법들이 여전히 중요한 역할을 하고 있다.
Q: 수많은 사람들이 유동 IP를 사용하고 있지만, 수많은 공유기에서는 고정 주소를 제공하는 기능이 이미 존재합니다. 어떻게 가능한 걸까요?
A:
외부 인터넷에서 제공하는 유동 IP는 공공 네트워크에서의 주소이며, 공유기에서 제공하는 고정 IP는 사설 네트워크에서의 주소이다. 공유기는 NAT를 통해 이 두 네트워크 계층 간의 연결을 관리하며, 내부 네트워크의 기기들이 고정 IP를 사용할 수 있도록 한다. 이러한 방식으로 외부에서는 유동 IP를, 내부에서는 고정 IP를 사용하는 것이 가능합니다.
Q: IP가 송신자와 수신자를 정확하게 전송되는 것을 보장해 주나요?
A:
IP는 데이터 패킷을 목적지까지 전송하기 위한 경로를 지정하고 라우팅하는 기능을 제공하지만, 데이터의 정확한 전달을 보장하지는 않는다. 데이터의 신뢰성을 보장하기 위해서는 TCP와 같은 상위 계층의 프로토콜이 필요합니다. 따라서, IP는 네트워크에서 데이터 전송의 “길을 만드는” 역할을 하지만, 그 길을 따라 데이터가 정확히 도착하는지는 TCP 같은 프로토콜이 관리한다.
OSI 7계층
Q: Transport Layer와, Network Layer의 차이에 대해 설명해 주세요.
A:
Network Layer는 네트워크 상에서 데이터를 목적지까지 전달하는 경로를 결정하고, 패킷을 라우팅하는 역할을 한다. 반면, Transport Layer는 종단 간 데이터 전송의 신뢰성을 보장하고, 송신자와 수신자 간의 통신을 관리하며, 데이터의 정확한 전달을 책임진다. 이 두 계층은 서로 다른 역할을 담당하지만, 함께 작동하여 인터넷과 네트워크 통신을 원활하게 수행한다.
Q: 각 Layer는 패킷을 어떻게 명칭하나요? 예를 들어, Transport Layer의 경우 Segment라 부릅니다. A:
물리 계층: 비트
데이터 링크 계층: 프레임
네트워크 계층: 패킷
전송 계층: 세그먼트/데이터그램
세션 계층: 메시지
표현 계층: 메시지
응용 계층: 메시지
3-Way Handshake
Q: 3-Way Handshake에 대해서 설명해주세요. A:
3 Way Handshake는 TCP에서 신뢰성 있는 연결을 설정하기 위해 사용되는 프로세스로, 클라이언트와 서버 간의 연결을 시작할 때 양쪽이 서로를 인식하며 데이터 전송을 준비하는 데 사용된다. 처음에 클라이언트가 서버로 SYN 플래그가 설정된 세그먼트를 보내 연결을 시작하려고 한다는 것을 서버로 알려준다. 이후 서버에서 SYN-ACK 플래그가 설정된 세그먼트를 클라이언트로 보내어 SYN 세그먼트가 확인되었다는 것을 전송한다. 마지막으로, 클라이언트에서 서버의 SYN-ACK 세그먼트를 확인한 후 ACK 플래그가 설정된 세그먼트를 서버로 보낸다.
Q: ACK, SYN 같은 정보는 어떻게 전달하는 것 일까요? A:
SYN, ACK같은 정보는 TCP헤더의 제어 플래그 필드를 통해 전달된다.
DNS
Q: DNS에 대해 설명해주세요.
A:
DNS는 인터넷에서 도메인 이름을 IP주소로 변환하는 시스템이다. IP주소의 형태를 보면 사람이 기억하기 어려운 숫자 형태로 되어있기 때문에 도메인 이름을 사용하여 사이트에 접속하는데, DNS은 이 도메인 이름을 IP주소로 변환을 해준다.
Q: DNS는 몇 계층 프로토콜이며, UDP와 TCP중 어떤 것을 사용하나요?
A:
DNS는 애플리케이션 계층 프로토콜이며, UDP와 TCP 모두 사용한다. 기본적으로 UDP를 사용하며, 이는 간단한 쿼리와 빠른 응답 처리를 사용하기 위함이며, DNS의 쿼리는 짧기 때문에 UDP로 충분히 처리가 가능하다.
Stateless와 Connectionless
Q: Stateless와 Connectionless에 대해 설명해주세요.
A:
Stateless: 서버가 클라이언트의 이전 상호작용 상태를 유지하지 않는 형태의 시스템이다. 클라이언트의 모든 요청을 독립적인 요청으로 처리하며, 이전 요청의 상태를 기억하지 않는다. (HTTP)
Connectionless: 클라이언트와 서버가 데이터를 주고받을 때, 지속적인 연결을 유지하지 않고 각 패킷을 독립적으로 전송하는 통신 방식이다. 이는 낮은 오버헤드를 가지기 때문에 높은 트래픽을 처리하는 데에 유리하다. (UDP)
Q: 왜 HTTP는 Stateless 구조를 채택하고 있을까요?
A:
HTTP가 Stateless 구조를 채택한 이유는 확장성, 간단한 설계, 성능 효율성 등의 이유 때문이다.
Stateless 구조에서는 서버가 클라이언트의 상태를 저장할 필요가 없기 때문에 서버 간의 부하를 분산하기에 용이하다. 추가적으로, 클라이언트가 모든 상태 정보를 요청에 포함하여 보내기 때문에 클라이언트가 자신의 상태를 주도적으로 관리할 수 있으며 서버의 부담을 줄일 수 있다.