CS 정리 - 11

유호준·2023년 6월 7일
1

CS 정리

목록 보기
1/12

3-Way Handshake에 대해 설명해 주세요.

3-Way Handshake란 TCP가 연결을 수행하는 과정이다. 클라이언트가 SYN 요청을 보내면 서버는 이를 받아 SYN에 ACK를 더한 응답을 보낸다.그후 클라이언트이 해당 응답을 받았다는 ACK를 보내면 연결이 완료되고 데이터를 송수신받을 준비가 끝난다.

ACK, SYN 같은 정보는 어떻게 전달하는 것 일까요?

  • TCP 패킷의 헤더를 통해서 전달된다.

2-Way Handshaking 를 하지않는 이유에 대해 설명해 주세요.

신뢰성 파악 불가

신뢰성이 이유이다.연결을 신회라기 위해서는 패킷의 송수신이 가능하는 것을 확인해야 한다. 2-way handshaking에서는 일부만 확인된다. 클라이언트는 서버의 ACK신호를 통해 둘다 확인할 수 있으나 서버는 ACK를 받을 수 없기 때문에 송신을 확인할 수 없다.

ISN 동기화 불가

서버의 ISN(initial sequence number)를 받을 수 없기 때문에 세그먼트의 순서를 파악할 수 없다.

두 호스트가 동시에 연결을 시도하면, 연결이 가능한가요? 가능하다면 어떻게 통신 연결을 수행하나요?

Simultaneous Open을 통해 가능하다. TCP 는 두 개의 파이프를 사용하는 양방향 전이중 통신에 해당한다. 연결이 된 후에는 자연스럽게 양방향 데이터 전송이 가능하다.

1.각자 서로 SYN Segment를 보낸다. - SYN-SENT
2.SYN Segment를 받으면 ACK Segment를 보낸다. - SYN-RCVD
3.ACK Segment가 도착하면 각자 Established 된다.

3-Way Handshake 보다 빠르다.

SYN Flooding 에 대해 설명해 주세요.

  • 공격자가 대상 서버에 대량의 TCP SYN 요청 패킷을 보내서 서버의 리소스를 고갈시키는 공격
  1. 공격자 ———(SYN)———> 서버
  • 이 과정을 반복해 대량의 SYN 패킷을 전송한다.
  • 대량 연결 요청 자체에서 서버에게 부담을 준다.
  • 서버의 리소스가 모두 소진된다면 응답하지 못하는 상태가 된다.

    서비스 거부(Denial Of Service,DoS) 상태

  • 서버는 SYN 패킷을 받으면 SYN 패킷 관련 정보를 백 로그 큐에 저장해 관리한다.
  1. 공격자 <———(SYN+ACK)——— 서버
  • SYN+ACK 패킷을 전송하고 ACK를 받을 때까지 대기한다.
  • 서버는 half-open 상태가 된다.
  • 하지만, 공격자는 ACK를 전송하지 않고 서버를 계속 기다리게 한다.
  • half-open 연결이 계속 쌓이고, 서버의 연결 테이블이 고갈되어 서비스 거부 상태가 된다.

해결방법

SYN Cookie
1. 클라이언트 ———(SYN)———> 서버

  • 클라이언트가 서버에게 연결을 요청한다.
  • 서버는 클라이언트의 IP 주소, 포트 번호, 시간 정보 등을 이용하여 쿠키를 생성한다.
  • 쿠키는 일시적으로 서버 메모리에 저장되고, 연결이 수립된 후에는 즉시 제거 된다.
  1. 클라이언트 <———(SYN + ACK (SYN Cookie))——— 서버
  • 서버는 SYN+ACK 패킷의 ISN에 Cookie 값을 넣어 전송한다.
  • 서버는 클라이언트로 부터 받은 SYN 패킷과 연결 정보를 저장할 필요가 없다.
  • Cookie 정보를 저장하지만 메모리 사용량이 적다.
  1. 클라이언트 ———(ACK)———> 서버
  • 클라이언트는 ACK 응답 패킷을 보낸다.
  • 서버는 Sequence Number(Cookie 값 + SYN 패킷의 크기)가 올바른지 확인한다. 일치하면 연결되고, 일치하지 않으면 패킷을 무시한다.

특징

  • 정상적인 상황에서는 작동하지 않는다. 처리할 수 있는 한계를 초과했거나 SYN Flooding 공격이 가해질 때만 반응한다.
  • 백로그 큐가 차기 시작하면 경고 메시지를 뿌리고, 이후 새로운 연결 요청에 대해서는 SYN Cookie가 작동하게 된다.
  • DOS 공격(1대에서 공격)은 막을 수 있지만 DDOS공격(여러 대에서 공격)은 막을 수 없다.
  • 완벽한 해결방법은 아니므로, 다른 방식과 결합하여 사용한다. 연결 요청의 수를 제어하거나, 캐싱을 사용하거나, 로드밸런싱을 사용하여 버퍼가 가득차는 현상을 막을 수 있다.

4-Way Handshake에 대해 설명해 주세요.

4-way handshake란 TCP에서 연결을 해제하는 과정이다.

  1. 클라이언트가 서버에게 연결을 종료한다는 FIN 플래그를 보낸다
    • FIN플래그에는 실질적으로 ACK가 포함되어있다.
  2. 서버는 FIN을 받고 확인핸다는 ACK를 보낸 후 자신의 통신이 끝날 때까지 기다린다.
  3. 데이터를 전부 보냈다면, 서버는 연결 종료에 합의한다는 의미로 FIN 패킷을 보낸 후에 기다린다.
  4. 클라이언트는 서버의 FIN을 받고 확인했다는 ACK를 보낸다.
    • 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 바로 연결을 종료하지 않고 기다린다.
  5. 서버는 ACK를 받고 소켓을 닫는다.
  6. 클라이언트가 TIME_WAIT시간이 끝났다면 연결을 닫는다.

패킷이 4-way handshake 목적인지 어떻게 파악할 수 있을까

  • FIN 플래그를 통해 알 수 있다.

빨리 끊어야 할 경우엔, (즉, 4-way Handshake를 할 여유가 없다면) 어떻게 종료할 수 있을까요?

Abrupt connection release

  • RST 세그먼트가 전소오디면 갑작스러운 연결 해제가 수행된다.
  • ACK를 보내거나 기다리는 작업이 필요하짐 않고 바로 연결이 종료된다.
  • RST 비트를 1로 설정한 세그먼트를 전송한다.
    - 송신자는 패킷을 보내고 연결을 종료, 수신자는 패킷을 받으면 바로 연결을 종료

RST를 사용해 연결을 종료하는 경우

  1. 보안 위반의 경우
  • 악성 코드가 존재한다고 판단되면 연결을 즉시 종료하여 보호할 수 있다.
  1. 자원이 부족해 자원 할당을 해제해야하는 경우
    3.TCP 연결에 장애가 발생한 경우
  • 즉시 연결을 끊고 새로운 연결을 시도해 정상적인 통신으로 돌아올 수 있다.

4-Way Handshake 과정에서 중간에 한쪽 네트워크가 강제로 종료된다면, 반대쪽은 이를 어떻게 인식할 수 있을까요?

  • Timeout을 통해 일정 시간이 지나면 스스로 Close한다.

왜 종료 후에 바로 끝나지 않고, TIME_WAIT 상태로 대기하는 것 일까요?

  • 클라이언트에서 서버로 보낸 ACK가 소실되었을 수도 있다.
  • 서버에서 아직 받지 못한 잉여 패킷이 있을 수도 있다.

www.github.com을 브라우저에 입력하고 엔터를 쳤을 때, 네트워크 상 어떤 일이 일어나는지 최대한 자세하게 설명해 주세요.

  1. 네임서버에서 www.github.com의 IP 주소를 찾는다.
  2. 웹 브라우저가 서버와의 TCP 연결 시작
  3. 웹 브라우저가 HTTP 요청을 서버로 전송
  4. 응답을 받고 웹 브라우저가 콘텐츠 렌더링

DNS 쿼리를 통해 얻어진 IP는 어디를 가리키고 있나요?

해당 도메인의 서버 주소를 가리킨다..?

Web Server와 Web Application Server의 차이에 대해 설명해 주세요.

웹서버

  • 작성된 HTML 페이지 등을 네트워크 망에 종속되지 않고 웹서비스를 할 수 있도록 하는 어플리케이션
  • 정적 컨텐츠를 제공

WAS

  • 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행하게 해주는 미들웨어이다.
  • 동적 컨텐츠를 제공

URL, URI, URN은 어떤 차이가 있나요?

URI

  • 인터넷에 있는 자원이 어디에 있는지 자원 자체를 식별하는 방법

URL

  • 네트워크 상에서 리소스를 위치한 정보를 나타내는 규약

URN

  • URI의 표준 포맷 중 하나로 리소스를 특정하는 URI
  • 리소스를 영구적이고 유일하게 식별할 수 있는 URI

예) http://www.naver.com/index.html?page=1232950&id=776

DNS에 대해 설명해 주세요.

DNS란 도메인을 IP주소로 변환해주는 시스템을 말합니다. local dns, root dns, top level domain가 있다.

Local DNS

  • 가장 먼저 찾는 DNS
  • 인터넷을 할당해주는 통신사의 DNS

Root DNS

  • 최상위 DNS 서버
  • node DNS 서버에게로 차례차례 물어보는 트리구조로 되어있다.
  • 여기에도 주소가 없을 땐 최상위 도메인으로..

Top level domain

  • 국가 코드 최상위 도메인 : kr, jp, cn..
  • 일반 최상위 도메인 : com, net, org ...

DNS는 몇 계층 프로토콜인가요?

7계층

UDP와 TCP 중 어떤 것을 사용하나요?

  • DNS는 UDP를 사용한다.

이유

  • 연결 설정에 드는 비용이 없다
  • 연결 상태를 유지할 필요가 없다

DNS Recursive Query, Iterative Query가 무엇인가요?

Recursive Query

  • IP 주소를 돌려주는 작업
  • Recursive 쿼리를 받은 서버는 Iterative하게 네임서버로 Iterative 쿼리를 보내서 IP 주소를 찾게되고 결과물을 응답한다.

Iterative Query

  • Recursive DNS 서버가 다른 DNS 서버에게 쿼리를 보내어 응답을 요청하는 작업

DNS 쿼리 과정에서 손실이 발생한다면, 어떻게 처리하나요?

모르것다.

DNS 레코드 타입 중 A, CNAME, AAAA의 차이에 대해서 설명해주세요.

A

  • 주어진 호스트에 대한 IPv4주소를 알려줍니다.

AAAA

  • 주어진 호스트에 대해 IPv6 즈소를 알려준다.

CNAME

  • 도메인 이름의 별칭을 만드는 데 사용

hosts 파일은 어떤 역할을 하나요? DNS와 비교하였을 때 어떤 것이 우선순위가 더 높나요?

  • 로컬호스트용 DNS
  • DNS 서버로 가기전 hosts파일에 들러 확인함
  • 즉 DNS 서버보다 우선

SOP 정책에 대해 설명해 주세요.

  • 동일 출처 정책
  • 내 서버가 아닌 다른 서버에서 받아온 데이터는 차단
  • 자신과 동일한 도메인만 서버로부터 데이터를 요청하여 받을 수 있음

CORS 정책이 무엇인가요?

  • 서로 다른 출처간에도 요청과 응답을 허용하는 정책

Simple Request

조건

  • GET, POST, HEAD 중 하나
  • Content-Type이 다음 중 하나
    - application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain
  • CORS-safelisted request header를 포함하는 경구
  • XMLHttpReqeuest.upload에 이벤트 핸들러, 리스너가 등록되지 않은 경우
  • ReadableStream 객체가 포함되지 않은 경우

동작 과정
1. 사용자가 요청 헤더에 자신의 Origin을 실어서 서버로 요청을 보낸다.
2. 서버는 요청 헤더의 Origin을 확인한다.
3. CORS 요청이 유효하다면 서버는 응답 헤더에 Access-Control-Allow-Origin 헤더를 추가해 사용자에게 다시 전송

Preflight에 대해 설명해 주세요.

Preflight Request

  • 다른 Origin의 리소스로 요청을 미리보내 실제 요청이 전송하기에 안전한지 확인
  • 헤더에 Access-Control-Request-Method, Access-Control-Reqeust-Header가 추가된다.
  • Simple Request의 조건을 만족하지 못할시 브라우저가 자동으로 생성한다.

참고자료

profile
포트폴리오 - https://drive.google.com/file/d/152OM9p7JQorjUfvR4BaxqGuP5xtQ8-fM/view?usp=sharing

0개의 댓글