[면접준비] 컴퓨터 네트워크

hwee·2024년 10월 15일
0

면접준비

목록 보기
3/7

OSI 7계층

통신이 일어나는 7단계 과정을 정의한 국제 표준 모델
계층이 분리되어 있으므로, 유지관리가 편하다.

예시의 상황을 통해 알아보면 다음과 같다.
사용자가 웹 주소를 입력하면 (응용 계층),
데이터를 압축하거나 암호화하여 (표현 계층),
서버와의 세션을 설정하고 유지하며 (세션 계층),
패킷으로 나누어 신뢰성 있게 전송하고 (전송 계층),
네트워크를 통해 목적지 IP로 라우팅하며 (네트워크 계층),
물리적인 네트워크 환경을 통해 프레임을 전송하고 (데이터 링크 계층),
전기/광 신호를 통해 데이터를 실제로 전송합니다 (물리 계층).
MAC주소(Media Access Control Address) :
(컴퓨터, 스마트폰, 프린터 등)에 고유하게 할당된 하드웨어 주소
데이터링크 레이어에서 데이터를 적절한 장치에 보내기 위해 사용한다.

TCP handshake

애플리케이션 사이에서 안전성을 보장하며 데이터를 통신하는 규약
TCP는 기본적으로 unreliable network에서, reliable network를 보장할 수 있도록 하는 프로토콜

3way handshake : 연결 성립

1. SYN (Synchronize):
클라이언트가 서버로 SYN 패킷을 전송하여 연결을 요청합니다. 이 패킷은 클라이언트의 초기 시퀀스 번호(ISN)를 포함합니다.
2. SYN-ACK (Synchronize-Acknowledge):
서버가 클라이언트의 요청을 수신하면, 클라이언트의 시퀀스 번호에 응답하는 ACK 패킷과 함께, 자신의 초기 시퀀스 번호를 담은 SYN-ACK 패킷을 클라이언트로 보냅니다.
3. ACK (Acknowledge):
클라이언트는 서버의 SYN-ACK에 대한 응답으로 ACK 패킷을 전송합니다. 이때 클라이언트는 서버의 시퀀스 번호에 1을 더하여 응답하며, 연결이 성립됩니다.

클라이언트의 시퀀스 번호 :

TCP 통신에서 데이터 전송의 순서를 추적하고 신뢰성을 보장하기 위해 사용하는 고유한 번호. TCP는 데이터를 패킷으로 나누어 전송하는데, 이때 각 패킷이 순서대로 전송되고 도착할 수 있도록 시퀀스 번호를 부여한다.

4 way handshake : 연결 해제

FIN (Finish):
클라이언트(또는 서버)가 연결을 종료하고 싶을 때 FIN 패킷을 전송하여, 더 이상 데이터를 전송하지 않겠다고 알립니다.
ACK (Acknowledge):
서버(또는 클라이언트)는 FIN 패킷을 수신하면 ACK 패킷을 보내고, 해당 FIN 패킷을 확인합니다. 이때 일방향 연결 종료가 이루어집니다. 즉, 클라이언트는 데이터를 더 이상 보내지 않지만, 서버는 여전히 데이터를 보낼 수 있습니다.
FIN (Finish):
서버(또는 클라이언트)가 더 이상 데이터를 전송할 필요가 없을 때, FIN 패킷을 보내 연결을 종료하겠다고 알립니다.
ACK (Acknowledge):
클라이언트(또는 서버)는 서버의 FIN 패킷을 수신한 후, ACK 패킷을 보내 연결 종료 요청을 확인하고, 양쪽 모두 연결이 해제됩니다.

TCP/IP 흐름제어/혼잡제어

TCP 프로토콜이 보장하는 reliable network는 4가지 문제가 존재한다.
1. 손실 : 데이터 패킷이 네트워크 전송 중 손실되는 것 (재전송으로 해결)
2. 순서바뀜 : 패킷이 순서대로 도착하지 않는 것 (시퀀스 번호로 해결)
3. 혼잡(Congestion) : 트래픽 증가로 네트워크 혼잡(혼잡제어 알고리즘으로 해결)
4. 과부하(Overload) : receiver에 과한 트래픽으로 과부하(트래픽분산으로 해결)

흐름제어/혼잡제어란?

송신측과 수신측의 데이터 처리 속도 차이를 해결하는 기법
receiver가 sender에게 자신의 상태를 feedback해 지나치게 많은 패킷을 받지 않도록 조절한다.

전체 데이터 전송 과정

Application Layer (응용 계층):
송신 측에서 응용 계층은 소켓(Socket)을 통해 데이터를 전송합니다. 데이터는 TCP 소켓에 쓰여집니다.
Transport Layer (전송 계층):
응용 계층에서 넘겨받은 데이터는 세그먼트(Segment)라는 단위로 감싸집니다. TCP 프로토콜은 이 데이터에 헤더를 추가하여 세그먼트를 구성합니다. 헤더에는 시퀀스 번호와 같은 정보가 포함되며, 이 세그먼트는 네트워크 계층으로 넘겨집니다.
Send Buffer와 Receive Buffer:
데이터를 전송하기 전에 송신 측(send buffer)에 데이터를 저장합니다. 이 버퍼는 송신 중에 데이터가 손실되거나 재전송이 필요한 경우를 대비하여 데이터를 잠시 저장해두는 공간입니다.
수신 측에서도 데이터를 받으면 수신 버퍼(receive buffer)에 저장합니다. 이 버퍼는 수신된 데이터를 저장해 두고, 응용 프로그램이 데이터를 읽어 처리할 준비가 되면 읽어들입니다.

흐름 제어 (Flow Control)

receive buffer가 제한한 저장 용량을 초과하는 경우 데이터 손실이 생기기 때문에 데이터 전송량을 조절해야 한다.
해결 방법
1. Stop and Wait :
매번 전송한 패킷에 대해 확인 응답을 받아야 다음 패킷을 전송하는 방법
2. Sliding Window
receiver가 수신할 수 있는 데이터의 윈도우 크기만큼 sender가 세그먼트를 전송할 수 있게 하는 동적 데이터 흐름 조절 기법

혼잡 제어 (Congestion Control)

네트워크 내에 패킷의 수가 과도하게 증가하는 혼잡 현상을 방지하거나 제거하는 기법
흐름제어가 송수신자의 전송 속도를 다루지만, 혼잡제어는 호스트와 라우터를 포함한 넓은 관점에서 문제를 다룬다.
해결 방법
1. AIMD :
패킷을 한개씩 보내면서 문제가 없으면 Window(단위시간에 보내는 패킷 수) 크기를 1씩 증가시키는 기법
패킷 전송에 실패하면 패킷 보내는 속도를 절반으로 줄인다.
2. Slow Start :
AIMD와 같은 방식으로 작동하며 Window 크기를 2배씩 늘려간다.
혼잡 발생시 Window 크기를 1로 떨어뜨린다.

UDP 통신

비연결형, 신뢰성 없는 전송 프로토콜
Transport Layer에서 사용하는 프로토콜이다.

TCP, UDP 탄생 배경

  1. IP는 Host to Host(장치->장치)만 지원한다. 하나의 장비 안에서 수많은 프로그램이 통신할 경우를 위해 포트 번호가 탄생
  2. IP에서 패킷 전송 중 오류 발생시, ICMP에서 알려주지만 해결하지 못하기에 상위 프로토콜인 TCP와 UDP가 탄생
    ICMP : 운영체제에서 오류 메시지를 전송받는 인터넷 제어 메시지 프로토콜

TCP vs UDP

UDP:
TCP보다 헤더의 용량이 작아 데이터 처리가 빠르고, 가격이 저렴하다. (비연결성)
UDP는 IP의 기능 위에 포트 번호, 체크섬을 통한 오류 검출 등의 기능을 추가하여, 다중 애플리케이션 통신과 신뢰성 있는 데이터 전송을 일부 제공하며, 특히 실시간 애플리케이션에 적합(온라인 게임, 화상 회의)
TCP
데이터의 안정성을 보장하지만, 처리가 느리고 가격이 비싸다.(연결성)
이메일 전송, 파일 전송에 유리

DNS가 UDP를 사용하는 이유

  1. TCP가 3-way handshake를 사용하는 반면, UDP는 connection 을 유지할 필요가 없음.
  2. DNS request는 UDP segment에 꼭 들어갈 정도로 작음.
  3. UDP는 not reliable이나, reliability는 application layer에 추가될 수 있음. (Timeout 추가나, resend 작업을 통해)

대칭키, 공개키

대칭키(Symmetric Key)

암호화와 복호화에 같은 암호키를 사용해서 빠르지만 해킹 위험 존재

비대칭 키(Asymmetric key) : 공개키(public key), 개인키(private key)

암호화와 복호화에 사용하는 암호키를 분리한 알고리즘
A의 공개키로 암호화한 데이터는 A의 개인키로만 복호화할 수 있다.
대칭키와 비대칭키 방식을 혼합하면 SSL 탄생의 시초가 된다.
디지털 서명 : 개인키로 서명하고, 공개키로 복호화하면 데이터 전송자를 확인할 수 있으며, 데이터 변조 여부를 확인할 수 있다.

HTTP, HTTPS

HTTP(HyperText Transfer Protocol) : 인터넷에서 클라이언트와 서버가 자원을 주고받을 때 쓰는 통신 규약
HTTP는 텍스트 기반 프로토콜로 동작하며, 텍스트 형식으로 데이터를 주고받는다.
HTTPS(HTTP Secure) : 인터넷에서 정보를 암호화하는 SSL 프로토콜을 사용해 텍스트를 암호화한다.

TLS/SSL Handshake


Client Hello와 Server Hello를 통해 SSL 버전을 맞추고, 생성한 난수를 바탕으로 브라우저에서 대칭키를 만든다. 이 대칭키를 서버에서 암호화해 데이터를 전송하는 것이 SSL/TLS Handshake 과정이다.

LoadBalancer(LB)

Scale-up : HW 사양을 올리는 것
Scale-out : 여러대의 서버로 부하를 나누는 것
HW 향상 비용이 비싸기에 Scale-out 기법을 선택하고, LB로 요청을 분산시키는 것이 효율적이다.

LB 알고리즘

1. 라운드로빈(RR) : 각 대상에게 요청을 차례대로 전달하는 방식
2. Least Connection : 트래픽이 가장 적은 서버 선택
3. Source : 사용자 IP를 해싱해서 분배 (특정 사용자가 항상 같은 서버로 연결)

Blocking/Non-Blocking & Synchronous/Asynchronous

Blocking : 함수 B는 내 할 일을 다 마칠 때까지 제어권을 가지고 있는다. A는 B가 다 마칠 때까지 기다려야 한다.
Non-blocking : 함수 B는 할 일을 마치지 않았어도 A에게 제어권을 바로 넘겨준다. A는 B를 기다리면서도 다른 일을 진행할 수 있다.
Synchronous : 함수 A는 함수 B가 일을 하는 중에 기다리면서, 현재 상태가 어떤지 계속 체크한다.
Asynchronous : 함수 B의 수행 상태를 B 혼자 직접 신경쓰면서 처리한다. B의 작업이 종료되면 A로 callback이 온다.
블락은 주도권을 주는지 바로 받아오는지의 문제고, 동기는 계속 상태를 체크하는지 안하는지의 문제이다.

Non-Block/Asynchronous

Non-blocking: 요청한 작업이 즉시 반환되고, 작업이 완료되지 않았으면 계속해서 다른 작업을 처리합니다. 작업이 끝났는지 여부는 프로세스가 직접 확인해야 합니다(예: 폴링).
Asynchronous: 작업이 비동기적으로 백그라운드에서 진행되며, 작업이 완료되면 별도의 방식으로 완료 사실을 통보받습니다(callback)

Reference

https://gyoogle.dev/blog/computer-science/network/OSI%207%EA%B3%84%EC%B8%B5.html
https://jungeun960.tistory.com/181
https://grip.news/archives/1304/
GPT...

profile
https://fuzzy-hose-356.notion.site/1ee34212ee2d42bdbb3c4a258a672612

0개의 댓글