CS 면접대비 - 네트워크
OSI 7계층
- “OSI 7계층을 설명해주세요”
- Physical Layer - 케이블, 허브 : 전기신호 전송
- Data Link Layer - 브릿지, 스위치 : MAC주소 부여!
- MAC 주소란?
- 하드웨어 장치의 네트워크 식별자 - 주민등록번호이며 변경되지 않음
- MAC 주소란?
- Network Layer - 라우터, IP : 라우터를 통해 IP 주소를 지정
- IP 주소란?
- 컴퓨터 네트워크에 할당된 논리적 숫자 주소
- IP 주소만으로 통신이 가능한가요?
- 그렇지 않습니다. 로컬 네트워크 내부에서 어떤 하드웨어와 통신하는지 알기 위해서는 MAC주소를 알아야 합니다.
- IP 주소만으로 통신이 가능한가요?
- 컴퓨터 네트워크에 할당된 논리적 숫자 주소
- 라우터의 역할은?
- 네트워크 자체를 연결시켜주고 최적화된 경로로 통신이 가능하게끔 하는 네트워크 장치
- IP 주소란?
- Transport Layer - TCP와 UDP 프로토콜을 통해 세그먼트를 전달
- Session Layer - API, Socket : TCP/IP 세션의 생성 및 소멸
- Presentation Layer - JPEG, MPEG: 데이터 표현 및 암호화
- Application - HTTP, FTP, DNS : 응용 프로세스와 직접 관계하여 서비스 수행
- “왜 OSI 7계층으로 나누는 걸까요?”
- 관심사의 분리 때문입니다. 문제가 발생했을 때 서로 독립적이여야 해결이 간단합니다.
Multiplexing과 Demultiplexing이 무엇인가요?
- L4 레이어에서 담당하는 역할로, Multiplexing이란 여러개의 어플리케이션의 소켓으로부터 나오는 요청들에 대해서 일종의 이름표인 Transport Header를 붙혀주는것입니다.
- Demultiplexing은 반대로 Transport Header를 보고 적절한 소켓으로 전달해주는것을 의미합니다.
Stateless한것과 Connectionless 한것의 차이는 무엇인가요?
- Stateless하다는것은 이전 요청에 영향을 받지 않고 매번 독립적이게 취급한다는 의미입니다.
- Connectionless 하다는것은 TCP처럼 커넥션이 유지되는것이 아닌, 패킷이 독립적으로 취급되는 UDP와 같은 프로토콜을 의미합니다.
TCP가 Connection 기반 프로토콜이라면, 웹서버는 요청마다 새로운 소켓을 생성할까요?
- 링크 대체
TCP 프로토콜에 대해서 설명해주세요
- TCP 프로토콜은 Transport Layer의 신뢰적인 연결방식 입니다.
- 전송속도가 너무 빠를경우 수신측이 받아들이지 못해 손실이 나는것을 대비한 흐름제어
- 라우터의 데이터 병목 등으로 인해 처리할 수 없어 손실이 나는것을 대비한 혼잡제어
UDP 프로토콜에 대해서 설명해주세요
- UDP 프로토콜이란 비연결성, 신뢰성 없는 전송 프로토콜입니다.
각각의 데이터 패킷은 독립적으로 취급되며, 성공 또는 실패 여부와 관계없이 전송을 시도합니다.
TCP의 커넥션 수립 과정을 설명해주세요
- TCP의 경우, 3-way handshake를 통해서 커넥션을 수립합니다. 과정은 아래와 같습니다.
- 클라이언트 -> 서버 : 커넥션 신청을 하기 위해서 SYN 패킷을 전송합니다 (seq=x)
- 서버 -> 클라이언트 : 커넥션 신청을 받았다는것을 확인시켜주기 위해 ACK(x+1) 과 SYN(y) 를 전송합니다
- 클라이언트 -> 서버 : 커넥션을 수립하기 위해서 ACK(y+1) 패킷을 전송합니다.
- 4-way handshake는 커넥션을 종료하기 위해서 사용됩니다.
- 클라이언트 -> 서버 : FIN 플래그를 전송합니다.
- 서버 -> 클라이언트 : FIN에 대한 ACK를 전송합니다.
- 서버 -> 클라이언트 : 데이터를 모두 받았으므로 FIN을 전송합니다
- 클라이언트 -> 서버 : FIN 에 대한 ACK를 전송합니다.
Checksum은 무엇인가요?
- 전달된 네트워크 Segment에 문제가 있는지 검증하기 위해서 모든 Segment Header의 값을 더한것을 넣어둡니다.
- 무엇을 더하는건가요?
- CRC의 경우 내용을 이진수로 취급하여 모두 더하고 상수로 나눈 뒤 사용합니다.
- Summation의 경우 각 바이트를 정수형으로 취급하여 모두 더해주고 나머지 연산의 결과값을 사용합니다.
- TCP와 UDP중 어떤 프로토콜이 checksum을 사용하나요?
- 둘 다 사용합니다.
- 체크섬으로 오류를 복원할 수 있나요?
- 불가능합니다. 오류의 완벽한 검출 또한 어렵습니다.
- 무엇을 더하는건가요?
주소창에 naver.com 을 입력하면 일어나는 일을 설명해주세요
네트워크 통신을 시도하는 것입니다. naver.com 에대한 IP 주소를 찾는것이 첫번째 목적입니다.
- 윈도우의 경우, hosts 파일을 먼저 참조합니다. 만약 명시적으로 도메인에 대한 매핑이 있다면 즉시 사용합니다.
- 없다면 이전에 접속한 이력이 있는지 RAM의 DNS 캐시를 참조합니다.
- 없다면 공유기를 통해서 ISP를 거쳐 DNS lookup을 시도합니다.
- 받아온 IP 주소를 보고 로컬 네트워크를 살펴봅니다. 대역대가 다르기 때문에 다른 네트워크로 보내기 위해 공유기를 찾아야 합니다.
- 공유기를 찾기 위해서 ARP를 합니다. 즉 브로드캐스팅을 하여 공유기의 MAC주소를 받아옵니다.
- 공유기에게 IP 주소로 메시지를 전달하라는 명령을 내립니다.
- 공유기는 최적의 경로를 찾아서 다음 라우터로 ARP 과정을 반복하며 메시지를 전송합니다.
- 받아온 IP 주소를 통해서 HTTP 프로토콜을 사용하기 위해서 TCP/IP 연결을 수립합니다.
- 3-way handshake
- 데이터 전송
- 4-way handshake
- 다운로드한 CSS/HTML/JS 파일들을 다운로드하고 브라우저에서 렌더링합니다.
- HTML/CSS/JS 파일들을 디스크에 Caching 되며 다시 접속할 경우 캐시를 참조합니다.
공개키와 대칭키의 차이는 무엇인가요?
- 공개키는 암호화하기위해서 사용한 키와 복호화하기위해서 사용하는 키가 동일한 것을 의미합니다.
- 대칭키는 암호화하기위해 사용한 키와 복호화하기 위해 사용하는 키가 다른것을 의미합니다.
HTTPS는 어떤 키를 사용하나요?
- 대칭키와 비대칭키를 둘다 사용합니다.
TLS/SSL Handshake 과정을 설명해주세요
- TCP 연결을 수립합니다.
- C->S : Client Hello
- C<-S : Server Hello + CA 인증서
- C : CA 인증서의 유효성 검증
- C->S : 자신이 생성한 랜덤 대칭키를 인증서에 있는 서버의 공개키로 암호화하여 서버에 전송
- S : 서버는 자신의 개인키를 이용하여 대칭키를 확보하고, 메시지를 해석
- 만약 중간에 CA인증서를 공격자가 위조하여 가로채고 요청을 한다면 어떡하나요?
- 결국 서버의 개인키를 알지 못한다면 가로채도 의미가 없습니다. 클라이언트가 사용할 데이터 암호화 키는 서버의 공개키를 이용하기 때문에 서버의 개인키가 없다면 해석 할 수 없습니다.
로드 밸런서란 무엇인가요?
- 부하 분산 장치 또는 기술을 의미합니다.
- 접속 요청을 사전에 할당한 VIP로 받아 요청을 분배해줍니다.
- 중간에 서버 하나가 죽는다면 어떡하나요?
- 이를 확인하기 위해서 지속적으로 헬스체크를 수행합니다
- ICMP : 직접 PING 을 날리거나 (3계층)
- TCP : 연결을 시도하거나 (4계층)
- HTTP : 요청을 시도하거나 (7계층)
- 이를 확인하기 위해서 지속적으로 헬스체크를 수행합니다
- 어떻게 균등하게 분배하나요?
- Weighted Round Robin : 가중치가 높은 서버에 요청을 배분합니다. 처리성능이 각각 다를 경우
- Least Connection: 연결이 제일 적은 서버에 요청을 전달합니다.
- Hash : 특정 사용자가 동일 서버에 연결이 필요할경우 사용합니다.
- 중간에 서버 하나가 죽는다면 어떡하나요?
- 접속 요청을 사전에 할당한 VIP로 받아 요청을 분배해줍니다.
DSR이 무엇인가요?
- 동영상 스트리밍과 같이 나가는 트래픽이 들어가는 트래픽보다 클 경우 모두 로드 밸런서를 거쳐야 하기 때문에
로드 밸런서가 병목지점이 될 수 있기 때문에 로드 밸런서를 거치지 않고 서버에서 직접 응답하는것을 의미합니다.
GET과 POST 방식의 차이점?
- GET의 경우 요청하는 데이터가 URL에 그대로 붙어서 노출되기 때문에 보안에 취약합니다. 추가적으로 URL의 길이는 한정되어있습니다. 동일한 요청의 경우 캐싱됩니다.
- POST의 경우 request body 부분에 데이터가 담겨있으며 암호화를 한다면 GET보다 보안이 좋습니다.
CORS 문제를겪은적 있나요?
- 네. 동일한 하드웨어에서 프론트엔드와 백엔드를 둘다 실행시켰을 때
프론트엔드에서 백엔드로 요청을 하는경우 흔히 발생했습니다.
- 왜 문제가 일어나는건가요?
- 서로 다른 도메인간 정보를 공유하는것을 브라우저에서 보안적으로 막기 때문입니다.
- 프록시 또는 애플리케이션 코드에 CORS 설정을 열어두는 방식으로 해결 가능합니다.
- 왜 문제가 일어나는건가요?
NGINX또는 APACHE는 어떤 계층인가요
- HTTP웹서버들은 애플리케이션 레이어이며 HTTP는 TCP/IP 프로토콜을 이용하기 때문에 4계층입니다.
댓글남기기