본문 바로가기

CS/네트워크

(1) 네트워크에 관해서_

동기(Synchronous)와 비동기(Asynchronous)에 대해서 설명해주세요

동기(Synchronous)는 요청후 시간이 얼마나 걸리던 요청한 자리에서 결과가 주어져야합니다. 설계가 매우 직관적이며 결과가 주어질때까지 아무것도 하지 못합니다.
비동기(Asynchronous)는 요청과 그 결과가 동시에 일어나지 않습니다. 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있어 자원을 효율적으로 사용 가능합니다.

Blocking / Non Blocking에 대해서 설명 해주세요.

Blocking / Non Blocking은 처리되어야 하는 작업이 전체적인 작업 흐름을 막나, 안막나의 관점입니다. 즉, 제어권이 누구한테 있는지가 관점입니다.

Sync / Async의 차이에 대해서 설명 해주세요.

Sync / Async는 시간을 맞춰 실행되느냐에 따라 구분됩니다. 즉 호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행, 리턴 순차적인 흐름을 따르느냐, 안따르냐입니다.

Blocking / Non Blocking의 차이에 대해서 설명해주세요.

Blocking은 다른 함수 호출시, 제어권도 같이 넘겨주는 것을 말합니다. A 함수가 B 함수를 호출할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것입니다. 요청 받은 함수는 모든 실행을 마치고 최종 return 값을 돌려주게 됩니다.

Non Blocking은 호출할 때 제어권을 넘겨주지만, 바로 돌려 받아 작업을 수행합니다. A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른일을 할 수 있게 합니다.

Sync / Async의 차이에 대해서 설명해주세요.

Sync는 함수들이 작업을 동시에 시작하거나, 끝나는 타이밍을 맞추거나 하나가 끝나고 다른 하느를 차례로 실행하는 것을 의미합니다. A 함수가 B 함수를 호출 할 때, 함수의 결과를 A 함수가 처리하는 것입니다.

Async는 서로가 언제 시작하고 언제 일을 마치는지 신경쓰지 않습니다. 요청을 받은 함수가 완료 되었는지 여부를 알려주는 방식입니다. 그래서 결과값과 제어값이 따로 반환됩니다. A 함수가 B 함수를 호출할 때 함수의 결과를 B함수가 처리합니다.


주소창에 URL을 친 후 흐름에 대해서 설명해주세요.

브라우저의 URL을 해석/파싱한 후, DNS 서버에서 IP주소를 받아옵니다. 그 후에 라우터를 이용해 접속하려는 네트워크로 가는 최적의 경로를 찾고, TCP 소켓 통신 3-way handshake라는 과정을 통해 연결 후, 요청한 URL 페이지를 서버에 요청하고, 서버가 응답해주면서 URL 페이지가 열립니다.


DNS(Domain Name System)의 동작 방식에 대해서 설명해주세요.

브라우저는 해당 URL의 IP주소를 local DNS에 요청합니다. Local DNS에 해당 URL이 존재한다면 바로 응답을 보내고, 존재하지 않으면 root DNS 서버에 해당 URL의 IP 주소를 요청한다.

Root DNS 서버에도 해당 URL이 존재하지 않을때는 어떻게 되나요?

하위 DNS 서버에 요청하라는 응답을 보내게 됩니다. 하위 DNS 서버에 요청하라는 응답을 받은 Local DNS는 .com 도메인을 관리하는 DNS 서버에 해당 URL의 IP 주소를 다시 요청하게 됩니다. 
.com을 DNS 서버에 해당 URL의 IP 주소가 없다면 또 다시 하위 DNS 서버에 요청하라는 응답을 주고, local DNS 서버는 요청한 URL을 관리하는 DNS 서버에 다시 요청을 보내게 됩니다. 요청한 URL을 관리하는 DNS에 캐싱하며 다음부터는 IP주소를 바로 응답하게 됩니다.

IP 주소와 MAC 주소는 왜 필요한가요?

라우터에서는 IP 주소에 해당하는 컴퓨터가 누군지 알아내기 위해 MAC 주소가 필요합니다.
접속하려는 서버의 네트워크를 찾기 위해 IP 주소를 사용하고, 네트워크 내부에 있는 컴퓨터와 통신하기 위해 MAC 주소가 필요하기 때문입니다.


OSI 7계층에 대해서 설명해주세요.

하나의 네트워크 통신 모델로 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 의미합니다. 또한 통신이 일어나는 과정을 단계별로 파악해 문제를 해결할 수 있기 때문에 나뉘어져 있습니다.

7계층을 전체적으로 간단하게 설명해주세요.

물리계층은 실제 장치를 연결하는 장치들입니다.
데이터 링크 계층은 MAC 주소를 통해 통신하며, 안정적인 정보 전달을 위해 CRC 기반의 오류제어와 흐름제어가 추가 됩니다.
네트워크 계층은 데이터를 목적지까지 안전하고 빠르게 전달하기 위해 IP를 사용한 라우팅, 흐름제어, 단편화, 오류제어를 수행합니다.
전송 계층은 신뢰성있는 데이터를 주고받게 해주며 시퀸스 넘버 기반의 오류 제어 방식을 사용하고 대표적인 프로토콜은 TCP가 있습니다.
세션 계층은 통신 경로 확립이나 단절, 전달 방식을 정합니다.
표현 계층은 데이터에 대한 동일한 형식을 제공하고 데이터 압축과 암호화 기능을 수행합니다.
응용 계층은 사용자나 응용 프로그램 사이에 데이터 교환을 가능하게 합니다. HTTP와 FTP가 있습니다.

OSI 7계층을 하나의 예시를 들어서 설명해주세요.

PC방을 예시로 들겠습니다. PC 전체에 문제가 발생하게 됐다면, 네트워크 계층, 혹은 랜선을 파악해야 하기 때문에 물리계층을 살펴볼 수 있습니다. 단, 하나의 PC만 문제가 발생하게 됐다면, SW와 스위치의 문제로 볼수 있습니다. SW에서 문제가 발생했다면 응용계층에서, 스위치의 문제라면 데이터링크 계층의 문제라고 생각해 해결합니다.


TCP / IP 계층에 대해서 설명해주세요.

네가지 계층으로 구분됩니다. 네트워크 인터페이스, 인터넷, 전송, 응용으로 구분 됩니다.

네가지 계층에 대해서 간략하게 설명 해주세요.

네트워크 인터페이스 계층에선 Node와 Node간의 신뢰성 있는 데이터 전송을 담당합니다.
인터넷 계층에선 호스트간의 라우팅을 담당합니다. 대표적 프로토콜로는 IP가 있습니다. (IP, ARP, RARP, ICMP, IGMP)
전송계층에선 프로세스간 신뢰성 있는 데이터 전송을 담당합니다. 프로세스간 전송을 담당하기 위해 논리적 주소를 port번호로 사용합니다. 대표적 프로토콜은 TCP와 UDP가 있습니다.
응용계층에선, 서버나 클라이언트 응용 프로그램이 이 계층에서 동작합니다. 대표적 프로토콜은 HTTP, FTP, SMTP, DNS등이 있습니다. (*HTTP, FTP, SMTP, POP3, DNS)


3 way handshake에 대해서 설명해주세요.

3 way handshake는 TCP의 연결 초기화와 연결하고자 하는 장치간 논리적 접속을 성립하기 위해 사용합니다.
동작방식은 SYN을 보내고, 접속 요청 받은 프로세스가 수락해 SYN과 ACK를 보냅니다. 마지막으로 접속 요청 프로세스가 수락 확인을 보내 연결을 맺습니다.

3 way hanshake의 역할은 무엇인가요?

양쪽 모두 데이터가 전송할 준비가 됐다는 것을 보장하는 방식입니다.

SYN에 무작위 수를 넣는데 그 이유에 대해서 설명해주세요.

연결시 사용하는 포트는 유한 범위내에서 사용하게 됩니다. 시간이 지난 후에 재사용이 되는데 두 통신 호스트가 과거에 사용된 포트번호 쌍을 사용할 수 있기 때문에 무작위 수를 넣게 됩니다.

서버 측에서 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 수가 전송된다면 이전의 연결로부터 오는 패킷으로 인식할 수 있기 때문입니다.

4 way handshake에 대해서 설명해주세요.

세션을 종료하기 위해 수행되며, 연결된 회선을 해제할 때 주고 받는 확인 작업입니다. 클라이언트가 연결을 종료하며 FIN 플래그를 보내고, 서버는 ACK를 보내고 자신의 통신이 끝날때 까지 기다립니다. 연결 종료할 준비가 되면 연결 해제를 위한 준비를 알리기 위해 클라이언트에 FIN 플래그를 전송하고 클라이언트는 해지가 준비 되었다는 ACK 확인 메시지를 보내며 종료됩니다.

Time-wait을 4way handshake에서 사용하는데 그 이유에 대해서 설명해주세요.

혹시 모를 패킷 전송 실패에 대비하기 위해 존재하는 소켓입니다. 서버에서 FIN을 전송하기 전에 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황에 일정시간이 지나면 세션을 만료하고 연결을 종료합니다.


TCP의 통신 방식에 대해서 설명해주세요.

TCP는 3 way handshake를 통해 연결하고, 4 way handshake를 통해 해제하기 때문에, 신뢰성이 바탕이 되지만 속도가 느려집니다. 그래서 TCP는 신뢰도가 필요한 HTTP, E-mail에 사용됩니다.

TCP의 흐름제어(Flow Control)에 대해서 설명해주세요.

흐름제어는 수신측이 송신측보다 데이터 처리 속도가 빠르면 문제가 없지만, 송신측의 속도가 빠를 경우 문제가 발생하기 때문에 필요합니다. 수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실될 수 있으며, 만약 손실된다면 불필요하게 데이터 전송이 송/수신간 빈번하게 발생되어 문제가 발생을 해결해주는 방식입니다.

흐름제어(Flow Control) 방식에 대해서 설명해주세요.

Stop and Wait이 있습니다. 매번 전송한 패킷에 대해 확인 응답을 받아야만 다음 패킷을 전송하는 방식입니다.
Sliding Window는 수신측에서 설정한 Window크기만큼 송신측에서 확인 응답없이 세그먼트 전송할 수 있게 하여 데이터 흐름을 동적으로 조절합니다.

TCP의 혼잡제어(Congestion Control)에 대해서 설명해주세요.

혼잡제어는 한 라우터에 데이터가 몰릴 경우 자신에게 온 데이터를 전부 처리할 수 없게 됩니다. 이렇게 되면 Host들은 또 다시 재전송을 하게 되고 혼잡을 가중시켜 오버플로우 혹은 데이터 손실이 발생됩니다. 이러한 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이는 방식입니다.

혼잡제어(Congestion Control) 방식에 대해서 설명해주세요.

1. AIMD

2. Slow Starter

3. Fast Restransmit

4. Fast Recovery

UDP의 통신 방식에 대해서 설명해주세요.

순서를 보장하지 않고 신뢰도가 낮은 데이터를 전송하는 대신, 단방향 데이터 전송으로 속도가 빠릅니다. 속도가 빨라 스트리밍 서비스에 사용됩니다.


 HTTP와 HTTPS에 대해서 설명해주세요.


캐시(Cache)에 대해서 설명해주세요.

데이터나 값을 미리 복사해 임시로 저장해 두는 장소를 의미합니다. 예를 들어 사이트를 불러 올 때 전에 불러왔던 사진을 접속때마다 불러오면 데이터의 낭비를 일으킵니다. 이러한 이유로 캐시에 저장을 해두면 데이터의 낭비를 줄일 수 있습니다.

지역 캐시(Local Cache)와 글로벌 캐시(Global Cache)에 대해서 설명해주세요.

로컬은 장비내에서만 작동되는 캐시로 로컬 장비의 자원을 이용합니다. 로컬에서만 작동하기 때문에 속도가 빠르고 서버와 데이터 공유가 어렵습니다.

글로벌은 여러 서버에서 캐시 서버에 접근해 사용하는 캐시로 분산된 서버에서 데이터를 저장하고 조회할 수 있습니다. 네트워크를 통해 데이터를 가져오므로, 로컬에 비해 상대적으로 느립니다. 그러나 별도의 캐시 서버를 이용하기 때문에 서버간의 데이터 공유가 쉽습니다.

캐시 서버(Cache Server)에 대해서 설명해주세요.

서버의 과부하를 막기 위해 설치된 서버 입니다. 보통 이미지나 동영상과 같은 데이터를 캐시서버에 적재해 놓고, 사용자들은 이를 빠르게 받아 볼 수 있습니다.

웹 캐시 서버(Web Cache Server)에 대해서 설명해주세요.

프록시 서버(Proxy Server)의 한 형태라고 할 수 있습니다. 클라이언트가 요청한 컨텐츠들을 기억하고 있다가 어느 한 클라이언트가 웹 캐시 서버가 기억하고 있는 동일한 컨텐츠를 또 다시 요청하는 경우에 직접 응답해 웹 서버의 부하를 절감시켜주는 역할을 합니다. 또한 실제 서버에서 응답해준 컨텐츠를 웹 캐시 서버는 자신의 디스크나 메모리에 저장한 후 클라에게 제공합니다.

웹 캐시 서버의 단점에 대해서 설명해주세요.

자신의 메모리나 디스크에 저장한 컨텐츠가 유효한지 아닌지를 체크해야하는 단점이 있습니다. 그렇지 않으면 유효하지 않는 데이터가 전송됩니다.

포워드 서버 프록시(Foward Server Proxy)에 대해서 설명해주세요.

클라이언트가 요청한 내용을 캐싱하는 역할을 합니다. 이런 이유로 전송시간이 절약되고, 불필요한 외부 전송을 하지 않으며 요청도 감소하게 됩니다. 네트워크의 병목현상을 방지합니다.

전송시간절약, 불필요한 외부전송을 하지 않음, 외부 요청 감소, 네트워크 병목 현상 방지, 서버가 받은 요청을 누가 보냈는지 알지 못하게 한다.

리버스 서버 프록시(Reverse Server Proxy)에 대해서 설명해주세요.

클라이언트는 리버스 서버 프록시를 실제 서버라고 생각하며 요청하고 실제 서버의 IP가 노출되지 않습니다. 로드 밸런싱으로 해야할 작업을 나누며 서버의 부하를 분산시킵니다.

서버의 정보를 클라이언트에게 숨기고, 실제 서버의 IP가 노출되지 않습니다.


쿠키와 세션부터 ~