CS 면접대비 - 네트워크

OSI 7계층
  • “OSI 7계층을 설명해주세요”
    • Physical Layer - 케이블, 허브 : 전기신호 전송
    • Data Link Layer - 브릿지, 스위치 : MAC주소 부여!
      • MAC 주소란?
        • 하드웨어 장치의 네트워크 식별자 - 주민등록번호이며 변경되지 않음
    • Network Layer - 라우터, IP : 라우터를 통해 IP 주소를 지정
      • IP 주소란?
        • 컴퓨터 네트워크에 할당된 논리적 숫자 주소
          • IP 주소만으로 통신이 가능한가요?
            • 그렇지 않습니다. 로컬 네트워크 내부에서 어떤 하드웨어와 통신하는지 알기 위해서는 MAC주소를 알아야 합니다.
      • 라우터의 역할은?
        • 네트워크 자체를 연결시켜주고 최적화된 경로로 통신이 가능하게끔 하는 네트워크 장치
    • 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를 통해서 커넥션을 수립합니다. 과정은 아래와 같습니다.
    1. 클라이언트 -> 서버 : 커넥션 신청을 하기 위해서 SYN 패킷을 전송합니다 (seq=x)
    2. 서버 -> 클라이언트 : 커넥션 신청을 받았다는것을 확인시켜주기 위해 ACK(x+1) 과 SYN(y) 를 전송합니다
    3. 클라이언트 -> 서버 : 커넥션을 수립하기 위해서 ACK(y+1) 패킷을 전송합니다.
  • 4-way handshake는 커넥션을 종료하기 위해서 사용됩니다.
    1. 클라이언트 -> 서버 : FIN 플래그를 전송합니다.
    2. 서버 -> 클라이언트 : FIN에 대한 ACK를 전송합니다.
    3. 서버 -> 클라이언트 : 데이터를 모두 받았으므로 FIN을 전송합니다
    4. 클라이언트 -> 서버 : FIN 에 대한 ACK를 전송합니다.
Checksum은 무엇인가요?
  • 전달된 네트워크 Segment에 문제가 있는지 검증하기 위해서 모든 Segment Header의 값을 더한것을 넣어둡니다.
    • 무엇을 더하는건가요?
      • CRC의 경우 내용을 이진수로 취급하여 모두 더하고 상수로 나눈 뒤 사용합니다.
      • Summation의 경우 각 바이트를 정수형으로 취급하여 모두 더해주고 나머지 연산의 결과값을 사용합니다.
    • TCP와 UDP중 어떤 프로토콜이 checksum을 사용하나요?
      • 둘 다 사용합니다.
    • 체크섬으로 오류를 복원할 수 있나요?
      • 불가능합니다. 오류의 완벽한 검출 또한 어렵습니다.
주소창에 naver.com 을 입력하면 일어나는 일을 설명해주세요

네트워크 통신을 시도하는 것입니다. naver.com 에대한 IP 주소를 찾는것이 첫번째 목적입니다.

  1. 윈도우의 경우, hosts 파일을 먼저 참조합니다. 만약 명시적으로 도메인에 대한 매핑이 있다면 즉시 사용합니다.
  2. 없다면 이전에 접속한 이력이 있는지 RAM의 DNS 캐시를 참조합니다.
  3. 없다면 공유기를 통해서 ISP를 거쳐 DNS lookup을 시도합니다.
  4. 받아온 IP 주소를 보고 로컬 네트워크를 살펴봅니다. 대역대가 다르기 때문에 다른 네트워크로 보내기 위해 공유기를 찾아야 합니다.
  5. 공유기를 찾기 위해서 ARP를 합니다. 즉 브로드캐스팅을 하여 공유기의 MAC주소를 받아옵니다.
  6. 공유기에게 IP 주소로 메시지를 전달하라는 명령을 내립니다.
  7. 공유기는 최적의 경로를 찾아서 다음 라우터로 ARP 과정을 반복하며 메시지를 전송합니다.
  8. 받아온 IP 주소를 통해서 HTTP 프로토콜을 사용하기 위해서 TCP/IP 연결을 수립합니다.
    • 3-way handshake
    • 데이터 전송
    • 4-way handshake
  9. 다운로드한 CSS/HTML/JS 파일들을 다운로드하고 브라우저에서 렌더링합니다.
  10. HTML/CSS/JS 파일들을 디스크에 Caching 되며 다시 접속할 경우 캐시를 참조합니다.
공개키와 대칭키의 차이는 무엇인가요?
  • 공개키는 암호화하기위해서 사용한 키와 복호화하기위해서 사용하는 키가 동일한 것을 의미합니다.
  • 대칭키는 암호화하기위해 사용한 키와 복호화하기 위해 사용하는 키가 다른것을 의미합니다.
HTTPS는 어떤 키를 사용하나요?
  • 대칭키와 비대칭키를 둘다 사용합니다.
TLS/SSL Handshake 과정을 설명해주세요
  1. TCP 연결을 수립합니다.
  2. C->S : Client Hello
  3. C<-S : Server Hello + CA 인증서
  4. C : CA 인증서의 유효성 검증
  5. C->S : 자신이 생성한 랜덤 대칭키를 인증서에 있는 서버의 공개키로 암호화하여 서버에 전송
  6. S : 서버는 자신의 개인키를 이용하여 대칭키를 확보하고, 메시지를 해석
  • 만약 중간에 CA인증서를 공격자가 위조하여 가로채고 요청을 한다면 어떡하나요?
    • 결국 서버의 개인키를 알지 못한다면 가로채도 의미가 없습니다. 클라이언트가 사용할 데이터 암호화 키는 서버의 공개키를 이용하기 때문에 서버의 개인키가 없다면 해석 할 수 없습니다.
로드 밸런서란 무엇인가요?
  • 부하 분산 장치 또는 기술을 의미합니다.
    • 접속 요청을 사전에 할당한 VIP로 받아 요청을 분배해줍니다.
      • 중간에 서버 하나가 죽는다면 어떡하나요?
        • 이를 확인하기 위해서 지속적으로 헬스체크를 수행합니다
          • ICMP : 직접 PING 을 날리거나 (3계층)
          • TCP : 연결을 시도하거나 (4계층)
          • HTTP : 요청을 시도하거나 (7계층)
      • 어떻게 균등하게 분배하나요?
        • Weighted Round Robin : 가중치가 높은 서버에 요청을 배분합니다. 처리성능이 각각 다를 경우
        • Least Connection: 연결이 제일 적은 서버에 요청을 전달합니다.
        • Hash : 특정 사용자가 동일 서버에 연결이 필요할경우 사용합니다.
DSR이 무엇인가요?
  • 동영상 스트리밍과 같이 나가는 트래픽이 들어가는 트래픽보다 클 경우 모두 로드 밸런서를 거쳐야 하기 때문에
    로드 밸런서가 병목지점이 될 수 있기 때문에 로드 밸런서를 거치지 않고 서버에서 직접 응답하는것을 의미합니다.
GET과 POST 방식의 차이점?
  • GET의 경우 요청하는 데이터가 URL에 그대로 붙어서 노출되기 때문에 보안에 취약합니다. 추가적으로 URL의 길이는 한정되어있습니다. 동일한 요청의 경우 캐싱됩니다.
  • POST의 경우 request body 부분에 데이터가 담겨있으며 암호화를 한다면 GET보다 보안이 좋습니다.
CORS 문제를겪은적 있나요?
  • 네. 동일한 하드웨어에서 프론트엔드와 백엔드를 둘다 실행시켰을 때 프론트엔드에서 백엔드로 요청을 하는경우 흔히 발생했습니다.
    • 왜 문제가 일어나는건가요?
      • 서로 다른 도메인간 정보를 공유하는것을 브라우저에서 보안적으로 막기 때문입니다.
      • 프록시 또는 애플리케이션 코드에 CORS 설정을 열어두는 방식으로 해결 가능합니다.
NGINX또는 APACHE는 어떤 계층인가요
  • HTTP웹서버들은 애플리케이션 레이어이며 HTTP는 TCP/IP 프로토콜을 이용하기 때문에 4계층입니다.

카테고리:

업데이트:

댓글남기기